Fix seriously broken "git pack-refs"
Do *NOT* try this on a repository you care about: git pack-refs --all --prune git pack-refs because while the first "pack-refs" does the right thing, the second pack-refs will totally screw you over. This is because the second one tries to pack only tags; we should also pack what are already packed -- otherwise we would lose them. [jc: with an additional test] Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
535514f1f3
commit
1b555932cd
@ -37,7 +37,9 @@ static int handle_one_ref(const char *path, const unsigned char *sha1,
|
|||||||
if ((flags & REF_ISSYMREF))
|
if ((flags & REF_ISSYMREF))
|
||||||
return 0;
|
return 0;
|
||||||
is_tag_ref = !strncmp(path, "refs/tags/", 10);
|
is_tag_ref = !strncmp(path, "refs/tags/", 10);
|
||||||
if (!cb->all && !is_tag_ref)
|
|
||||||
|
/* ALWAYS pack refs that were already packed or are tags */
|
||||||
|
if (!cb->all && !is_tag_ref && !(flags & REF_ISPACKED))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fprintf(cb->refs_file, "%s %s\n", sha1_to_hex(sha1), path);
|
fprintf(cb->refs_file, "%s %s\n", sha1_to_hex(sha1), path);
|
||||||
|
@ -96,4 +96,13 @@ test_expect_success \
|
|||||||
git-branch -d n/o/p &&
|
git-branch -d n/o/p &&
|
||||||
git-branch n'
|
git-branch n'
|
||||||
|
|
||||||
|
test_expect_success 'pack, prune and repack' '
|
||||||
|
git-tag foo &&
|
||||||
|
git-pack-refs --all --prune &&
|
||||||
|
git-show-ref >all-of-them &&
|
||||||
|
git-pack-refs &&
|
||||||
|
git-show-ref >again &&
|
||||||
|
diff all-of-them again
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
Loading…
Reference in New Issue
Block a user