@matheusbsbs / matheus-bagliano / commits / f475e08edb
Fork 0

lock_ref: inform callers of unavailable ref

One of the ways that locking might fail is that there is a DF conflict between two refs (e.g., you want to lock "foo/bar" but "foo" already exists). In this case, we return an error, but there is no way for the caller to know the specific problem. This patch sets errno to ENOTDIR, which is the most sensible code. It's what we would see if the refs were stored purely in the filesystem (but these days we must check the namespace manually due to packed refs). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jeff King committed May 25, 2009 at 06:37 UTC f475e08edbbabe38bd758fd42f08f646551468d9
1 file changed +3 -1
refs.c
+3 -1
@@ -893,8 +893,10 @@ static struct ref_lock *lock_ref_sha1_basic(const char *ref, const unsigned char
893 * name is a proper prefix of our refname.
894 */
895 if (missing &&
896 - !is_refname_available(ref, NULL, get_packed_refs(), 0))
896 + !is_refname_available(ref, NULL, get_packed_refs(), 0)) {
897 + last_errno = ENOTDIR;
898 goto error_return;
899 + }
900
901 lock->lk = xcalloc(1, sizeof(struct lock_file));
902