| commit d875b67997356e7e1b4509607fec81ca8220c597 |
| Author: James Antill <james@and.org> |
| Date: Tue Mar 3 01:54:02 2015 -0500 |
| |
| Add query_install_excludes conf./docs and use it for list/info/search/provides. |
| |
| diff --git a/cli.py b/cli.py |
| index f04fe63..cefc67e 100755 |
| |
| |
| @@ -2299,7 +2299,8 @@ class YumOptionParser(OptionParser): |
| self.base.conf.disable_excludes = self._splitArg(opts.disableexcludes) |
| self.base.conf.disable_includes = self._splitArg(opts.disableincludes) |
| |
| - for exclude in self._splitArg(opts.exclude): |
| + self.base.cmdline_excludes = self._splitArg(opts.exclude) |
| + for exclude in self.base.cmdline_excludes: |
| try: |
| excludelist = self.base.conf.exclude |
| excludelist.append(exclude) |
| diff --git a/docs/yum.conf.5 b/docs/yum.conf.5 |
| index e0f4c8b..62aa78e 100644 |
| |
| |
| @@ -156,10 +156,20 @@ This is commonly used so a package isn't upgraded or installed accidentally, but |
| can be used to remove packages in any way that "yum list" will show packages. |
| Shell globs using wildcards (eg. * and ?) are allowed. |
| |
| -Can be disabled using --disableexcludes. |
| +Can be disabled using disable_excludes or --disableexcludes. |
| Command-line option: \fB\-x\fP |
| |
| .IP |
| +\fBdisable_excludes\fR |
| +A way to permanently set the --disableexcludes command line option. |
| + |
| +.IP |
| +\fBquery_install_excludes\fR |
| +This applies the command line exclude option (only, not the configuration |
| +exclude above) to installed packages being shown in some query commands |
| +(currently: list/info/search/provides). |
| + |
| +.IP |
| \fBinstallonlypkgs \fR |
| List of package provides that should only ever be installed, never updated. |
| Kernels in particular fall into this category. Defaults to kernel, |
| diff --git a/output.py b/output.py |
| index 2787d86..091b58e 100755 |
| |
| |
| @@ -1330,6 +1330,13 @@ class YumOutput: |
| :param verbose: whether to output extra verbose information |
| :param highlight: highlighting options for the highlighted matches |
| """ |
| + if (po.repo.id == "installed" and |
| + self.conf.query_install_excludes and self.cmdline_excludes): |
| + # Very similar to _cmdline_exclude from yumcommands |
| + e,m,u = yum.packages.parsePackages([po], self.cmdline_excludes) |
| + if e or m: |
| + return |
| + |
| if self.conf.showdupesfromrepos: |
| msg = '%s : ' % po |
| else: |
| diff --git a/yum/config.py b/yum/config.py |
| index 02061ba..efe7be9 100644 |
| |
| |
| @@ -821,6 +821,7 @@ class YumConf(StartupConf): |
| # XXX rpm_check_debug is unused, left around for API compatibility for now |
| rpm_check_debug = BoolOption(True) |
| disable_excludes = ListOption() |
| + query_install_excludes = BoolOption(True) |
| skip_broken = BoolOption(False) |
| # Note that "instant" is the old behaviour, but group:primary is very |
| # similar but better :). |
| diff --git a/yumcommands.py b/yumcommands.py |
| index e77d209..6fa11fa 100644 |
| |
| |
| @@ -41,6 +41,7 @@ import errno |
| |
| import yum.config |
| from yum import updateinfo |
| +from yum.packages import parsePackages |
| |
| def _err_mini_usage(base, basecmd): |
| if basecmd not in base.yum_cli_commands: |
| @@ -584,6 +585,14 @@ def _list_cmd_calc_columns(base, ypl): |
| columns = base.calcColumns(data, remainder_column=1) |
| return (-columns[0], -columns[1], -columns[2]) |
| |
| +def _cmdline_exclude(pkgs, cmdline_excludes): |
| + """ Do an extra exclude for installed packages that match the cmd line. """ |
| + if not cmdline_excludes: |
| + return pkgs |
| + e,m,u = parsePackages(pkgs, cmdline_excludes) |
| + excluded = set(e + m) |
| + return [po for po in pkgs if po not in excluded] |
| + |
| class InfoCommand(YumCommand): |
| """A class containing methods needed by the cli to execute the |
| info command. |
| @@ -682,6 +691,9 @@ class InfoCommand(YumCommand): |
| clin = base.conf.color_list_installed_newer |
| clir = base.conf.color_list_installed_reinstall |
| clie = base.conf.color_list_installed_extra |
| + if base.conf.query_install_excludes: |
| + ypl.installed = _cmdline_exclude(ypl.installed, |
| + base.cmdline_excludes) |
| rip = base.listPkgs(ypl.installed, _('Installed Packages'), basecmd, |
| highlight_na=update_pkgs, columns=columns, |
| highlight_modes={'>' : clio, '<' : clin, |