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)
Beispiel #3
0
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 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