prune: quiet ENOENT on missing directories

$GIT_DIR/objects/pack may be removed to save inodes in shared
repositories.  Quiet down prune in cases where either
$GIT_DIR/objects or $GIT_DIR/objects/pack is non-existent,
but emit the system error in other cases to help users diagnose
permissions problems or resource constraints.

Signed-off-by: Eric Wong <e@80x24.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Eric Wong 2022-11-19 20:12:13 +00:00 committed by Junio C Hamano
parent 3dcec76d9d
commit 6974765352
2 changed files with 11 additions and 1 deletions

View File

@ -127,7 +127,9 @@ static void remove_temporary_files(const char *path)
dir = opendir(path);
if (!dir) {
fprintf(stderr, "Unable to open directory %s\n", path);
if (errno != ENOENT)
fprintf(stderr, "Unable to open directory %s: %s\n",
path, strerror(errno));
return;
}
while ((de = readdir(dir)) != NULL)

View File

@ -29,6 +29,14 @@ test_expect_success setup '
git gc
'
test_expect_success 'bare repo prune is quiet without $GIT_DIR/objects/pack' '
git clone -q --shared --template= --bare . bare.git &&
rmdir bare.git/objects/pack &&
git --git-dir=bare.git prune --no-progress 2>prune.err &&
test_must_be_empty prune.err &&
rm -r bare.git prune.err
'
test_expect_success 'prune stale packs' '
orig_pack=$(echo .git/objects/pack/*.pack) &&
>.git/objects/tmp_1.pack &&