git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Josh Hunt <johunt@akamai.com>
To: Junio C Hamano <gitster@pobox.com>,
	Josh Hunt via GitGitGadget <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, Josh Hunt <joshua.hunt@berkeley.edu>
Subject: Re: [PATCH] branch: return error when --list finds no matches
Date: Thu, 4 Mar 2021 16:46:39 -0800	[thread overview]
Message-ID: <4f8b0030-0e15-0035-a9e8-224f64cb48f5@akamai.com> (raw)
In-Reply-To: <xmqqr1kvemid.fsf@gitster.c.googlers.com>

On 3/3/21 5:27 PM, Junio C Hamano wrote:
> "Josh Hunt via GitGitGadget" <gitgitgadget@gmail.com> writes:
> 
>> From: Josh Hunt <johunt@akamai.com>
>>
>> Currently git branch --list foo always returns an exit status of 0 even
>> when the branch being searched for does not exist. Now an error is printed
>> and returns a non-zero exit status.
> 

Junio

Thanks so much for the review.

> Explaining what happens in the current code upfront is a good thing
> and is in line with the convention used in our project, which is
> good.  But drop "currently" from there.
> 
> Strictly speaking, it is not "always".  In a corrupt repository, it
> is likely to show a proper error message and die.
> 
> Also explaining what you want to happen before the end of the log
> message is good.

Thank you. I will make the above changes to the commit message if this 
moves forward.

> 
> But the proposed log message lacks why it is a good idea to make
> such a change, which is the most important part.

OK sure. To provide better context I came across this when using 'git 
branch --list foo' in a script and there was an expectation (possibly 
incorrect) when the search was not successful it would return an 
non-zero exit status.

I don't know if there's a convention that git follows, but I have the 
following examples where a similar type of command does return a 
non-zero exit status:

johunt@johunt-ThinkPad-T480s:~$ ls foo
ls: cannot access 'foo': No such file or directory
johunt@johunt-ThinkPad-T480s:~$ echo $?
2

johunt@johunt-ThinkPad-T480s:~$ touch foo
johunt@johunt-ThinkPad-T480s:~$ grep bar foo
johunt@johunt-ThinkPad-T480s:~$ echo $?
1

johunt@johunt-ThinkPad-T480s:~$ grep . foo
grep: foo: No such file or directory
johunt@johunt-ThinkPad-T480s:~$ echo $?
2

Not just these tools, but even in git itself:

johunt@johunt-ThinkPad-T480s:~$ git init foo
Initialized empty Git repository in /home/johunt/foo/.git/
johunt@johunt-ThinkPad-T480s:~/foo$ touch bar
johunt@johunt-ThinkPad-T480s:~/foo$ git add bar
johunt@johunt-ThinkPad-T480s:~/foo$ git commit -am 'initial commit'
[master (root-commit) 771510f] initial commit
  1 file changed, 0 insertions(+), 0 deletions(-)
  create mode 100644 bar
johunt@johunt-ThinkPad-T480s:~/foo$ git log foo
fatal: ambiguous argument 'foo': unknown revision or path not in the 
working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
johunt@johunt-ThinkPad-T480s:~/foo$ echo $?
128

johunt@johunt-ThinkPad-T480s:~/foo$ git grep foo .
johunt@johunt-ThinkPad-T480s:~/foo$ echo $?
1

However it does seem like 'tag --list' follows the branch behavior:

johunt@johunt-ThinkPad-T480s:~/foo$ git tag --list foo
johunt@johunt-ThinkPad-T480s:~/foo$ echo $?
0

There are likely other examples of git commands showing both behaviors. 
Is it that branch and tag are a certain type of command which allows 
them to behave differently than say log or grep?

> 
> If you ask me, I would say that the command was asked to show any
> branches, if exist, that match the given pattern, and did what it
> was asked to do without encountering any error---it just happened to
> have seen 0 branch that matched.  So I think returning non-zero
> status would be a bug.

Interesting. Going back to the scripting context then your suggestion 
would just be to check if output is NULL? This is what I've converted my 
scripts to do for now, but still feel like if --list can't find the 
branch I'm looking for then it should return non-zero as it matches 
behavior of other tools :)

Josh

      reply	other threads:[~2021-03-05  1:05 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-03 17:44 [PATCH] branch: return error when --list finds no matches Josh Hunt via GitGitGadget
2021-03-04  1:27 ` Junio C Hamano
2021-03-05  0:46   ` Josh Hunt [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4f8b0030-0e15-0035-a9e8-224f64cb48f5@akamai.com \
    --to=johunt@akamai.com \
    --cc=git@vger.kernel.org \
    --cc=gitgitgadget@gmail.com \
    --cc=gitster@pobox.com \
    --cc=joshua.hunt@berkeley.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).