summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChantry Xavier <shiningxc@gmail.com>2007-12-05 23:47:54 +0100
committerDan McGee <dan@archlinux.org>2007-12-05 19:57:35 -0600
commitc49b2a00d628c2ecb86b3908c1901ab3edee0b1a (patch)
tree29f5b204e3d39fe40e696e55d0cccba8bee21ea8
parent43eacf2852a15828a4becff74efad04f85305a92 (diff)
downloadpacman-c49b2a00d628c2ecb86b3908c1901ab3edee0b1a.tar.xz
pacman/sync.c : improve the sync db cleanup feature.
This feature (introduced by b118ce55bd01c7ebd42b5b6d4a0f34aa925701d8 as a part of -Sc) could actually be helpful in the 3.0 -> 3.1 transition, because all sync dbs will be left in /var/lib/pacman/, while the updated ones will go to /var/lib/pacman/sync/. So it'll now clean everything in /var/lib/pacman/, and only the unused databases in /var/lib/pacman/sync/ (with the exception of local/ and sync/ in both cases). Note: This feature is undocumented. I wonder if moving it to another option, something like -S --dbclean, wouldn't help for documenting it. Signed-off-by: Chantry Xavier <shiningxc@gmail.com> Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--src/pacman/sync.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/src/pacman/sync.c b/src/pacman/sync.c
index 2c16382f..9cf781a9 100644
--- a/src/pacman/sync.c
+++ b/src/pacman/sync.c
@@ -43,7 +43,9 @@
extern pmdb_t *db_local;
-static int sync_cleandb(const char *dbpath) {
+/* if keep_used != 0, then the dirnames which match an used syncdb
+ * will be kept */
+static int sync_cleandb(const char *dbpath, int keep_used) {
DIR *dir;
struct dirent *ent;
@@ -68,12 +70,13 @@ static int sync_cleandb(const char *dbpath) {
if(!strcmp(dname, "sync") || !strcmp(dname, "local")) {
continue;
}
- syncdbs = alpm_option_get_syncdbs();
- for(i = syncdbs; i && !found; i = alpm_list_next(i)) {
- pmdb_t *db = alpm_list_getdata(i);
- found = !strcmp(dname, alpm_db_get_name(db));
+ if(keep_used) {
+ syncdbs = alpm_option_get_syncdbs();
+ for(i = syncdbs; i && !found; i = alpm_list_next(i)) {
+ pmdb_t *db = alpm_list_getdata(i);
+ found = !strcmp(dname, alpm_db_get_name(db));
+ }
}
-
/* We have a directory that doesn't match any syncdb.
* Ask the user if he wants to remove it. */
if(!found) {
@@ -102,12 +105,13 @@ static int sync_cleandb_all(void) {
if(!yesno(_("Do you want to remove unused repositories? [Y/n] "))) {
return(0);
}
- /* The sync dbs were previously put in dbpath, but are now in dbpath/sync,
- * so we will clean both directories */
- sync_cleandb(dbpath);
+ /* The sync dbs were previously put in dbpath/, but are now in dbpath/sync/,
+ * so we will clean everything in dbpath/ (except dbpath/local/ and dbpath/sync/,
+ * and only the unused sync dbs in dbpath/sync/ */
+ sync_cleandb(dbpath, 0);
sprintf(newdbpath, "%s%s", dbpath, "sync/");
- sync_cleandb(newdbpath);
+ sync_cleandb(newdbpath, 1);
printf(_("Database directory cleaned up\n"));
return(0);