Add a --repo option, allowing cache to be generated for overlays. (trunk r13292)
authorZac Medico <zmedico@gentoo.org>
Thu, 30 Apr 2009 06:58:43 +0000 (06:58 -0000)
committerZac Medico <zmedico@gentoo.org>
Thu, 30 Apr 2009 06:58:43 +0000 (06:58 -0000)
svn path=/main/branches/2.1.6/; revision=13463

bin/egencache
man/egencache.1

index 487901cf085b4911f679dfb3337e75f4f248a8f7..47e4ea2c7b627129ba76f5e4d3cf7d288cef4c7f 100755 (executable)
@@ -34,6 +34,9 @@ def parse_args(args):
        parser.add_option("--update",
                action="store_true",
                help="update metadata/cache/ (generate as necessary)")
+       parser.add_option("--repo",
+               action="store",
+               help="name of repo to operate on (default repo is located at $PORTDIR)")
        parser.add_option("--cache-dir",
                help="location of the metadata cache",
                dest="cache_dir")
@@ -126,7 +129,7 @@ class GenCache(object):
                        max_jobs=max_jobs, max_load=max_load)
                self.returncode = os.EX_OK
                metadbmodule = portdb.mysettings.load_best_module("portdbapi.metadbmodule")
-               self._trg_cache = metadbmodule(portdb.porttree_root,
+               self._trg_cache = metadbmodule(portdb.porttrees[0],
                        "metadata/cache", portage.auxdbkeys[:])
                if rsync:
                        self._trg_cache.raise_stat_collision = True
@@ -259,8 +262,8 @@ def egencache_main(args):
        # completely controlled by commandline arguments.
        env = {}
 
-       # TODO: Implement --repo for choosing a repo.
-       env['PORTDIR_OVERLAY'] = ''
+       if options.repo is None:
+               env['PORTDIR_OVERLAY'] = ''
 
        if options.cache_dir is not None:
                env['PORTAGE_DEPCACHEDIR'] = options.cache_dir
@@ -300,6 +303,15 @@ def egencache_main(args):
        settings.lock()
 
        portdb = portage.portdbapi(settings["PORTDIR"], mysettings=settings)
+       if options.repo is not None:
+               repo_path = portdb.getRepositoryPath(options.repo)
+               if repo_path is None:
+                       parser.error("Unable to locate repository named '%s'" % \
+                               (options.repo,))
+                       return 1
+
+               # Limit ebuilds to the specified repo.
+               portdb.porttrees = [repo_path]
 
        cp_iter = None
        if atoms:
index 67b166f9d7a307be734842f6fe919779f032187a..dbcc44e4bc35f5c18c45cb446e4bc098514adcb7 100644 (file)
@@ -7,9 +7,7 @@ egencache \- generate metadata cache for ebuild repositories
 .SH "DESCRIPTION"
 The egencache program generates metadata cache for ebuild repositories and
 stores it in the \fImetadata/cache/\fR directory within the repository itself,
-for distribution. Currenly, only the repository located at \fBPORTDIR\fR
-(configured in \fBmake.conf(5)\fR) can be updated by this program, but a
-future version will have the ability to select a different repository.
+for distribution.
 .SH ACTIONS
 .TP
 .BR "\-\-update [ATOM] ... "
@@ -40,6 +38,12 @@ Also see the related \fB\-\-load\-average\fR option.
 .BR \-\-load\-average=LOAD
 Specifies that maximum load allowed when spawning multiple jobs.
 .TP
+.BR "\-\-repo=REPO"
+Name of the repo to operate on (default repo is located at \fBPORTDIR\fR).
+The name should correspond the value of a \fBrepo_name\fR entry (see
+\fBportage\fR(5)) from one of the repositories that is configured via the
+\fBPORTDIR\fR or \fBPORTDIR_OVERLAY\fR variables (see \fBmake.conf\fR(5)).
+.TP
 .BR "\-\-rsync"
 When used together with the \fB\-\-update\fR action, this enables a workaround
 for cases in which the content of a cache entry changes and neither the file