Test Eg. repoquery -gl base core gnome-desktop xfce-desktop | \ perl -pe 's//install-n /' | \ yum shell --- cli.py | 18 ++++++++++++++++-- docs/yum.8 | 5 +++++ yum/__init__.py | 2 +- yumcommands.py | 4 ++-- 4 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/cli.py b/cli.py index bbe8e55..8d8bc75 100755 --- a/cli.py +++ b/cli.py @@ -780,7 +780,7 @@ class YumBaseCli(yum.YumBase, output.YumOutput): return ret - def installPkgs(self, userlist): + def installPkgs(self, userlist, basecmd='install'): """Attempt to take the user specified list of packages or wildcards and install them, or if they are installed, update them to a newer version. If a complete version number is @@ -815,7 +815,21 @@ class YumBaseCli(yum.YumBase, output.YumOutput): continue # it was something on disk and it ended in rpm # no matter what we don't go looking at repos try: - txmbrs = self.install(pattern=arg) + if False: pass + elif basecmd == 'install-n': + txmbrs = self.install(name=arg) + elif basecmd == 'install-na': + n,a = arg.split('.') + txmbrs = self.install(name=n, arch=a) + elif basecmd == 'install-nevra': + nevr,a = arg.rsplit('.', 2) + n,ev,r = nevr.rsplit('-', 3) + e,v = ev.split(':', 2) + txmbrs = self.install(name=n, + epoch=e, version=v, release=r, arch=a) + else: + assert basecmd == 'install', basecmd + txmbrs = self.install(pattern=arg) except yum.Errors.InstallError: self.verbose_logger.log(yum.logginglevels.INFO_2, _('No package %s%s%s available.'), diff --git a/docs/yum.8 b/docs/yum.8 index 499da41..f36d382 100644 --- a/docs/yum.8 +++ b/docs/yum.8 @@ -97,6 +97,11 @@ like localinstall\&. If the name doesn't match a package, then package "provides" are searched (Eg. "_sqlitecache.so()(64bit)") as are filelists (Eg. "/usr/bin/yum"). Also note that for filelists, wildcards will match multiple packages\&. + +Because install does a lot of work to make it as easy as possible to use, there +are also a few specific install commands "\fBinstall-n\fP", "\fBinstall-na\fP" +and "\fBinstall-nevra\fP". These only work on package names, and do not process +wildcards etc. .IP .IP "\fBupdate\fP" If run without any packages, update will update every currently diff --git a/yum/__init__.py b/yum/__init__.py index b07bbb2..2c9a3da 100644 --- a/yum/__init__.py +++ b/yum/__init__.py @@ -4088,7 +4088,7 @@ class YumBase(depsolve.Depsolve): be run if it will update the given package to the given version. For example, if the package foo-1-2 is installed,:: - updatePkgs(["foo-1-2], update_to=False) + updatePkgs(["foo-1-2"], update_to=False) will work identically to:: updatePkgs(["foo"]) diff --git a/yumcommands.py b/yumcommands.py index 172c40d..a3e50d2 100644 --- a/yumcommands.py +++ b/yumcommands.py @@ -290,7 +290,7 @@ class InstallCommand(YumCommand): :return: a list containing the names of this command """ - return ['install'] + return ['install', 'install-n', 'install-na', 'install-nevra'] def getUsage(self): """Return a usage string for this command. @@ -337,7 +337,7 @@ class InstallCommand(YumCommand): """ self.doneCommand(base, _("Setting up Install Process")) try: - return base.installPkgs(extcmds) + return base.installPkgs(extcmds, basecmd=basecmd) except yum.Errors.YumBaseError, e: return 1, [str(e)] -- 1.7.6.4 _______________________________________________ Yum-devel mailing list Yum-devel@lists.baseurl.org http://lists.baseurl.org/mailman/listinfo/yum-devel