예제 #1
0
def resolve_manifest(node, filters=None, exclude=True):
    if filters:
        node = filter_manifest(node, filters)

    default_node = node.find('default')
    default_remote = default_node.get('remote')
    default_remote_url = node.find(".//remote[@name='%s']" % default_remote).get('fetch')
    default_revision = default_node.get('revision', 'HEAD')

    projects = {}

    for p_node in node.findall('project'):
        if p_node.get('remote'):
            url_base = node.find(".//remote[@name='%s']" % p_node.get('remote')).get('fetch')
        else:
            url_base = default_remote_url

        # This is what repo does, seems legit
        if url_base.index(':') == url_base.index('/')-1:
            url_base = "gopher://" + url_base
        url = urlparse.urljoin(url_base, p_node.get('name'))
        if url.startswith('gopher://'):
            url = url[9:]

        p = Project(path=p_node.get('path'),
                    revision=p_node.get('revision', default_revision),
                    remote=p_node.get('remote', default_remote),
                    url=url,
                    upstream=p_node.get('upstream', None)
        )
        projects[p.path] = p
    return projects
예제 #2
0
def filter(f, output, filters):
    node = open_xml(f)
    node = filter_manifest(node, filters)
    serialize_manifest(node, output)
예제 #3
0
def cleanup(f, output, filters):
    node = open_xml(f)
    if filters:
        node = filter_manifest(node, filters)
    tidy_remotes(node)
    serialize_manifest(node, output)