[pacman-dev] [PATCH 3/3] add fnmatch support for HoldPkg

Dave Reisner d at falconindy.com
Sat Nov 12 14:13:25 EST 2011


Adds test remove031.

Signed-off-by: Dave Reisner <dreisner at archlinux.org>
---
 doc/pacman.conf.5.txt          |    3 ++-
 src/pacman/remove.c            |    8 +++++++-
 test/pacman/tests/remove031.py |   11 +++++++++++
 3 files changed, 20 insertions(+), 2 deletions(-)
 create mode 100644 test/pacman/tests/remove031.py

diff --git a/doc/pacman.conf.5.txt b/doc/pacman.conf.5.txt
index 83b7568..0dda006 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 matched.
 
 *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 e63b5c4..73a583c 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 0000000..0ea09c8
--- /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")
-- 
1.7.7.3



More information about the pacman-dev mailing list