Pang Yan Han [off-list ref] writes:
+/* For invalid refs */
+static struct command **invalid_delete;
+static size_t invalid_delete_nr;
+static size_t invalid_delete_alloc;
Do you have to have these separately only to keep track of the corner case
errors? I would have expected that it would be more natural to mark them
by adding a single bitfield to "struct command".
quoted hunk
@@ -447,6 +467,8 @@ static const char *update(struct command *cmd)
if (!parse_object(old_sha1)) {
rp_warning("Allowing deletion of corrupt ref.");
old_sha1 = NULL;
+ if (!ref_exists((char *) name))
+ invalid_delete_append(cmd);
This is not an "invalid" delete but deleting a non-existing ref. Perhaps
you would want to move the warning and optionally reword it as well, e.g.
if (!parse_object(old_sha1)) {
old_sha1 = NULL;
if (ref_exists(name)) {
rp_warning("Allowing deletion of corrupt ref.");
} else {
rp_warning("Deleting a ref that does not exist.");
cmd->did_not_exist = 1;
}
...