diff options
author | Chantry Xavier <shiningxc@gmail.com> | 2007-12-05 23:47:54 +0100 |
---|---|---|
committer | Dan McGee <dan@archlinux.org> | 2007-12-06 02:57:35 +0100 |
commit | c49b2a00d628c2ecb86b3908c1901ab3edee0b1a (patch) | |
tree | 29f5b204e3d39fe40e696e55d0cccba8bee21ea8 | |
parent | 43eacf2852a15828a4becff74efad04f85305a92 (diff) | |
download | pacman-c49b2a00d628c2ecb86b3908c1901ab3edee0b1a.tar.gz pacman-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.c | 24 |
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); |