From: Junio C Hamano Date: Sun, 25 Sep 2005 23:27:44 GMT Subject: Re: Add "git-update-ref" to update the HEAD (or other) ref Message-ID: <7vhdc8n2xb.fsf@assigned-by-dhcp.cox.net> In-Reply-To: Linus Torvalds writes: > + * FIXME! Is something like the one at the end acceptable? I'd like to take these patches in two stages (I am not asking you for a resend): - Drop the emulated symlink part from the update-ref.c; have it graduate to "master" branch and use it in existing scripts. - Take the read_ref() change, along with a patch to re-add the emulated symlink part to update-ref.c (after making its interpretation to match that of read_ref() -- which requires the prefix to be exactly "ref: " five bytes); keep it in "pu" branch a bit longer. --- diff --git a/update-ref.c b/update-ref.c --- a/update-ref.c +++ b/update-ref.c @@ -97,11 +97,13 @@ int main(int argc, char **argv) } /* - * FIXME! - * - * We should re-read the old ref here, and re-verify that it + * We re-read the old ref here, and re-verify that it * matches "oldsha1". Otherwise there's a small race. */ + if (!resolve_ref(git_path("%s", refname), oldsha1)) + die("Cannot verify ref: %s", refname); + if (memcmp(oldsha1, currsha1, 20)) + die("Ref %s changed to %s", refname, sha1_to_hex(oldsha1)); if (rename(lockpath, path) < 0) { unlink(lockpath);