summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2009-04-07 01:27:54 +0000
committerZac Medico <zmedico@gentoo.org>2009-04-07 01:27:54 +0000
commitf16aee82cefa95e9903fa46f448d30f6d4350f64 (patch)
treefd75003af07a254c78e6c1d803a32b3061e5a602 /bin
parent21b7ca34a578c223e481817b6567332a5043153c (diff)
downloadportage-f16aee82cefa95e9903fa46f448d30f6d4350f64.tar.gz
portage-f16aee82cefa95e9903fa46f448d30f6d4350f64.tar.bz2
portage-f16aee82cefa95e9903fa46f448d30f6d4350f64.zip
Add support to repoman for using layout.conf to control which repositories
are used to satisfy dependencies. Thanks to Alistair Bush <ali_bush@g.o> for the initial patch. See the "QA Overlay Layout support" thread on the gentoo-dev mailing list for more information: http://archives.gentoo.org/gentoo-dev/msg_33c61550b4ed2b7b25dd5a4110e1ec81.xml svn path=/main/trunk/; revision=13295
Diffstat (limited to 'bin')
-rwxr-xr-xbin/repoman59
1 files changed, 33 insertions, 26 deletions
diff --git a/bin/repoman b/bin/repoman
index 27d65e9f9..86573bdb9 100755
--- a/bin/repoman
+++ b/bin/repoman
@@ -479,31 +479,35 @@ if options.mode == 'commit' and not options.pretend and not vcs:
logging.info("Not in a version controlled repository; enabling pretend mode.")
options.pretend = True
-os.environ["PORTDIR"] = portdir
-if portdir_overlay != portdir:
- os.environ["PORTDIR_OVERLAY"] = portdir_overlay
-else:
- os.environ["PORTDIR_OVERLAY"] = ""
+# Ensure that PORTDIR_OVERLAY contains the repository corresponding to $PWD.
+repoman_settings = portage.config(local_config=False)
+repoman_settings['PORTDIR_OVERLAY'] = "%s %s" % \
+ (repoman_settings.get('PORTDIR_OVERLAY', ''), portdir_overlay)
+repoman_settings.backup_changes('PORTDIR_OVERLAY')
+
+root = '/'
+trees = {
+ root : {'porttree' : portage.portagetree(root, settings=repoman_settings)}
+}
+portdb = trees[root]['porttree'].dbapi
+
+# Constrain dependency resolution to the master(s)
+# that are specified in layout.conf.
+portdir_overlay = os.path.realpath(portdir_overlay)
+repo_info = portdb._repo_info[portdir_overlay]
+portdb.porttrees = list(repo_info.eclass_db.porttrees)
+portdir = portdb.porttrees[0]
logging.info('Setting paths:')
-logging.info('PORTDIR = "' + os.environ['PORTDIR'] + '"')
-logging.info('PORTDIR_OVERLAY = "' + os.environ['PORTDIR_OVERLAY']+'"')
+logging.info('PORTDIR = "' + portdir + '"')
+logging.info('PORTDIR_OVERLAY = "%s"' % ' '.join(portdb.porttrees[1:]))
-# Now that PORTDIR_OVERLAY is properly overridden, create the portdb.
-repoman_settings = portage.config(local_config=False,
- config_incrementals=portage.const.INCREMENTALS)
-trees = portage.create_trees()
-trees["/"]["porttree"].settings = repoman_settings
-portdb = trees["/"]["porttree"].dbapi
portdb.mysettings = repoman_settings
-setconfig = load_default_config(repoman_settings, trees["/"])
-root_config = RootConfig(repoman_settings, trees["/"], setconfig)
+root_config = RootConfig(repoman_settings, trees[root], None)
# We really only need to cache the metadata that's necessary for visibility
# filtering. Anything else can be discarded to reduce memory consumption.
portdb._aux_cache_keys.clear()
portdb._aux_cache_keys.update(["EAPI", "KEYWORDS", "SLOT"])
-# dep_zapdeps looks at the vardbapi, but it shouldn't for repoman.
-del trees["/"]["vartree"]
myreporoot = os.path.basename(portdir_overlay)
myreporoot += mydir[len(portdir_overlay):]
@@ -543,24 +547,27 @@ except (IOError, OSError, ParseError), e:
logging.exception("Couldn't read USE flags from use.desc")
sys.exit(1)
-# retrieve a list of current licenses in portage
+# get lists of valid keywords and licenses
+kwlist = set(portage.grabfile(os.path.join(portdir, "profiles", "arch.list")))
liclist = set(portage.listdir(os.path.join(portdir, "licenses")))
+
+if portdir_overlay != portdir:
+ for porttree in portdb.porttrees[1:]:
+ try:
+ liclist.update(os.listdir(os.path.join(porttree, "licenses")))
+ except OSError:
+ pass
+ kwlist.update(portage.grabfile(os.path.join(porttree,
+ "profiles", "arch.list")))
+
if not liclist:
logging.fatal("Couldn't find licenses?")
sys.exit(1)
-if portdir_overlay != portdir:
- liclist.update(portage.listdir(os.path.join(portdir_overlay, "licenses")))
-# retrieve list of offical keywords
-kwlist = set(portage.grabfile(os.path.join(portdir, "profiles", "arch.list")))
if not kwlist:
logging.fatal("Couldn't read KEYWORDS from arch.list")
sys.exit(1)
-if portdir_overlay != portdir:
- kwlist.update(portage.grabfile(
- os.path.join(portdir_overlay, "profiles", "arch.list")))
-
scanlist=[]
if repolevel==2:
#we are inside a category directory