From: "Zac Medico" <zmedico@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/portage:master commit in: pym/portage/repository/
Date: Mon, 12 Sep 2011 21:27:29 +0000 (UTC) [thread overview]
Message-ID: <53860ffa675b0cf1930589ff9fa15b5ffaa2cf75.zmedico@gentoo> (raw)
commit: 53860ffa675b0cf1930589ff9fa15b5ffaa2cf75
Author: Brian Harring <ferringb <AT> gmail <DOT> com>
AuthorDate: Wed Aug 31 23:42:34 2011 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Sep 12 21:23:09 2011 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=53860ffa
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/config.py
index a12bd7b..020297c 100644
--- a/pym/portage/repository/config.py
+++ b/pym/portage/repository/config.py
@@ -179,107 +179,101 @@ class RepoConfig(object):
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 = SafeConfigParser()
- try:
- parser.read(paths)
- except ParsingError as e:
- writemsg(_("!!! Error while reading repo config file: %s\n") % e, noiselevel=-1)
- prepos['DEFAULT'] = RepoConfig("DEFAULT", parser.defaults())
- for sname in parser.sections():
- optdict = {}
- for oname in parser.options(sname):
- optdict[oname] = parser.get(sname, oname)
-
- repo = 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=-1)
- continue
- if repo.name in prepos:
- old_location = prepos[repo.name].location
- if old_location is not None and repo.location is not None and old_location != repo.location:
- ignored_map.setdefault(repo.name, []).append(old_location)
- ignored_location_map[old_location] = repo.name
- prepos[repo.name].update(repo)
- else:
- prepos[repo.name] = repo
-
- def add_overlays(portdir, portdir_overlay, prepos, ignored_map, ignored_location_map):
- """Add overlays in PORTDIR_OVERLAY as repositories"""
- overlays = []
- if portdir:
- portdir = normalize_path(portdir)
- overlays.append(portdir)
- port_ov = [normalize_path(i) for i in shlex_split(portdir_overlay)]
- overlays.extend(port_ov)
- default_repo_opts = {}
- if prepos['DEFAULT'].aliases is not None:
- default_repo_opts['aliases'] = \
- ' '.join(prepos['DEFAULT'].aliases)
- if prepos['DEFAULT'].eclass_overrides is not None:
- default_repo_opts['eclass-overrides'] = \
- ' '.join(prepos['DEFAULT'].eclass_overrides)
- if prepos['DEFAULT'].masters is not None:
- default_repo_opts['masters'] = \
- ' '.join(prepos['DEFAULT'].masters)
- if overlays:
- #overlay priority is negative because we want them to be looked before any other repo
- base_priority = 0
- for ov in overlays:
- if os.path.isdir(ov):
- repo_opts = default_repo_opts.copy()
- repo_opts['location'] = ov
- repo = RepoConfig(None, repo_opts)
- repo_conf_opts = prepos.get(repo.name)
- if repo_conf_opts is not None:
- if repo_conf_opts.aliases is not None:
- repo_opts['aliases'] = \
- ' '.join(repo_conf_opts.aliases)
- if repo_conf_opts.eclass_overrides is not None:
- repo_opts['eclass-overrides'] = \
- ' '.join(repo_conf_opts.eclass_overrides)
- if repo_conf_opts.masters is not None:
- repo_opts['masters'] = \
- ' '.join(repo_conf_opts.masters)
- repo = RepoConfig(repo.name, repo_opts)
- if repo.name in prepos:
- old_location = prepos[repo.name].location
- if old_location is not None and old_location != repo.location:
- ignored_map.setdefault(repo.name, []).append(old_location)
- ignored_location_map[old_location] = repo.name
- if old_location == portdir:
- portdir = repo.user_location
- prepos[repo.name].update(repo)
- repo = prepos[repo.name]
- else:
- prepos[repo.name] = repo
-
- if ov == portdir and portdir not in port_ov:
- repo.priority = -1000
- else:
- repo.priority = base_priority
- base_priority += 1
+ @staticmethod
+ def _add_overlays(portdir, portdir_overlay, prepos, ignored_map, ignored_location_map):
+ """Add overlays in PORTDIR_OVERLAY as repositories"""
+ overlays = []
+ if portdir:
+ portdir = normalize_path(portdir)
+ overlays.append(portdir)
+ port_ov = [normalize_path(i) for i in shlex_split(portdir_overlay)]
+ overlays.extend(port_ov)
+ default_repo_opts = {}
+ if prepos['DEFAULT'].aliases is not None:
+ default_repo_opts['aliases'] = \
+ ' '.join(prepos['DEFAULT'].aliases)
+ if prepos['DEFAULT'].eclass_overrides is not None:
+ default_repo_opts['eclass-overrides'] = \
+ ' '.join(prepos['DEFAULT'].eclass_overrides)
+ if prepos['DEFAULT'].masters is not None:
+ default_repo_opts['masters'] = \
+ ' '.join(prepos['DEFAULT'].masters)
+ if overlays:
+ #overlay priority is negative because we want them to be looked before any other repo
+ base_priority = 0
+ for ov in overlays:
+ if os.path.isdir(ov):
+ repo_opts = default_repo_opts.copy()
+ repo_opts['location'] = ov
+ repo = RepoConfig(None, repo_opts)
+ repo_conf_opts = prepos.get(repo.name)
+ if repo_conf_opts is not None:
+ if repo_conf_opts.aliases is not None:
+ repo_opts['aliases'] = \
+ ' '.join(repo_conf_opts.aliases)
+ if repo_conf_opts.eclass_overrides is not None:
+ repo_opts['eclass-overrides'] = \
+ ' '.join(repo_conf_opts.eclass_overrides)
+ if repo_conf_opts.masters is not None:
+ repo_opts['masters'] = \
+ ' '.join(repo_conf_opts.masters)
+ repo = RepoConfig(repo.name, repo_opts)
+ if repo.name in prepos:
+ old_location = prepos[repo.name].location
+ if old_location is not None and old_location != repo.location:
+ ignored_map.setdefault(repo.name, []).append(old_location)
+ ignored_location_map[old_location] = repo.name
+ if old_location == portdir:
+ portdir = repo.user_location
+ prepos[repo.name].update(repo)
+ repo = prepos[repo.name]
+ else:
+ prepos[repo.name] = repo
+ if ov == portdir and portdir not in port_ov:
+ repo.priority = -1000
else:
- writemsg(_("!!! Invalid PORTDIR_OVERLAY"
- " (not a dir): '%s'\n") % ov, noiselevel=-1)
+ repo.priority = base_priority
+ base_priority += 1
+
+ else:
+ writemsg(_("!!! Invalid PORTDIR_OVERLAY"
+ " (not a dir): '%s'\n") % ov, noiselevel=-1)
- return portdir
+ return portdir
- def repo_priority(r):
- """
- Key funtion for comparing repositories by priority.
- None is equal priority zero.
- """
- x = 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 = SafeConfigParser()
+ try:
+ parser.read(paths)
+ except ParsingError as e:
+ writemsg(_("!!! Error while reading repo config file: %s\n") % e, noiselevel=-1)
+ prepos['DEFAULT'] = RepoConfig("DEFAULT", parser.defaults())
+ for sname in parser.sections():
+ optdict = {}
+ for oname in parser.options(sname):
+ optdict[oname] = parser.get(sname, oname)
+
+ repo = 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=-1)
+ continue
+
+ if repo.name in prepos:
+ old_location = prepos[repo.name].location
+ if old_location is not None and repo.location is not None and old_location != repo.location:
+ ignored_map.setdefault(repo.name, []).append(old_location)
+ ignored_location_map[old_location] = repo.name
+ prepos[repo.name].update(repo)
+ else:
+ prepos[repo.name] = repo
+
+ def __init__(self, paths, settings):
+ """Load config from files in paths"""
prepos = {}
location_map = {}
@@ -289,10 +283,12 @@ class RepoConfigLoader(object):
portdir = settings.get('PORTDIR', '')
portdir_overlay = 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 = add_overlays(portdir, portdir_overlay, prepos,
+ portdir = self._add_overlays(portdir, portdir_overlay, prepos,
ignored_map, ignored_location_map)
if portdir and portdir.strip():
portdir = os.path.realpath(portdir)
@@ -352,9 +348,11 @@ class RepoConfigLoader(object):
# filter duplicates from aliases, by only including
# items where repo.name == key
- prepos_order = [repo.name for key, repo in prepos.items() \
+
+ prepos_order = sorted(prepos.items(), key=lambda r:r[1].priority or 0)
+
+ prepos_order = [repo.name for (key, repo) in prepos_order
if repo.name == key and repo.location is not None]
- prepos_order.sort(key=repo_priority)
if portdir in location_map:
portdir_repo = prepos[location_map[portdir]]
next reply other threads:[~2011-09-12 21:27 UTC|newest]
Thread overview: 105+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-12 21:27 Zac Medico [this message]
-- strict thread matches above, loose matches on Subject: below --
2018-07-16 5:55 [gentoo-commits] proj/portage:master commit in: pym/portage/repository/ Zac Medico
2018-02-01 20:51 Michał Górny
2017-08-28 6:20 Zac Medico
2015-12-13 21:56 Zac Medico
2015-12-09 3:07 Zac Medico
2015-11-23 21:10 Arfrever Frehtes Taifersar Arahesis
2015-11-23 20:49 Arfrever Frehtes Taifersar Arahesis
2015-11-23 20:41 Arfrever Frehtes Taifersar Arahesis
2015-09-24 19:54 Brian Dolbec
2015-07-14 21:31 Brian Dolbec
2015-05-21 4:09 Mike Frysinger
2015-02-09 21:36 Brian Dolbec
2015-02-03 20:57 Brian Dolbec
2015-02-03 20:57 Brian Dolbec
2015-02-02 18:50 Brian Dolbec
2015-02-02 18:35 Brian Dolbec
2014-12-04 20:04 [gentoo-commits] proj/portage:plugin-sync " Brian Dolbec
2014-12-04 20:16 ` [gentoo-commits] proj/portage:master " Brian Dolbec
2014-02-09 7:27 Arfrever Frehtes Taifersar Arahesis
2013-09-23 20:59 Zac Medico
2013-09-23 20:44 Zac Medico
2013-09-23 20:43 Zac Medico
2013-09-15 14:10 Zac Medico
2013-09-15 10:58 Zac Medico
2013-09-13 9:14 Arfrever Frehtes Taifersar Arahesis
2013-08-22 16:22 Zac Medico
2013-08-08 16:04 Zac Medico
2013-07-29 17:23 Zac Medico
2013-07-25 21:41 Zac Medico
2013-07-25 19:55 Zac Medico
2013-07-25 18:46 Arfrever Frehtes Taifersar Arahesis
2013-07-25 18:25 Arfrever Frehtes Taifersar Arahesis
2013-07-24 20:42 Zac Medico
2013-07-23 21:53 Arfrever Frehtes Taifersar Arahesis
2013-07-23 5:56 Zac Medico
2013-07-23 4:45 Zac Medico
2013-07-23 4:42 Zac Medico
2013-07-14 7:57 Arfrever Frehtes Taifersar Arahesis
2013-07-14 7:49 Arfrever Frehtes Taifersar Arahesis
2013-06-28 1:54 Zac Medico
2013-06-26 3:32 Arfrever Frehtes Taifersar Arahesis
2013-06-24 23:42 Arfrever Frehtes Taifersar Arahesis
2013-06-24 22:03 Arfrever Frehtes Taifersar Arahesis
2013-06-24 21:47 Arfrever Frehtes Taifersar Arahesis
2013-06-24 19:45 Arfrever Frehtes Taifersar Arahesis
2013-06-24 19:40 Arfrever Frehtes Taifersar Arahesis
2013-06-24 19:24 Zac Medico
2013-06-24 18:57 Zac Medico
2013-06-24 17:04 Arfrever Frehtes Taifersar Arahesis
2013-06-19 19:22 Zac Medico
2013-06-19 19:11 Zac Medico
2013-06-19 18:02 Zac Medico
2013-06-19 5:55 Zac Medico
2013-06-19 4:49 Zac Medico
2013-06-19 3:58 Zac Medico
2013-06-19 3:42 Zac Medico
2013-06-19 2:19 Zac Medico
2013-06-19 1:58 Zac Medico
2013-06-18 21:20 Zac Medico
2013-06-18 17:47 Zac Medico
2013-06-18 16:14 Zac Medico
2013-03-29 21:43 Zac Medico
2013-03-20 18:38 Zac Medico
2013-03-10 8:31 Zac Medico
2013-03-10 8:22 Zac Medico
2013-03-10 8:07 Zac Medico
2013-01-24 20:01 Zac Medico
2012-06-06 0:11 Zac Medico
2012-05-11 23:28 Zac Medico
2012-02-03 22:41 Zac Medico
2012-01-08 3:12 Arfrever Frehtes Taifersar Arahesis
2012-01-08 3:12 Arfrever Frehtes Taifersar Arahesis
2011-12-28 8:16 Zac Medico
2011-12-25 19:43 Arfrever Frehtes Taifersar Arahesis
2011-12-18 21:57 Arfrever Frehtes Taifersar Arahesis
2011-12-18 21:26 Arfrever Frehtes Taifersar Arahesis
2011-12-18 21:14 Arfrever Frehtes Taifersar Arahesis
2011-12-18 3:05 Arfrever Frehtes Taifersar Arahesis
2011-12-13 22:19 Zac Medico
2011-10-29 6:15 Zac Medico
2011-10-28 7:17 Zac Medico
2011-10-28 6:48 Zac Medico
2011-10-28 6:20 Zac Medico
2011-10-28 5:38 Zac Medico
2011-10-28 5:30 Zac Medico
2011-10-28 5:15 Zac Medico
2011-10-27 19:41 Zac Medico
2011-10-27 5:55 Zac Medico
2011-10-27 5:32 Zac Medico
2011-10-27 5:09 Zac Medico
2011-10-25 21:44 Zac Medico
2011-10-25 21:44 Zac Medico
2011-10-16 6:18 Zac Medico
2011-10-09 19:10 Zac Medico
2011-10-09 19:10 Zac Medico
2011-10-08 23:23 Zac Medico
2011-10-08 21:41 Arfrever Frehtes Taifersar Arahesis
2011-10-05 1:11 Arfrever Frehtes Taifersar Arahesis
2011-10-04 15:33 Zac Medico
2011-10-03 20:14 Zac Medico
2011-10-03 18:33 Zac Medico
2011-09-30 22:05 Zac Medico
2011-09-17 18:08 Zac Medico
2011-09-12 21:27 Zac Medico
2011-07-08 16:36 Zac Medico
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53860ffa675b0cf1930589ff9fa15b5ffaa2cf75.zmedico@gentoo \
--to=zmedico@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox