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
def filter(f, output, filters): node = open_xml(f) node = filter_manifest(node, filters) serialize_manifest(node, output)
def cleanup(f, output, filters): node = open_xml(f) if filters: node = filter_manifest(node, filters) tidy_remotes(node) serialize_manifest(node, output)