mirror of
https://github.com/moparisthebest/pacman
synced 2024-08-13 17:03:46 -04:00
Only note backup file changes with -Qkk
Backup files are expected to be changed and should not be flagged by -Qkk. Note changed back-up files in -Qkk but do not count them as altered. Do not report backup files in -Qqkk. Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
parent
8e533b0363
commit
640324f1d4
@ -102,9 +102,15 @@ static int check_file_permissions(const char *pkgname, const char *filepath,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int check_file_time(const char *pkgname, const char *filepath,
|
static int check_file_time(const char *pkgname, const char *filepath,
|
||||||
struct stat *st, struct archive_entry *entry)
|
struct stat *st, struct archive_entry *entry, int backup)
|
||||||
{
|
{
|
||||||
if(st->st_mtime != archive_entry_mtime(entry)) {
|
if(st->st_mtime != archive_entry_mtime(entry)) {
|
||||||
|
if(backup) {
|
||||||
|
printf("%s%s%s: ", config->colstr.title, _("backup file"), config->colstr.nocolor);
|
||||||
|
printf(_("%s: %s (Modification time mismatch)\n"),
|
||||||
|
pkgname, filepath);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if(!config->quiet) {
|
if(!config->quiet) {
|
||||||
pm_printf(ALPM_LOG_WARNING, _("%s: %s (Modification time mismatch)\n"),
|
pm_printf(ALPM_LOG_WARNING, _("%s: %s (Modification time mismatch)\n"),
|
||||||
pkgname, filepath);
|
pkgname, filepath);
|
||||||
@ -140,9 +146,15 @@ static int check_file_link(const char *pkgname, const char *filepath,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int check_file_size(const char *pkgname, const char *filepath,
|
static int check_file_size(const char *pkgname, const char *filepath,
|
||||||
struct stat *st, struct archive_entry *entry)
|
struct stat *st, struct archive_entry *entry, int backup)
|
||||||
{
|
{
|
||||||
if(st->st_size != archive_entry_size(entry)) {
|
if(st->st_size != archive_entry_size(entry)) {
|
||||||
|
if(backup) {
|
||||||
|
printf("%s%s%s: ", config->colstr.title, _("backup file"), config->colstr.nocolor);
|
||||||
|
printf(_("%s: %s (Size mismatch)\n"),
|
||||||
|
pkgname, filepath);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
if(!config->quiet) {
|
if(!config->quiet) {
|
||||||
pm_printf(ALPM_LOG_WARNING, _("%s: %s (Size mismatch)\n"),
|
pm_printf(ALPM_LOG_WARNING, _("%s: %s (Size mismatch)\n"),
|
||||||
pkgname, filepath);
|
pkgname, filepath);
|
||||||
@ -155,13 +167,13 @@ static int check_file_size(const char *pkgname, const char *filepath,
|
|||||||
|
|
||||||
/* placeholders - libarchive currently does not read checksums from mtree files
|
/* placeholders - libarchive currently does not read checksums from mtree files
|
||||||
static int check_file_md5sum(const char *pkgname, const char *filepath,
|
static int check_file_md5sum(const char *pkgname, const char *filepath,
|
||||||
struct stat *st, struct archive_entry *entry)
|
struct stat *st, struct archive_entry *entry, int backup)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int check_file_sha256sum(const char *pkgname, const char *filepath,
|
static int check_file_sha256sum(const char *pkgname, const char *filepath,
|
||||||
struct stat *st, struct archive_entry *entry)
|
struct stat *st, struct archive_entry *entry, int backup)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -222,6 +234,7 @@ int check_pkg_full(alpm_pkg_t *pkg)
|
|||||||
struct archive *mtree;
|
struct archive *mtree;
|
||||||
struct archive_entry *entry = NULL;
|
struct archive_entry *entry = NULL;
|
||||||
size_t file_count = 0;
|
size_t file_count = 0;
|
||||||
|
const alpm_list_t *lp;
|
||||||
|
|
||||||
root = alpm_option_get_root(config->handle);
|
root = alpm_option_get_root(config->handle);
|
||||||
rootlen = strlen(root);
|
rootlen = strlen(root);
|
||||||
@ -247,6 +260,7 @@ int check_pkg_full(alpm_pkg_t *pkg)
|
|||||||
const char *path = archive_entry_pathname(entry);
|
const char *path = archive_entry_pathname(entry);
|
||||||
mode_t type;
|
mode_t type;
|
||||||
size_t file_errors = 0;
|
size_t file_errors = 0;
|
||||||
|
int backup = 0;
|
||||||
|
|
||||||
/* strip leading "./" from path entries */
|
/* strip leading "./" from path entries */
|
||||||
if(path[0] == '.' && path[1] == '/') {
|
if(path[0] == '.' && path[1] == '/') {
|
||||||
@ -298,19 +312,30 @@ int check_pkg_full(alpm_pkg_t *pkg)
|
|||||||
|
|
||||||
file_errors += check_file_permissions(pkgname, filepath, &st, entry);
|
file_errors += check_file_permissions(pkgname, filepath, &st, entry);
|
||||||
|
|
||||||
if(type != AE_IFDIR) {
|
|
||||||
/* file or symbolic link */
|
|
||||||
file_errors += check_file_time(pkgname, filepath, &st, entry);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(type == AE_IFLNK) {
|
if(type == AE_IFLNK) {
|
||||||
file_errors += check_file_link(pkgname, filepath, &st, entry);
|
file_errors += check_file_link(pkgname, filepath, &st, entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* the following checks are expected to fail if a backup file has been
|
||||||
|
modified */
|
||||||
|
for(lp = alpm_pkg_get_backup(pkg); lp; lp = lp->next) {
|
||||||
|
alpm_backup_t *bl = lp->data;
|
||||||
|
|
||||||
|
if(strcmp(path, bl->name) == 0) {
|
||||||
|
backup = 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(type != AE_IFDIR) {
|
||||||
|
/* file or symbolic link */
|
||||||
|
file_errors += check_file_time(pkgname, filepath, &st, entry, backup);
|
||||||
|
}
|
||||||
|
|
||||||
if(type == AE_IFREG) {
|
if(type == AE_IFREG) {
|
||||||
/* TODO: these are expected to be changed with backup files */
|
/* TODO: these are expected to be changed with backup files */
|
||||||
file_errors += check_file_size(pkgname, filepath, &st, entry);
|
file_errors += check_file_size(pkgname, filepath, &st, entry, backup);
|
||||||
/* file_errors += check_file_md5sum(pkgname, filepath, &st, entry); */
|
/* file_errors += check_file_md5sum(pkgname, filepath, &st, entry, backup); */
|
||||||
}
|
}
|
||||||
|
|
||||||
if(config->quiet && file_errors) {
|
if(config->quiet && file_errors) {
|
||||||
|
Loading…
Reference in New Issue
Block a user