diff options
author | Jeff King <peff@peff.net> | 2015-11-20 06:55:34 -0500 |
---|---|---|
committer | Jeff King <peff@peff.net> | 2015-11-20 06:55:34 -0500 |
commit | 45014beac004a610938a265698605c18ab126087 (patch) | |
tree | 97b7dcfd2a4edf2e0044cb1f498a902aea158441 /sha1_file.c | |
parent | f34be46e47773d03e9d09641209121591a6b37c8 (diff) | |
parent | 478f34d2b6ea13d5f56ecec04de7ca7ce18367c0 (diff) | |
download | git-45014beac004a610938a265698605c18ab126087.tar.gz |
Merge branch 'dk/gc-idx-wo-pack'
Having a leftover .idx file without corresponding .pack file in
the repository hurts performance; "git gc" learned to prune them.
* dk/gc-idx-wo-pack:
gc: remove garbage .idx files from pack dir
t5304: test cleaning pack garbage
prepare_packed_git(): refactor garbage reporting in pack directory
Diffstat (limited to 'sha1_file.c')
-rw-r--r-- | sha1_file.c | 23 |
1 files changed, 6 insertions, 17 deletions
diff --git a/sha1_file.c b/sha1_file.c index c5b31de9aa..3d56746a9b 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -1217,27 +1217,16 @@ void install_packed_git(struct packed_git *pack) packed_git = pack; } -void (*report_garbage)(const char *desc, const char *path); +void (*report_garbage)(unsigned seen_bits, const char *path); static void report_helper(const struct string_list *list, int seen_bits, int first, int last) { - const char *msg; - switch (seen_bits) { - case 0: - msg = "no corresponding .idx or .pack"; - break; - case 1: - msg = "no corresponding .idx"; - break; - case 2: - msg = "no corresponding .pack"; - break; - default: + if (seen_bits == (PACKDIR_FILE_PACK|PACKDIR_FILE_IDX)) return; - } + for (; first < last; first++) - report_garbage(msg, list->items[first].string); + report_garbage(seen_bits, list->items[first].string); } static void report_pack_garbage(struct string_list *list) @@ -1260,7 +1249,7 @@ static void report_pack_garbage(struct string_list *list) if (baselen == -1) { const char *dot = strrchr(path, '.'); if (!dot) { - report_garbage("garbage found", path); + report_garbage(PACKDIR_FILE_GARBAGE, path); continue; } baselen = dot - path + 1; @@ -1332,7 +1321,7 @@ static void prepare_packed_git_one(char *objdir, int local) ends_with(de->d_name, ".keep")) string_list_append(&garbage, path.buf); else - report_garbage("garbage found", path.buf); + report_garbage(PACKDIR_FILE_GARBAGE, path.buf); } closedir(dir); report_pack_garbage(&garbage); |