def load(config, uri=None): if uri is not None: modulesets = [ uri ] elif type(config.moduleset) in (list, tuple): modulesets = config.moduleset else: modulesets = [ config.moduleset ] ms = ModuleSet(config = config) for uri in modulesets: if os.path.isabs(uri): pass elif config.modulesets_dir and config.nonetwork or config.use_local_modulesets: if os.path.isfile(os.path.join(config.modulesets_dir, uri + '.modules')): uri = os.path.join(config.modulesets_dir, uri + '.modules') elif os.path.isfile(os.path.join(config.modulesets_dir, uri)): uri = os.path.join(config.modulesets_dir, uri) elif not urlutils.urlparse(uri)[0]: uri = 'https://gitlab.gnome.org/GNOME/jhbuild/raw/master/modulesets' \ '/%s.modules' % uri ms.modules.update(_parse_module_set(config, uri).modules) # create virtual sysdeps system_repo_class = get_repo_type('system') virtual_repo = system_repo_class(config, 'virtual-sysdeps') virtual_branch = virtual_repo.branch('virtual-sysdeps') # just reuse this for name in virtual_sysdeps: # don't override it if it's already there if name in ms.modules: continue virtual = SystemModule.create_virtual(name, virtual_branch, 'path', name) ms.add(virtual) return ms
def load(config, uri=None): if uri is not None: modulesets = [ uri ] elif type(config.moduleset) in (list, tuple): modulesets = config.moduleset else: modulesets = [ config.moduleset ] ms = ModuleSet(config = config) for uri in modulesets: if os.path.isabs(uri): pass elif config.modulesets_dir and config.nonetwork or config.use_local_modulesets: if os.path.isfile(os.path.join(config.modulesets_dir, uri + '.modules')): uri = os.path.join(config.modulesets_dir, uri + '.modules') elif os.path.isfile(os.path.join(config.modulesets_dir, uri)): uri = os.path.join(config.modulesets_dir, uri) elif not urlparse.urlparse(uri)[0]: uri = 'https://git.gnome.org/browse/jhbuild/plain/modulesets' \ '/%s.modules' % uri ms.modules.update(_parse_module_set(config, uri).modules) # create virtual sysdeps system_repo_class = get_repo_type('system') virtual_repo = system_repo_class(config, 'virtual-sysdeps') virtual_branch = virtual_repo.branch('virtual-sysdeps') # just reuse this for name in virtual_sysdeps: # don't override it if it's already there if name in ms.modules: continue virtual = SystemModule.create_virtual(name, virtual_branch, 'path', name) ms.add(virtual) return ms
def _parse_module_set(config, uri): try: filename = httpcache.load(uri, nonetwork=config.nonetwork, age=0) except Exception as e: raise FatalError(_('could not download %s: %s') % (uri, e)) filename = os.path.normpath(filename) try: document = xml.dom.minidom.parse(filename) except IOError as e: raise FatalError(_('failed to parse %s: %s') % (filename, e)) except xml.parsers.expat.ExpatError as e: raise FatalError(_('failed to parse %s: %s') % (uri, e)) assert document.documentElement.nodeName == 'moduleset' for node in _child_elements_matching(document.documentElement, ['redirect']): new_url = node.getAttribute('href') logging.info('moduleset is now located at %s', new_url) return _parse_module_set(config, new_url) _handle_conditions(config, document.documentElement) moduleset = ModuleSet(config = config) moduleset_name = document.documentElement.getAttribute('name') if not moduleset_name: moduleset_name = os.path.basename(uri) if moduleset_name.endswith('.modules'): moduleset_name = moduleset_name[:-len('.modules')] # load up list of repositories repositories = {} default_repo = None for node in _child_elements_matching( document.documentElement, ['repository', 'cvsroot', 'svnroot', 'arch-archive']): name = node.getAttribute('name') if node.getAttribute('default') == 'yes': default_repo = name if node.nodeName == 'repository': repo_type = node.getAttribute('type') repo_class = get_repo_type(repo_type) kws = {} for attr in repo_class.init_xml_attrs: if node.hasAttribute(attr): kws[attr.replace('-', '_')] = node.getAttribute(attr) if name in repositories: logging.warning(_('Duplicate repository:') + ' '+ name) repositories[name] = repo_class(config, name, **kws) repositories[name].moduleset_uri = uri mirrors = {} for mirror in _child_elements_matching(node, ['mirror']): mirror_type = mirror.getAttribute('type') mirror_class = get_repo_type(mirror_type) kws = {} for attr in mirror_class.init_xml_attrs: if mirror.hasAttribute(attr): kws[attr.replace('-','_')] = mirror.getAttribute(attr) mirrors[mirror_type] = mirror_class(config, name, **kws) # mirrors[mirror_type].moduleset_uri = uri setattr(repositories[name], "mirrors", mirrors) if node.nodeName == 'cvsroot': cvsroot = node.getAttribute('root') if node.hasAttribute('password'): password = node.getAttribute('password') else: password = None repo_type = get_repo_type('cvs') repositories[name] = repo_type(config, name, cvsroot=cvsroot, password=password) elif node.nodeName == 'svnroot': svnroot = node.getAttribute('href') repo_type = get_repo_type('svn') repositories[name] = repo_type(config, name, href=svnroot) elif node.nodeName == 'arch-archive': archive_uri = node.getAttribute('href') repo_type = get_repo_type('arch') repositories[name] = repo_type(config, name, archive=name, href=archive_uri) # and now module definitions for node in _child_elements(document.documentElement): if node.nodeName == 'include': href = node.getAttribute('href') inc_uri = urlutils.urljoin(uri, href) try: inc_moduleset = _parse_module_set(config, inc_uri) except UndefinedRepositoryError: raise except FatalError as e: if inc_uri[0] == '/': raise e # look up in local modulesets inc_uri = os.path.join(os.path.dirname(__file__), '..', 'modulesets', href) inc_moduleset = _parse_module_set(config, inc_uri) moduleset.modules.update(inc_moduleset.modules) elif node.nodeName in ['repository', 'cvsroot', 'svnroot', 'arch-archive']: pass else: module = modtypes.parse_xml_node(node, config, uri, repositories, default_repo) if moduleset_name: module.tags.append(moduleset_name) module.moduleset_name = moduleset_name moduleset.add(module) # keep default repository around, used when creating automatic modules global _default_repo if default_repo: _default_repo = repositories[default_repo] return moduleset
moduleset_name = os.path.basename(uri) if moduleset_name.endswith('.modules'): moduleset_name = moduleset_name[:-len('.modules')] # load up list of repositories repositories = {} default_repo = None for node in _child_elements_matching( document.documentElement, ['repository', 'cvsroot', 'svnroot', 'arch-archive']): name = node.getAttribute('name') if node.getAttribute('default') == 'yes': default_repo = name if node.nodeName == 'repository': repo_type = node.getAttribute('type') repo_class = get_repo_type(repo_type) kws = {} for attr in repo_class.init_xml_attrs: if node.hasAttribute(attr): kws[attr.replace('-', '_')] = node.getAttribute(attr) if name in repositories: logging.warning(_('Duplicate repository:') + ' ' + name) repositories[name] = repo_class(config, name, **kws) repositories[name].moduleset_uri = uri mirrors = {} for mirror in _child_elements_matching(node, ['mirror']): mirror_type = mirror.getAttribute('type') mirror_class = get_repo_type(mirror_type) kws = {} for attr in mirror_class.init_xml_attrs: if mirror.hasAttribute(attr):
moduleset_name = os.path.basename(uri) if moduleset_name.endswith('.modules'): moduleset_name = moduleset_name[:-len('.modules')] # load up list of repositories repositories = {} default_repo = None for node in _child_elements_matching( document.documentElement, ['repository', 'cvsroot', 'svnroot', 'arch-archive']): name = node.getAttribute('name') if node.getAttribute('default') == 'yes': default_repo = name if node.nodeName == 'repository': repo_type = node.getAttribute('type') repo_class = get_repo_type(repo_type) kws = {} for attr in repo_class.init_xml_attrs: if node.hasAttribute(attr): kws[attr.replace('-', '_')] = node.getAttribute(attr) if name in repositories: logging.warning(_('Duplicate repository:') + ' '+ name) repositories[name] = repo_class(config, name, **kws) repositories[name].moduleset_uri = uri mirrors = {} for mirror in _child_elements_matching(node, ['mirror']): mirror_type = mirror.getAttribute('type') mirror_class = get_repo_type(mirror_type) kws = {} for attr in mirror_class.init_xml_attrs: if mirror.hasAttribute(attr):
assert document.documentElement.nodeName == 'moduleset' moduleset = ModuleSet() # load up list of repositories repositories = {} default_repo = None for node in _child_elements_matching( document.documentElement, ['repository', 'cvsroot', 'svnroot', 'arch-archive']): name = node.getAttribute('name') if node.getAttribute('default') == 'yes': default_repo = name if node.nodeName == 'repository': repo_type = node.getAttribute('type') repo = get_repo_type(repo_type) kws = {} for attr in repo.init_xml_attrs: if node.hasAttribute(attr): kws[attr.replace('-', '_')] = node.getAttribute(attr) repo_class = get_repo_type(repo_type) repositories[name] = repo_class(config, name, **kws) if node.nodeName == 'cvsroot': cvsroot = node.getAttribute('root') if node.hasAttribute('password'): password = node.getAttribute('password') else: password = None repo_type = get_repo_type('cvs') repositories[name] = repo_type(config, name, cvsroot=cvsroot, password=password)
def _parse_module_set(config, uri): try: filename = httpcache.load(uri, nonetwork=config.nonetwork, age=0) except Exception as e: raise FatalError(_('could not download %s: %s') % (uri, e)) filename = os.path.normpath(filename) try: document = xml.dom.minidom.parse(filename) except IOError as e: raise FatalError(_('failed to parse %s: %s') % (filename, e)) except xml.parsers.expat.ExpatError as e: raise FatalError(_('failed to parse %s: %s') % (uri, e)) assert document.documentElement.nodeName == 'moduleset' for node in _child_elements_matching(document.documentElement, ['redirect']): new_url = node.getAttribute('href') logging.info('moduleset is now located at %s', new_url) return _parse_module_set(config, new_url) _handle_conditions(config, document.documentElement) moduleset = ModuleSet(config = config) moduleset_name = document.documentElement.getAttribute('name') if not moduleset_name: moduleset_name = os.path.basename(uri) if moduleset_name.endswith('.modules'): moduleset_name = moduleset_name[:-len('.modules')] # load up list of repositories repositories = {} default_repo = None for node in _child_elements_matching( document.documentElement, ['repository', 'cvsroot', 'svnroot', 'arch-archive']): name = node.getAttribute('name') if node.getAttribute('default') == 'yes': default_repo = name if node.nodeName == 'repository': repo_type = node.getAttribute('type') repo_class = get_repo_type(repo_type) kws = {} for attr in repo_class.init_xml_attrs: if node.hasAttribute(attr): kws[attr.replace('-', '_')] = node.getAttribute(attr) if name in repositories: logging.warning(_('Duplicate repository:') + ' '+ name) repositories[name] = repo_class(config, name, **kws) repositories[name].moduleset_uri = uri mirrors = {} for mirror in _child_elements_matching(node, ['mirror']): mirror_type = mirror.getAttribute('type') mirror_class = get_repo_type(mirror_type) kws = {} for attr in mirror_class.init_xml_attrs: if mirror.hasAttribute(attr): kws[attr.replace('-','_')] = mirror.getAttribute(attr) mirrors[mirror_type] = mirror_class(config, name, **kws) #mirrors[mirror_type].moduleset_uri = uri setattr(repositories[name], "mirrors", mirrors) if node.nodeName == 'cvsroot': cvsroot = node.getAttribute('root') if node.hasAttribute('password'): password = node.getAttribute('password') else: password = None repo_type = get_repo_type('cvs') repositories[name] = repo_type(config, name, cvsroot=cvsroot, password=password) elif node.nodeName == 'svnroot': svnroot = node.getAttribute('href') repo_type = get_repo_type('svn') repositories[name] = repo_type(config, name, href=svnroot) elif node.nodeName == 'arch-archive': archive_uri = node.getAttribute('href') repo_type = get_repo_type('arch') repositories[name] = repo_type(config, name, archive=name, href=archive_uri) # and now module definitions for node in _child_elements(document.documentElement): if node.nodeName == 'include': href = node.getAttribute('href') inc_uri = urlparse.urljoin(uri, href) try: inc_moduleset = _parse_module_set(config, inc_uri) except UndefinedRepositoryError: raise except FatalError as e: if inc_uri[0] == '/': raise e # look up in local modulesets inc_uri = os.path.join(os.path.dirname(__file__), '..', 'modulesets', href) inc_moduleset = _parse_module_set(config, inc_uri) moduleset.modules.update(inc_moduleset.modules) elif node.nodeName in ['repository', 'cvsroot', 'svnroot', 'arch-archive']: pass else: module = modtypes.parse_xml_node(node, config, uri, repositories, default_repo) if moduleset_name: module.tags.append(moduleset_name) module.moduleset_name = moduleset_name moduleset.add(module) # keep default repository around, used when creating automatic modules global _default_repo if default_repo: _default_repo = repositories[default_repo] return moduleset