Stop emitting an error message for dangling packed references found when deleting another packed reference. See the previous commit for a longer explanation of the issue. Change repack_without_ref_fn() to silently ignore dangling packed references. Signed-off-by: Michael Haggerty <mhagger@xxxxxxxxxxxx> --- refs.c | 17 ++++++++++------- t/t3210-pack-refs.sh | 2 +- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/refs.c b/refs.c index 51f68d3..eadbc2a 100644 --- a/refs.c +++ b/refs.c @@ -531,15 +531,17 @@ static void sort_ref_dir(struct ref_dir *dir) /* * Return true iff the reference described by entry can be resolved to - * an object in the database. Emit a warning if the referred-to - * object does not exist. + * an object in the database. If report_errors is true, emit a + * warning if the referred-to object does not exist. */ -static int ref_resolves_to_object(struct ref_entry *entry) +static int ref_resolves_to_object(struct ref_entry *entry, int report_errors) { if (entry->flag & REF_ISBROKEN) return 0; if (!has_sha1_file(entry->u.value.sha1)) { - error("%s does not point to a valid object!", entry->name); + if (report_errors) + error("%s does not point to a valid object!", + entry->name); return 0; } return 1; @@ -578,7 +580,7 @@ static int do_one_ref(struct ref_entry *entry, void *cb_data) return 0; if (!((data->flags & DO_FOR_EACH_INCLUDE_BROKEN) || - ref_resolves_to_object(entry))) + ref_resolves_to_object(entry, 1))) return 0; current_ref = entry; @@ -1897,8 +1899,9 @@ static int repack_without_ref_fn(struct ref_entry *entry, void *cb_data) if (!strcmp(data->refname, entry->name)) return 0; - if (!ref_resolves_to_object(entry)) - return 0; /* Skip broken refs */ + /* Silently skip broken refs: */ + if (!ref_resolves_to_object(entry, 0)) + return 0; len = snprintf(line, sizeof(line), "%s %s\n", sha1_to_hex(entry->u.value.sha1), entry->name); /* this should not happen but just being defensive */ diff --git a/t/t3210-pack-refs.sh b/t/t3210-pack-refs.sh index c032d88..559f602 100755 --- a/t/t3210-pack-refs.sh +++ b/t/t3210-pack-refs.sh @@ -142,7 +142,7 @@ test_expect_success 'delete ref with dangling packed version' ' test_cmp /dev/null result ' -test_expect_failure 'delete ref while another dangling packed ref' ' +test_expect_success 'delete ref while another dangling packed ref' ' git branch lamb && git commit --allow-empty -m "future garbage" && git pack-refs --all && -- 1.8.2.1 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html