diff options
author | Dave Reisner <dreisner@archlinux.org> | 2011-10-31 03:38:56 +0100 |
---|---|---|
committer | Dave Reisner <dreisner@archlinux.org> | 2011-11-13 20:19:16 +0100 |
commit | 10241a6d766fcebb3dbc930facb3c1b2c6ab4992 (patch) | |
tree | 89d2ac8b1e3092749d1d9a3044c73f9ade2448e1 | |
parent | 902305f1633298ff0ef7cd2bfbed0e91aae91646 (diff) | |
download | pacman-10241a6d766fcebb3dbc930facb3c1b2c6ab4992.tar.gz pacman-10241a6d766fcebb3dbc930facb3c1b2c6ab4992.tar.xz |
add fnmatch support for HoldPkg
Adds test remove031.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
-rw-r--r-- | doc/pacman.conf.5.txt | 3 | ||||
-rw-r--r-- | src/pacman/remove.c | 8 | ||||
-rw-r--r-- | test/pacman/tests/remove031.py | 11 |
3 files changed, 20 insertions, 2 deletions
diff --git a/doc/pacman.conf.5.txt b/doc/pacman.conf.5.txt index 52ae3e3c..2c1a24b2 100644 --- a/doc/pacman.conf.5.txt +++ b/doc/pacman.conf.5.txt @@ -86,7 +86,8 @@ Options *HoldPkg =* package ...:: If a user tries to '\--remove' a package that's listed in `HoldPkg`, - pacman will ask for confirmation before proceeding. + pacman will ask for confirmation before proceeding. Shell-style glob + patterns are allowed. *IgnorePkg =* package ...:: Instructs pacman to ignore any upgrades for this package when performing diff --git a/src/pacman/remove.c b/src/pacman/remove.c index e63b5c42..73a583c9 100644 --- a/src/pacman/remove.c +++ b/src/pacman/remove.c @@ -20,6 +20,7 @@ #include "config.h" +#include <fnmatch.h> #include <stdlib.h> #include <stdio.h> @@ -31,6 +32,11 @@ #include "util.h" #include "conf.h" +static int fnmatch_cmp(const void *pattern, const void *string) +{ + return fnmatch(pattern, string, 0); +} + static int remove_target(const char *target) { alpm_pkg_t *pkg; @@ -134,7 +140,7 @@ int pacman_remove(alpm_list_t *targets) int holdpkg = 0; for(i = alpm_trans_get_remove(config->handle); i; i = alpm_list_next(i)) { alpm_pkg_t *pkg = i->data; - if(alpm_list_find_str(config->holdpkg, alpm_pkg_get_name(pkg))) { + if(alpm_list_find(config->holdpkg, alpm_pkg_get_name(pkg), fnmatch_cmp)) { pm_printf(ALPM_LOG_WARNING, _("%s is designated as a HoldPkg.\n"), alpm_pkg_get_name(pkg)); holdpkg = 1; diff --git a/test/pacman/tests/remove031.py b/test/pacman/tests/remove031.py new file mode 100644 index 00000000..0ea09c87 --- /dev/null +++ b/test/pacman/tests/remove031.py @@ -0,0 +1,11 @@ +self.description = "Remove a package in HoldPkg" + +p1 = pmpkg("foopkg") +self.addpkg2db("local", p1) + +self.option["HoldPkg"] = ["???pkg"] + +self.args = "-R %s" % p1.name + +self.addrule("PACMAN_RETCODE=1") +self.addrule("PKG_EXIST=foopkg") |