mirror of
https://github.com/moparisthebest/pacman
synced 2025-01-08 12:28:00 -05:00
Don't remove unknown files in cache cleaning code
This removes the hack I added to skip '*.sig' files earlier since there are other files that also fall into the same bucket- source packages from `makepkg --source`, delta files, etc. Rather than prompting for each and every one, simply skip them. Doing '-Scc' rather than '-Sc' will delete these files if that is really what you want to do. Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
parent
e8a2c25456
commit
be229d129e
@ -349,7 +349,7 @@ Sync Options[[SO]]
|
|||||||
databases are saved for every sync DB you download from, and are not
|
databases are saved for every sync DB you download from, and are not
|
||||||
deleted even if they are removed from the configuration file
|
deleted even if they are removed from the configuration file
|
||||||
linkman:pacman.conf[5]. Use one '\--clean' switch to only remove
|
linkman:pacman.conf[5]. Use one '\--clean' switch to only remove
|
||||||
packages that are no longer installed; use two to remove all packages
|
packages that are no longer installed; use two to remove all files
|
||||||
from the cache. In both cases, you will have a yes or no option to
|
from the cache. In both cases, you will have a yes or no option to
|
||||||
remove packages and/or unused downloaded databases.
|
remove packages and/or unused downloaded databases.
|
||||||
+
|
+
|
||||||
|
@ -198,7 +198,6 @@ static int sync_cleancache(int level)
|
|||||||
/* step through the directory one file at a time */
|
/* step through the directory one file at a time */
|
||||||
while((ent = readdir(dir)) != NULL) {
|
while((ent = readdir(dir)) != NULL) {
|
||||||
char path[PATH_MAX];
|
char path[PATH_MAX];
|
||||||
size_t pathlen;
|
|
||||||
int delete = 1;
|
int delete = 1;
|
||||||
alpm_pkg_t *localpkg = NULL, *pkg = NULL;
|
alpm_pkg_t *localpkg = NULL, *pkg = NULL;
|
||||||
const char *local_name, *local_version;
|
const char *local_name, *local_version;
|
||||||
@ -209,30 +208,18 @@ static int sync_cleancache(int level)
|
|||||||
/* build the full filepath */
|
/* build the full filepath */
|
||||||
snprintf(path, PATH_MAX, "%s%s", cachedir, ent->d_name);
|
snprintf(path, PATH_MAX, "%s%s", cachedir, ent->d_name);
|
||||||
|
|
||||||
/* short circuit for removing all packages from cache */
|
/* short circuit for removing all files from cache */
|
||||||
if(level > 1) {
|
if(level > 1) {
|
||||||
unlink(path);
|
unlink(path);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* we handle .sig files with packages, not separately */
|
/* attempt to load the file as a package. if we cannot load the file,
|
||||||
pathlen = strlen(path);
|
* simply skip it and move on. we don't need a full load of the package,
|
||||||
if(strcmp(path + pathlen - 4, ".sig") == 0) {
|
* just the metadata. */
|
||||||
continue;
|
if(alpm_pkg_load(config->handle, path, 0, 0, &localpkg) != 0) {
|
||||||
}
|
pm_printf(ALPM_LOG_DEBUG, "skipping %s, could not load as package\n",
|
||||||
|
path);
|
||||||
/* attempt to load the package, prompt removal on failures as we may have
|
|
||||||
* files here that aren't valid packages. we also don't need a full
|
|
||||||
* load of the package, just the metadata. */
|
|
||||||
if(alpm_pkg_load(config->handle, path, 0, 0, &localpkg) != 0
|
|
||||||
|| localpkg == NULL) {
|
|
||||||
if(yesno(_("File %s does not seem to be a valid package, remove it?"),
|
|
||||||
path)) {
|
|
||||||
if(localpkg) {
|
|
||||||
alpm_pkg_free(localpkg);
|
|
||||||
}
|
|
||||||
unlink(path);
|
|
||||||
}
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
local_name = alpm_pkg_get_name(localpkg);
|
local_name = alpm_pkg_get_name(localpkg);
|
||||||
@ -244,7 +231,7 @@ static int sync_cleancache(int level)
|
|||||||
if(pkg != NULL && alpm_pkg_vercmp(local_version,
|
if(pkg != NULL && alpm_pkg_vercmp(local_version,
|
||||||
alpm_pkg_get_version(pkg)) == 0) {
|
alpm_pkg_get_version(pkg)) == 0) {
|
||||||
/* package was found in local DB and version matches, keep it */
|
/* package was found in local DB and version matches, keep it */
|
||||||
pm_printf(ALPM_LOG_DEBUG, "pkg %s-%s found in local db\n",
|
pm_printf(ALPM_LOG_DEBUG, "package %s-%s found in local db\n",
|
||||||
local_name, local_version);
|
local_name, local_version);
|
||||||
delete = 0;
|
delete = 0;
|
||||||
}
|
}
|
||||||
@ -258,7 +245,7 @@ static int sync_cleancache(int level)
|
|||||||
if(pkg != NULL && alpm_pkg_vercmp(local_version,
|
if(pkg != NULL && alpm_pkg_vercmp(local_version,
|
||||||
alpm_pkg_get_version(pkg)) == 0) {
|
alpm_pkg_get_version(pkg)) == 0) {
|
||||||
/* package was found in a sync DB and version matches, keep it */
|
/* package was found in a sync DB and version matches, keep it */
|
||||||
pm_printf(ALPM_LOG_DEBUG, "pkg %s-%s found in sync db\n",
|
pm_printf(ALPM_LOG_DEBUG, "package %s-%s found in sync db\n",
|
||||||
local_name, local_version);
|
local_name, local_version);
|
||||||
delete = 0;
|
delete = 0;
|
||||||
}
|
}
|
||||||
@ -268,6 +255,7 @@ static int sync_cleancache(int level)
|
|||||||
alpm_pkg_free(localpkg);
|
alpm_pkg_free(localpkg);
|
||||||
|
|
||||||
if(delete) {
|
if(delete) {
|
||||||
|
size_t pathlen = strlen(path);
|
||||||
unlink(path);
|
unlink(path);
|
||||||
/* unlink a signature file if present too */
|
/* unlink a signature file if present too */
|
||||||
if(PATH_MAX - 5 >= pathlen) {
|
if(PATH_MAX - 5 >= pathlen) {
|
||||||
|
Loading…
Reference in New Issue
Block a user