mirror of
https://github.com/git/git.git
synced 2026-04-06 06:50:11 +02:00
Merge branch 'tb/collect-pack-filenames-fix'
Avoid breakage of "git pack-objects --cruft" due to inconsistency between the way the code enumerates packfiles in the repository. * tb/collect-pack-filenames-fix: builtin/repack.c: only collect fully-formed packs
This commit is contained in:
@@ -95,8 +95,8 @@ static int repack_config(const char *var, const char *value, void *cb)
|
||||
}
|
||||
|
||||
/*
|
||||
* Adds all packs hex strings to either fname_nonkept_list or
|
||||
* fname_kept_list based on whether each pack has a corresponding
|
||||
* Adds all packs hex strings (pack-$HASH) to either fname_nonkept_list
|
||||
* or fname_kept_list based on whether each pack has a corresponding
|
||||
* .keep file or not. Packs without a .keep file are not to be kept
|
||||
* if we are going to pack everything into one file.
|
||||
*/
|
||||
@@ -107,6 +107,7 @@ static void collect_pack_filenames(struct string_list *fname_nonkept_list,
|
||||
DIR *dir;
|
||||
struct dirent *e;
|
||||
char *fname;
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
|
||||
if (!(dir = opendir(packdir)))
|
||||
return;
|
||||
@@ -115,11 +116,15 @@ static void collect_pack_filenames(struct string_list *fname_nonkept_list,
|
||||
size_t len;
|
||||
int i;
|
||||
|
||||
if (!strip_suffix(e->d_name, ".pack", &len))
|
||||
if (!strip_suffix(e->d_name, ".idx", &len))
|
||||
continue;
|
||||
|
||||
strbuf_reset(&buf);
|
||||
strbuf_add(&buf, e->d_name, len);
|
||||
strbuf_addstr(&buf, ".pack");
|
||||
|
||||
for (i = 0; i < extra_keep->nr; i++)
|
||||
if (!fspathcmp(e->d_name, extra_keep->items[i].string))
|
||||
if (!fspathcmp(buf.buf, extra_keep->items[i].string))
|
||||
break;
|
||||
|
||||
fname = xmemdupz(e->d_name, len);
|
||||
@@ -136,6 +141,7 @@ static void collect_pack_filenames(struct string_list *fname_nonkept_list,
|
||||
}
|
||||
}
|
||||
closedir(dir);
|
||||
strbuf_release(&buf);
|
||||
|
||||
string_list_sort(fname_kept_list);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user