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 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)
示例#3
0
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)
示例#4
0
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)
示例#5
0
    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
示例#6
0
    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)
示例#8
0
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)