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 = read_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 == 'ie': return { 'version': version, 'basename': os.path.basename(repo.repository), } else: raise Exception('unknown repository type %r' % repo.type)
def createBuild(baseDir, type, outFile=None, buildNum=None, releaseBuild=False, keyFile=None, devenv=False): metadata = readMetadata(baseDir, type) version = getBuildVersion(baseDir, metadata, releaseBuild, buildNum) if not outFile: outFile = getDefaultFileName(metadata, version, 'safariextz' if keyFile else 'zip') params = { 'type': type, 'baseDir': baseDir, 'releaseBuild': releaseBuild, 'version': version, 'devenv': devenv, 'metadata': metadata, } mapped = metadata.items('mapping') if metadata.has_section('mapping') else [] files = Files(getPackageFiles(params), getIgnoredFiles(params), process=lambda path, data: processFile(path, data, params)) files.readMappedFiles(mapped) files.read(baseDir, skip=[opt for opt, _ in mapped]) if metadata.has_section('convert_js'): convertJS(params, files) if metadata.has_section('preprocess'): files.preprocess( [f for f, _ in metadata.items('preprocess')], {'needsExt': True}, ) if metadata.has_section('import_locales'): import_locales(params, files) if metadata.has_option('general', 'testScripts'): files['qunit/index.html'] = createScriptPage(params, 'testIndex.html.tmpl', ('general', 'testScripts')) if keyFile: from buildtools import xarfile certs, key = xarfile.read_certificates_and_key(keyFile) params['developerIdentifier'] = get_developer_identifier(certs) files['lib/info.js'] = createInfoModule(params) files['background.html'] = createScriptPage(params, 'background.html.tmpl', ('general', 'backgroundScripts')) files['Info.plist'] = createManifest(params, files) dirname = metadata.get('general', 'basename') + '.safariextension' for filename in files.keys(): files[os.path.join(dirname, filename)] = files.pop(filename) if not devenv and keyFile: from buildtools import xarfile xarfile.create(outFile, files, keyFile) else: files.zip(outFile)
def createBuild(baseDir, type, outFile=None, buildNum=None, releaseBuild=False, keyFile=None, devenv=False): metadata = readMetadata(baseDir, type) version = getBuildVersion(baseDir, metadata, releaseBuild, buildNum) if not outFile: outFile = getDefaultFileName(metadata, version, "safariextz" if keyFile else "zip") params = { "type": type, "baseDir": baseDir, "releaseBuild": releaseBuild, "version": version, "devenv": devenv, "metadata": metadata, } mapped = metadata.items("mapping") if metadata.has_section("mapping") else [] files = Files( getPackageFiles(params), getIgnoredFiles(params), process=lambda path, data: processFile(path, data, params) ) files.readMappedFiles(mapped) files.read(baseDir, skip=[opt for opt, _ in mapped]) if metadata.has_section("convert_js"): convertJS(params, files) if metadata.has_section("preprocess"): files.preprocess([f for f, _ in metadata.items("preprocess")], {"needsExt": True}) if metadata.has_section("import_locales"): importGeckoLocales(params, files) if metadata.has_option("general", "testScripts"): files["qunit/index.html"] = createScriptPage(params, "testIndex.html.tmpl", ("general", "testScripts")) if keyFile: from buildtools import xarfile certs, key = xarfile.read_certificates_and_key(keyFile) params["developerIdentifier"] = get_developer_identifier(certs) files["lib/info.js"] = createInfoModule(params) files["background.html"] = createScriptPage(params, "background.html.tmpl", ("general", "backgroundScripts")) files["Info.plist"] = createManifest(params, files) fixAbsoluteUrls(files) dirname = metadata.get("general", "basename") + ".safariextension" for filename in files.keys(): files[os.path.join(dirname, filename)] = files.pop(filename) if not devenv and keyFile: from buildtools import xarfile xarfile.create(outFile, files, keyFile) else: files.zip(outFile)
def readSafariMetadata(self): import buildtools.packagerSafari as packager from buildtools import xarfile metadata = packager.readMetadata(self.tempdir, self.config.type) certs = xarfile.read_certificates_and_key(self.config.keyFile)[0] self.certificateID = packager.get_developer_identifier(certs) self.version = packager.getBuildVersion(self.tempdir, metadata, False, self.buildNum) self.shortVersion = metadata.get('general', 'version') self.basename = metadata.get('general', 'basename') self.updatedFromGallery = False
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 = read_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 = read_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)