def readMetadata(repo, version): """ reads extension ID and compatibility information from metadata file in the extension's repository """ if repo.type == 'android': command = ['hg', '-R', repo.repository, 'id', '-r', version, '-n'] result = subprocess.check_output(command) revision = re.sub(r'\D', '', result) return { 'revision': revision, 'version': version, 'minSdkVersion': get_min_sdk_version(repo, version), 'basename': os.path.basename(repo.repository) } elif repo.type == 'safari': metadata = repo.readMetadata(version) certs = get_certificates_and_key(repo.keyFile)[0] return { 'certificateID': get_developer_identifier(certs), 'version': version, 'shortVersion': version, 'basename': metadata.get('general', 'basename'), 'updatedFromGallery': True } elif repo.type == 'gecko': metadata = repo.readMetadata(version) result = { 'extensionID': metadata.get('general', 'id'), 'version': version, 'compat': [] } for key, value in KNOWN_APPS.iteritems(): if metadata.has_option('compat', key): minVersion, maxVersion = metadata.get('compat', key).split('/') result['compat'].append({ 'id': value, 'minVersion': minVersion, 'maxVersion': maxVersion }) return result elif repo.type == 'ie': return { 'version': version, 'basename': os.path.basename(repo.repository) } else: raise Exception('unknown repository type %r' % repo.type)
def readMetadata(repo, version): """ reads extension ID and compatibility information from metadata file in the extension's repository """ if repo.type == 'android': command = ['hg', '-R', repo.repository, 'id', '-r', version, '-n'] result = subprocess.check_output(command) revision = re.sub(r'\D', '', result) return { 'revision': revision, 'version': version, 'minSdkVersion': get_min_sdk_version(repo, version), 'basename': os.path.basename(repo.repository) } elif repo.type == 'safari': metadata = repo.readMetadata(version) certs = get_certificates_and_key(repo.keyFile)[0] return { 'certificateID': get_developer_identifier(certs), 'version': version, 'shortVersion': version, 'basename': metadata.get('general', 'basename'), 'updatedFromGallery': True } elif repo.type == 'gecko': metadata = repo.readMetadata(version) result = { 'extensionID': metadata.get('general', 'id'), 'version': version, 'compat': [] } for key, value in KNOWN_APPS.iteritems(): if metadata.has_option('compat', key): minVersion, maxVersion = metadata.get('compat', key).split('/') result['compat'].append({'id': value, 'minVersion': minVersion, 'maxVersion': maxVersion}) return result elif repo.type == 'ie': return { 'version': version, 'basename': os.path.basename(repo.repository) } else: raise Exception('unknown repository type %r' % repo.type)
def parse_gecko_query(query): params = urlparse.parse_qs(query) version = params.get("version", ["unknown"])[0] global gecko_apps if gecko_apps == None: from buildtools.packagerGecko import KNOWN_APPS gecko_apps = {v: k for k, v in KNOWN_APPS.iteritems()} appID = params.get("appID", ["unknown"])[0] application = gecko_apps.get(appID, "unknown") applicationVersion = params.get("appVersion", ["unknown"])[0] # Only leave the major and minor release number for application applicationVersion = re.sub(r"^(\d+\.\d+).*", r"\1", applicationVersion) return version, application, applicationVersion
def readMetadata(repo, version): """ reads extension ID and compatibility information from metadata file in the extension's repository """ if repo.type == 'android': command = ['hg', '-R', repo.repository, 'id', '-r', version, '-n'] result = subprocess.check_output(command) revision = re.sub(r'\D', '', result) command = ['hg', '-R', repo.repository, 'cat', '-r', version, os.path.join(repo.repository, 'AndroidManifest.xml')] result = subprocess.check_output(command) manifest = dom.parseString(result) usesSdk = manifest.getElementsByTagName('uses-sdk')[0] return { 'revision': revision, 'minSdkVersion': usesSdk.attributes["android:minSdkVersion"].value, } else: files = subprocess.check_output(['hg', '-R', repo.repository, 'locate', '-r', version]).splitlines() if 'metadata.%s' % repo.type in files: command = ['hg', '-R', repo.repository, 'cat', '-r', version, os.path.join(repo.repository, 'metadata.%s' % repo.type)] result = subprocess.check_output(command) else: # Fall back to platform-independent metadata file for now command = ['hg', '-R', repo.repository, 'cat', '-r', version, os.path.join(repo.repository, 'metadata')] result = subprocess.check_output(command) parser = SafeConfigParser() parser.readfp(StringIO(result)) result = { 'extensionID': parser.get('general', 'id'), 'version': version, 'compat': [] } for key, value in KNOWN_APPS.iteritems(): if parser.has_option('compat', key): minVersion, maxVersion = parser.get('compat', key).split('/') result['compat'].append({'id': value, 'minVersion': minVersion, 'maxVersion': maxVersion}) return result