diff options
-rw-r--r-- | builtin-pack-refs.c | 4 | ||||
-rwxr-xr-x | t/t3210-pack-refs.sh | 9 |
2 files changed, 12 insertions, 1 deletions
diff --git a/builtin-pack-refs.c b/builtin-pack-refs.c index 6de7128b9d..3de9b3eefd 100644 --- a/builtin-pack-refs.c +++ b/builtin-pack-refs.c @@ -37,7 +37,9 @@ static int handle_one_ref(const char *path, const unsigned char *sha1, if ((flags & REF_ISSYMREF)) return 0; 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; fprintf(cb->refs_file, "%s %s\n", sha1_to_hex(sha1), path); diff --git a/t/t3210-pack-refs.sh b/t/t3210-pack-refs.sh index 16bdae4f23..f0c7e22b36 100755 --- a/t/t3210-pack-refs.sh +++ b/t/t3210-pack-refs.sh @@ -96,4 +96,13 @@ test_expect_success \ git-branch -d n/o/p && 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 |