diff --git a/builtin-pack-refs.c b/builtin-pack-refs.c
index 6de7128b9d8e98dcb9850d9dc932ca522c97473a..d080e30d67a913529d46e0da169faa4b0be75580 100644 (file)
--- a/builtin-pack-refs.c
+++ b/builtin-pack-refs.c
/* Do not pack the symbolic refs */
if ((flags & REF_ISSYMREF))
return 0;
- is_tag_ref = !strncmp(path, "refs/tags/", 10);
- if (!cb->all && !is_tag_ref)
+ is_tag_ref = !prefixcmp(path, "refs/tags/");
+
+ /* 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);