diff options
author | Tim Harder <radhermit@gmail.com> | 2017-12-20 17:01:26 -0500 |
---|---|---|
committer | Tim Harder <radhermit@gmail.com> | 2017-12-20 17:01:26 -0500 |
commit | b7265cdade1ce70ae93baea7e869700c9c5104cb (patch) | |
tree | 2b44590fe4fda15dd1d0586cba1ee24136bc754a | |
parent | ebuild.domain: move remaining repo group settings to JIT-ed attrs (diff) | |
download | pkgcore-b7265cdade1ce70ae93baea7e869700c9c5104cb.tar.gz pkgcore-b7265cdade1ce70ae93baea7e869700c9c5104cb.tar.bz2 pkgcore-b7265cdade1ce70ae93baea7e869700c9c5104cb.zip |
util.commandline: StoreTarget: add support for ebuilds in external repos
-rw-r--r-- | src/pkgcore/util/commandline.py | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/pkgcore/util/commandline.py b/src/pkgcore/util/commandline.py index c6ca8508..0b58d779 100644 --- a/src/pkgcore/util/commandline.py +++ b/src/pkgcore/util/commandline.py @@ -26,6 +26,7 @@ import sys from snakeoil import compatibility, modules from snakeoil.cli import arghparse, tool from snakeoil.demandload import demandload +from snakeoil.osutils import pjoin from pkgcore import __title__ from pkgcore.config import load_config, errors as config_errors @@ -71,6 +72,7 @@ class StoreTarget(argparse._AppendAction): def __init__(self, *args, **kwargs): self.allow_sets = kwargs.pop('allow_sets', False) self.allow_ebuild_paths = kwargs.pop('allow_ebuild_paths', False) + self.allow_external_repos = kwargs.pop('allow_external_repos', False) self.separator = kwargs.pop('separator', None) super(StoreTarget, self).__init__(*args, **kwargs) @@ -104,6 +106,15 @@ class StoreTarget(argparse._AppendAction): raise argparse.ArgumentError(self, "nonexistent ebuild: %r" % token) elif not os.path.isfile(token): raise argparse.ArgumentError(self, "invalid ebuild: %r" % token) + if self.allow_external_repos and token not in repo: + repo_root_dir = os.path.abspath( + pjoin(token, os.pardir, os.pardir, os.pardir)) + try: + repo = namespace.domain.add_repo( + repo_root_dir, config=namespace.config) + except TypeError as e: + raise argparse.ArgumentError( + self, "ebuild not in valid repo: %r" % token) try: restriction = repo.path_restrict(token) except ValueError as e: |