[pacman-dev] [PATCH v2] Skip special files when cleaning package cache

Allan McRae allan at archlinux.org
Fri Mar 9 20:04:20 EST 2012


Ignore *.sig, *.db*, and *.src.tar* when cleaning the package cache.

Fixes FS#25166.

Signed-off-by: Allan McRae <allan at archlinux.org>
---

Why didn't I know about fnmatch before...  so much easier than the
regex stuff I was doing before!

 src/pacman/sync.c |   18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/src/pacman/sync.c b/src/pacman/sync.c
index e69ca58..1df2a6f 100644
--- a/src/pacman/sync.c
+++ b/src/pacman/sync.c
@@ -26,6 +26,7 @@
 #include <errno.h>
 #include <dirent.h>
 #include <sys/stat.h>
+#include <fnmatch.h>
 
 #include <alpm.h>
 #include <alpm_list.h>
@@ -222,6 +223,23 @@ static int sync_cleancache(int level)
 			if(strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0) {
 				continue;
 			}
+
+			/* skip signature files - they are removed with their package file */
+			if(fnmatch("*.sig", ent->d_name, 0) == 0) {
+				continue;
+			}
+
+			/* skip package database within the cache directory */
+			if(fnmatch("*.db*", ent->d_name, 0) == 0) {
+				continue;
+			}
+
+			/* skip source packages withing the cache directory */
+			if(fnmatch("*.src.tar*", ent->d_name, 0) == 0) {
+				continue;
+			}
+
+
 			/* build the full filepath */
 			snprintf(path, PATH_MAX, "%s%s", cachedir, ent->d_name);
 
-- 
1.7.9.3



More information about the pacman-dev mailing list