]> git.ipfire.org Git - thirdparty/git.git/commit - refs.c
refs: handle zero oid for pseudorefs
authorMartin Ågren <martin.agren@gmail.com>
Thu, 10 May 2018 19:29:56 +0000 (21:29 +0200)
committerJunio C Hamano <gitster@pobox.com>
Sun, 13 May 2018 01:36:11 +0000 (10:36 +0900)
commitdb0210d445963e5d85f98e48d6a93b971779d449
treeaa73521bfdf5c6203a686238ef84892ab8b9549e
parent65eb8fc344205a4039b989f07367f345101bbf28
refs: handle zero oid for pseudorefs

According to the documentation, it is possible to "specify 40 '0' or an
empty string as <oldvalue> to make sure that the ref you are creating
does not exist." But in the code for pseudorefs, we do not implement
this, as demonstrated by the failing tests added in the previous commit.
If we fail to read the old ref, we immediately die. But a failure to
read would actually be a good thing if we have been given the zero oid.

With the zero oid, allow -- and even require -- the ref-reading to fail.
This implements the "make sure that the ref ... does not exist" part of
the documentation and fixes both failing tests from the previous commit.

Since we have a `strbuf err` for collecting errors, let's use it and
signal an error to the caller instead of dying hard.

Reported-by: Rafael Ascensão <rafa.almas@gmail.com>
Helped-by: Rafael Ascensão <rafa.almas@gmail.com>
Signed-off-by: Martin Ågren <martin.agren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
refs.c
t/t1400-update-ref.sh