From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1R3E2Y-0003An-So for garchives@archives.gentoo.org; Mon, 12 Sep 2011 21:27:43 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 89E5821C0D4; Mon, 12 Sep 2011 21:27:31 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 471D421C0D4 for ; Mon, 12 Sep 2011 21:27:31 +0000 (UTC) Received: from pelican.gentoo.org (unknown [66.219.59.40]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id AD8EC1B403A for ; Mon, 12 Sep 2011 21:27:30 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by pelican.gentoo.org (Postfix) with ESMTP id A560F80042 for ; Mon, 12 Sep 2011 21:27:29 +0000 (UTC) From: "Zac Medico" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Zac Medico" Message-ID: <53860ffa675b0cf1930589ff9fa15b5ffaa2cf75.zmedico@gentoo> Subject: [gentoo-commits] proj/portage:master commit in: pym/portage/repository/ X-VCS-Repository: proj/portage X-VCS-Files: pym/portage/repository/config.py X-VCS-Directories: pym/portage/repository/ X-VCS-Committer: zmedico X-VCS-Committer-Name: Zac Medico X-VCS-Revision: 53860ffa675b0cf1930589ff9fa15b5ffaa2cf75 Date: Mon, 12 Sep 2011 21:27:29 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: X-Archives-Hash: a420b4ebf9a4290258c126fc5957d467 commit: 53860ffa675b0cf1930589ff9fa15b5ffaa2cf75 Author: Brian Harring gmail com> AuthorDate: Wed Aug 31 23:42:34 2011 +0000 Commit: Zac Medico gentoo org> CommitDate: Mon Sep 12 21:23:09 2011 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/portage.git;a= =3Dcommit;h=3D53860ffa refactoring; unhide part of the parsing functionality --- pym/portage/repository/config.py | 200 +++++++++++++++++++-------------= ------ 1 files changed, 99 insertions(+), 101 deletions(-) diff --git a/pym/portage/repository/config.py b/pym/portage/repository/co= nfig.py index a12bd7b..020297c 100644 --- a/pym/portage/repository/config.py +++ b/pym/portage/repository/config.py @@ -179,107 +179,101 @@ class RepoConfig(object): =20 class RepoConfigLoader(object): """Loads and store config of several repositories, loaded from PORTDIR_= OVERLAY or repos.conf""" - def __init__(self, paths, settings): - """Load config from files in paths""" - def parse(paths, prepos, ignored_map, ignored_location_map): - """Parse files in paths to load config""" - parser =3D SafeConfigParser() - try: - parser.read(paths) - except ParsingError as e: - writemsg(_("!!! Error while reading repo config file: %s\n") % e, no= iselevel=3D-1) - prepos['DEFAULT'] =3D RepoConfig("DEFAULT", parser.defaults()) - for sname in parser.sections(): - optdict =3D {} - for oname in parser.options(sname): - optdict[oname] =3D parser.get(sname, oname) - - repo =3D RepoConfig(sname, optdict) - if repo.location and not os.path.exists(repo.location): - writemsg(_("!!! Invalid repos.conf entry '%s'" - " (not a dir): '%s'\n") % (sname, repo.location), noiselevel=3D-1) - continue =20 - if repo.name in prepos: - old_location =3D prepos[repo.name].location - if old_location is not None and repo.location is not None and old_l= ocation !=3D repo.location: - ignored_map.setdefault(repo.name, []).append(old_location) - ignored_location_map[old_location] =3D repo.name - prepos[repo.name].update(repo) - else: - prepos[repo.name] =3D repo - - def add_overlays(portdir, portdir_overlay, prepos, ignored_map, ignore= d_location_map): - """Add overlays in PORTDIR_OVERLAY as repositories""" - overlays =3D [] - if portdir: - portdir =3D normalize_path(portdir) - overlays.append(portdir) - port_ov =3D [normalize_path(i) for i in shlex_split(portdir_overlay)] - overlays.extend(port_ov) - default_repo_opts =3D {} - if prepos['DEFAULT'].aliases is not None: - default_repo_opts['aliases'] =3D \ - ' '.join(prepos['DEFAULT'].aliases) - if prepos['DEFAULT'].eclass_overrides is not None: - default_repo_opts['eclass-overrides'] =3D \ - ' '.join(prepos['DEFAULT'].eclass_overrides) - if prepos['DEFAULT'].masters is not None: - default_repo_opts['masters'] =3D \ - ' '.join(prepos['DEFAULT'].masters) - if overlays: - #overlay priority is negative because we want them to be looked befo= re any other repo - base_priority =3D 0 - for ov in overlays: - if os.path.isdir(ov): - repo_opts =3D default_repo_opts.copy() - repo_opts['location'] =3D ov - repo =3D RepoConfig(None, repo_opts) - repo_conf_opts =3D prepos.get(repo.name) - if repo_conf_opts is not None: - if repo_conf_opts.aliases is not None: - repo_opts['aliases'] =3D \ - ' '.join(repo_conf_opts.aliases) - if repo_conf_opts.eclass_overrides is not None: - repo_opts['eclass-overrides'] =3D \ - ' '.join(repo_conf_opts.eclass_overrides) - if repo_conf_opts.masters is not None: - repo_opts['masters'] =3D \ - ' '.join(repo_conf_opts.masters) - repo =3D RepoConfig(repo.name, repo_opts) - if repo.name in prepos: - old_location =3D prepos[repo.name].location - if old_location is not None and old_location !=3D repo.location: - ignored_map.setdefault(repo.name, []).append(old_location) - ignored_location_map[old_location] =3D repo.name - if old_location =3D=3D portdir: - portdir =3D repo.user_location - prepos[repo.name].update(repo) - repo =3D prepos[repo.name] - else: - prepos[repo.name] =3D repo - - if ov =3D=3D portdir and portdir not in port_ov: - repo.priority =3D -1000 - else: - repo.priority =3D base_priority - base_priority +=3D 1 + @staticmethod + def _add_overlays(portdir, portdir_overlay, prepos, ignored_map, ignore= d_location_map): + """Add overlays in PORTDIR_OVERLAY as repositories""" + overlays =3D [] + if portdir: + portdir =3D normalize_path(portdir) + overlays.append(portdir) + port_ov =3D [normalize_path(i) for i in shlex_split(portdir_overlay)] + overlays.extend(port_ov) + default_repo_opts =3D {} + if prepos['DEFAULT'].aliases is not None: + default_repo_opts['aliases'] =3D \ + ' '.join(prepos['DEFAULT'].aliases) + if prepos['DEFAULT'].eclass_overrides is not None: + default_repo_opts['eclass-overrides'] =3D \ + ' '.join(prepos['DEFAULT'].eclass_overrides) + if prepos['DEFAULT'].masters is not None: + default_repo_opts['masters'] =3D \ + ' '.join(prepos['DEFAULT'].masters) + if overlays: + #overlay priority is negative because we want them to be looked befor= e any other repo + base_priority =3D 0 + for ov in overlays: + if os.path.isdir(ov): + repo_opts =3D default_repo_opts.copy() + repo_opts['location'] =3D ov + repo =3D RepoConfig(None, repo_opts) + repo_conf_opts =3D prepos.get(repo.name) + if repo_conf_opts is not None: + if repo_conf_opts.aliases is not None: + repo_opts['aliases'] =3D \ + ' '.join(repo_conf_opts.aliases) + if repo_conf_opts.eclass_overrides is not None: + repo_opts['eclass-overrides'] =3D \ + ' '.join(repo_conf_opts.eclass_overrides) + if repo_conf_opts.masters is not None: + repo_opts['masters'] =3D \ + ' '.join(repo_conf_opts.masters) + repo =3D RepoConfig(repo.name, repo_opts) + if repo.name in prepos: + old_location =3D prepos[repo.name].location + if old_location is not None and old_location !=3D repo.location: + ignored_map.setdefault(repo.name, []).append(old_location) + ignored_location_map[old_location] =3D repo.name + if old_location =3D=3D portdir: + portdir =3D repo.user_location + prepos[repo.name].update(repo) + repo =3D prepos[repo.name] + else: + prepos[repo.name] =3D repo =20 + if ov =3D=3D portdir and portdir not in port_ov: + repo.priority =3D -1000 else: - writemsg(_("!!! Invalid PORTDIR_OVERLAY" - " (not a dir): '%s'\n") % ov, noiselevel=3D-1) + repo.priority =3D base_priority + base_priority +=3D 1 + + else: + writemsg(_("!!! Invalid PORTDIR_OVERLAY" + " (not a dir): '%s'\n") % ov, noiselevel=3D-1) =20 - return portdir + return portdir =20 - def repo_priority(r): - """ - Key funtion for comparing repositories by priority. - None is equal priority zero. - """ - x =3D prepos[r].priority - if x is None: - return 0 - return x + @staticmethod + def _parse(paths, prepos, ignored_map, ignored_location_map): + """Parse files in paths to load config""" + parser =3D SafeConfigParser() + try: + parser.read(paths) + except ParsingError as e: + writemsg(_("!!! Error while reading repo config file: %s\n") % e, noi= selevel=3D-1) + prepos['DEFAULT'] =3D RepoConfig("DEFAULT", parser.defaults()) + for sname in parser.sections(): + optdict =3D {} + for oname in parser.options(sname): + optdict[oname] =3D parser.get(sname, oname) + + repo =3D RepoConfig(sname, optdict) + if repo.location and not os.path.exists(repo.location): + writemsg(_("!!! Invalid repos.conf entry '%s'" + " (not a dir): '%s'\n") % (sname, repo.location), noiselevel=3D-1) + continue + + if repo.name in prepos: + old_location =3D prepos[repo.name].location + if old_location is not None and repo.location is not None and old_lo= cation !=3D repo.location: + ignored_map.setdefault(repo.name, []).append(old_location) + ignored_location_map[old_location] =3D repo.name + prepos[repo.name].update(repo) + else: + prepos[repo.name] =3D repo + + def __init__(self, paths, settings): + """Load config from files in paths""" =20 prepos =3D {} location_map =3D {} @@ -289,10 +283,12 @@ class RepoConfigLoader(object): =20 portdir =3D settings.get('PORTDIR', '') portdir_overlay =3D settings.get('PORTDIR_OVERLAY', '') - parse(paths, prepos, ignored_map, ignored_location_map) + + self._parse(paths, prepos, ignored_map, ignored_location_map) + # If PORTDIR_OVERLAY contains a repo with the same repo_name as # PORTDIR, then PORTDIR is overridden. - portdir =3D add_overlays(portdir, portdir_overlay, prepos, + portdir =3D self._add_overlays(portdir, portdir_overlay, prepos, ignored_map, ignored_location_map) if portdir and portdir.strip(): portdir =3D os.path.realpath(portdir) @@ -352,9 +348,11 @@ class RepoConfigLoader(object): =20 # filter duplicates from aliases, by only including # items where repo.name =3D=3D key - prepos_order =3D [repo.name for key, repo in prepos.items() \ + + prepos_order =3D sorted(prepos.items(), key=3Dlambda r:r[1].priority o= r 0) + + prepos_order =3D [repo.name for (key, repo) in prepos_order if repo.name =3D=3D key and repo.location is not None] - prepos_order.sort(key=3Drepo_priority) =20 if portdir in location_map: portdir_repo =3D prepos[location_map[portdir]]