threads / patch / 7287

patchgit-symbolic-ref: fix error message when ref doesn't exist

Subject: [PATCH] git-symbolic-ref: fix error message when ref doesn't exist

## tl;dr

3 messages between Mar 18, 2007 and Mar 19, 2007. Diffs are folded; open one to read it.

replies: 2people: 2as markdown or json

Julian Phillips· Mar 18, 2007, 01:53 UTC · lore

When calling resolve_ref from check_symref set reading to 1, since we do want to know if the given ref doesn't exist. This means that "git symbolic-ref foo" will now print "fatal: No such ref: foo" as expected.

Signed-off-by: Julian Phillips <julian@quantumfyre.co.uk>
---

While looking at how fetch worked, I noticed that symbolic-ref was supposed to differentiate between non-existent refs and non-symbolic refs. Something I hadn't noticed it doing on those occasions when my fingers had failed me ...

I also noticed that the man page says that symbolic-ref will return 1 when the specified reference is non-symbolic. This is only true when using -q, but I don't know if the code or man page wants changing ...

 builtin-symbolic-ref.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
Show changes to builtin-symbolic-ref.c +1 −1
diff --git a/builtin-symbolic-ref.c b/builtin-symbolic-ref.c
index d41b406..a93c85d 100644
--- a/builtin-symbolic-ref.c
+++ b/builtin-symbolic-ref.c
@@ -9,7 +9,7 @@ static void check_symref(const char *HEAD, int quiet)
 {
 	unsigned char sha1[20];
 	int flag;
-	const char *refs_heads_master = resolve_ref(HEAD, sha1, 0, &flag);
+	const char *refs_heads_master = resolve_ref(HEAD, sha1, 1, &flag);
 
 	if (!refs_heads_master)
 		die("No such ref: %s", HEAD);
-- 
1.5.0.4
Junio C Hamano· Mar 19, 2007, 08:47 UTC · re: Julian Phillips · lore

Re: [PATCH] git-symbolic-ref: fix error message when ref doesn't exist

Julian Phillips <julian@quantumfyre.co.uk> writes:
> When calling resolve_ref from check_symref set reading to 1, since we
> do want to know if the given ref doesn't exist.  This means that
> "git symbolic-ref foo" will now print "fatal: No such ref: foo" as
> expected.
Hmmmm.  That would break:
	$ rm -fr a; mkdir a; cd a
	$ git init-db
        $ git symbolic-ref HEAD
        refs/heads/master

wouldn't it? We do want it not to fail and tell us that the commit we are going to create will be on refs/heads/master (i.e. "the master branch").

And the command errors out as expected when given a non-existent symbolic ref:

	$ git symbolic-ref no-such; echo $?
	fatal: ref no-such is not a symbolic ref
	128
Julian Phillips· Mar 19, 2007, 09:03 UTC · re: Junio C Hamano · lore

Re: [PATCH] git-symbolic-ref: fix error message when ref doesn't exist

On Mon, 19 Mar 2007, Junio C Hamano wrote:
Show 17 quoted lines
> Julian Phillips <julian@quantumfyre.co.uk> writes:
>
>> When calling resolve_ref from check_symref set reading to 1, since we
>> do want to know if the given ref doesn't exist.  This means that
>> "git symbolic-ref foo" will now print "fatal: No such ref: foo" as
>> expected.
>
> Hmmmm.  That would break:
>
> 	$ rm -fr a; mkdir a; cd a
> 	$ git init-db
>        $ git symbolic-ref HEAD
>        refs/heads/master
>
> wouldn't it?  We do want it not to fail and tell us that the
> commit we are going to create will be on refs/heads/master
> (i.e. "the master branch").
Um .. yes ... as per the comment in refs.c ... :$
Show 8 quoted lines
>
> And  the command errors out as expected when given a
> non-existent symbolic ref:
>
> 	$ git symbolic-ref no-such; echo $?
> 	fatal: ref no-such is not a symbolic ref
> 	128
>

The thing is, that wasn't what I expected. From looking at the code for symbolic-ref I was expecting:

 	$ git symbolic-ref no-such; echo $?
 	fatal: No such ref: no-such
 	128

In particular, in quiet mode you will get a return of 1 - rather than 128, which would potentially lead you astray if you belived the man page ...

-- 
Julian

  ---
"Intelligence without character is a dangerous thing."
-- G. Steinem

← back to recent threads