[Yum-devel] [PATCH 4/4] Add -pkgname to install etc., so we can test tsInfo.deselect()

Tim Lauridsen tim.lauridsen at googlemail.com
Wed Apr 21 16:09:47 UTC 2010


On Mon, Apr 19, 2010 at 10:00 PM, James Antill <james at and.org> wrote:

> ---
>  docs/yum.8      |    7 ++++++-
>  yum/__init__.py |   38 +++++++++++++++++++++++++++++++++-----
>  2 files changed, 39 insertions(+), 6 deletions(-)
>
> diff --git a/docs/yum.8 b/docs/yum.8
> index 6761f1c..1089b7d 100644
> --- a/docs/yum.8
> +++ b/docs/yum.8
> @@ -89,7 +89,9 @@ group of packages while ensuring that all dependencies
> are
>  satisfied\&.  (See \fBSpecifying package names\fP for more information)
>  If no package matches the given package name(s), they are assumed to be a
> shell
>  glob and any matches are then installed\&. If the name starts with an
> -@ character the rest of the name is used as though passed to the
> groupinstall command\&. If the name is a file, then install works
> +@ character the rest of the name is used as though passed to the
> groupinstall
> +command\&. If the name starts with a - character, then a search is done
> within
> +the transaction and any matches are removed. If the name is a file, then
> install works
>  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
> @@ -127,6 +129,9 @@ is done by either obsoleting, upgrading or downgrading
> as appropriate. This will
>  "normally" do the same thing as the upgrade command however if you have
> the
>  package FOO installed at version 4, and the latest available is only
>  version 3, then this command will \fBdowngrade\fP FOO to version 3.
> +
> +This command does not perform operations on groups, local packages or
> negative
> +selections.
>  .IP
>  .IP "\fBremove\fP or \fBerase\fP"
>  Are used to remove the specified packages from the system
> diff --git a/yum/__init__.py b/yum/__init__.py
> index 34f2de7..4fee2c7 100644
> --- a/yum/__init__.py
> +++ b/yum/__init__.py
> @@ -2663,7 +2663,9 @@ class YumBase(depsolve.Depsolve):
>     def returnPackagesByDep(self, depstring):
>         """Pass in a generic [build]require string and this function will
>            pass back the packages it finds providing that dep."""
> -
> +
> +        if not depstring:
> +            return []
>         results = self.pkgSack.searchProvides(depstring)
>         return results
>
> @@ -2693,6 +2695,9 @@ class YumBase(depsolve.Depsolve):
>         """Pass in a generic [build]require string and this function will
>            pass back the installed packages it finds providing that dep."""
>
> +        if not depstring:
> +            return []
> +
>         # parse the string out
>         #  either it is 'dep (some operator) e:v-r'
>         #  or /file/dep
> @@ -2866,6 +2871,17 @@ class YumBase(depsolve.Depsolve):
>             pkgnames.update(thisgroup.packages)
>         return self.pkgSack.searchNames(pkgnames)
>
> +    def _minus_deselect(self, pattern):
> +        """ Remove things from the transaction, like kickstart. """
> +        assert pattern[0] == '-'
> +        pat = pattern[1:]
> +
> +        if pat and pat[0] == '@':
> +            pat = pat[1:]
> +            return self.deselectGroup(pat)
> +
> +        return self.tsInfo.deselect(pat)
> +
>     def _find_obsoletees(self, po):
>         """ Return the pkgs. that are obsoleted by the po we pass in. """
>         if not isinstance(po, YumLocalPackage):
> @@ -2906,7 +2922,10 @@ class YumBase(depsolve.Depsolve):
>                 raise Errors.InstallError, _('Nothing specified to
> install')
>
>             if 'pattern' in kwargs:
> -                if kwargs['pattern'][0] == '@':
> +                if kwargs['pattern'] and kwargs['pattern'][0] == '-':
> +                    return self._minus_deselect(kwargs['pattern'])
> +
> +                if kwargs['pattern'] and kwargs['pattern'][0] == '@':
>                     return self._at_groupinstall(kwargs['pattern'])
>
>                 was_pattern = True
> @@ -3218,7 +3237,10 @@ class YumBase(depsolve.Depsolve):
>
>
>         elif 'pattern' in kwargs:
> -            if kwargs['pattern'][0] == '@':
> +            if kwargs['pattern'] and kwargs['pattern'][0] == '-':
> +                return self._minus_deselect(kwargs['pattern'])
> +
> +            if kwargs['pattern'] and kwargs['pattern'][0] == '@':
>                 return self._at_groupinstall(kwargs['pattern'])
>
>             (e, m, u) = self.rpmdb.matchPackageNames([kwargs['pattern']])
> @@ -3399,7 +3421,10 @@ class YumBase(depsolve.Depsolve):
>             pkgs = [po]
>         else:
>             if 'pattern' in kwargs:
> -                if kwargs['pattern'][0] == '@':
> +                if kwargs['pattern'] and kwargs['pattern'][0] == '-':
> +                    return self._minus_deselect(kwargs['pattern'])
> +
> +                if kwargs['pattern'] and kwargs['pattern'][0] == '@':
>                     return self._at_groupremove(kwargs['pattern'])
>
>                 (e,m,u) = self.rpmdb.matchPackageNames([kwargs['pattern']])
> @@ -3693,7 +3718,10 @@ class YumBase(depsolve.Depsolve):
>         if po:
>             apkgs = [po]
>         elif 'pattern' in kwargs:
> -            if kwargs['pattern'][0] == '@':
> +            if kwargs['pattern'] and kwargs['pattern'][0] == '-':
> +                return self._minus_deselect(kwargs['pattern'])
> +
> +            if kwargs['pattern'] and kwargs['pattern'][0] == '@':
>                 apkgs = self._at_groupdowngrade(kwargs['pattern'])
>                 doing_group_pkgs = True # Don't warn. about some things
>             else:
> --
> 1.6.6.1
>
> _______________________________________________
> Yum-devel mailing list
> Yum-devel at lists.baseurl.org
> http://lists.baseurl.org/mailman/listinfo/yum-devel


ACK
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.baseurl.org/pipermail/yum-devel/attachments/20100421/af7141b3/attachment-0001.htm>


More information about the Yum-devel mailing list