From: Junio C Hamano Date: Wed, 28 Sep 2011 22:37:32 GMT Subject: Re: [PATCH/RFCv3 2/2] receive-pack: don't pass non-existent refs to post-{receive,update} hooks in push deletions Message-ID: <7vsjngxphv.fsf@alter.siamese.dyndns.org> In-Reply-To: <20110928153935.GA7800@myhost> Pang Yan Han 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". > @@ -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; } ...