git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] check-ref-format: require a repository for --branch

From
Jeff King <peff@peff.net>
Date
Aug 17, 2017, 10:22 UTC
Message-ID
<20170817102217.3yw7uxnkupdy3lh5@sigill.intra.peff.net>
In-Reply-To
<20170717172709.GL93855@aiede.mtv.corp.google.com>
On Mon, Jul 17, 2017 at 10:27:09AM -0700, Jonathan Nieder wrote:
Show 30 quoted lines
> > --- a/t/t1402-check-ref-format.sh
> > +++ b/t/t1402-check-ref-format.sh
> > @@ -161,6 +161,10 @@ test_expect_success 'check-ref-format --branch from subdir' '
> >  	test "$refname" = "$sha1"
> >  '
> >  
> > +test_expect_success 'check-ref-format --branch from non-repo' '
> > +	test_must_fail nongit git check-ref-format --branch @{-1}
> > +'
> > +
> >  valid_ref_normalized() {
> >  	prereq=
> >  	case $1 in
> 
> I don't think it's right.  Today I can do
> 
> 	$ cd /tmp
> 	$ git check-ref-format --branch master
> 	master
> 
> You might wonder why I'd ever do such a thing.  But that's what "git
> check-ref-format --branch" is for --- it is for taking a <branch>
> argument and turning it into a branch name.  For example, if you have
> a script with an $opt_branch variable that defaults to "master", it
> may do
> 
> 	resolved_branch=$(git check-ref-format --branch "$opt_branch")
> 
> even though it is in a mode that not going to have to use
> $resolved_branch and it is not running from a repository.

I'm not sure I buy that. What does "turning it into a branch name" even mean when you are not in a repository? Clearly @{-1} must fail. And everything else is just going to output the exact input you provided. So any script calling "check-ref-format --branch" outside of a repo would be better off not calling it at all. At best it does nothing, and at worst it's going to give a confusing error when $opt_branch is something like "@{-1}".

A more compelling argument along these lines is something like:
  Accepting --branch outside of a repo is pointless, but it's something
  we've historically accepted. To avoid breaking existing scripts (even
  if they are doing something pointless), we'll continue to allow it.

I'm not sure I buy _that_ line of reasoning either, but it at least makes sense to me (I just think it isn't worth the complexity of trying to audit the innards of interpret_branch_name()).

-Peff
Previous: Jeff KingNext: Junio C Hamano
Message 7 of 36 in “bug with check-ref-format outside of repository”
  1. Marko KunglaJul 8, 2017
  2. Jeff KingJul 14, 2017
  3. check-ref-format: require a repository for --branchJeff King, Jul 14, 2017
  4. Jonathan NiederJul 17, 2017
  5. Marko KunglaJul 17, 2017
  6. Jeff KingAug 17, 2017
  7. Jeff KingAug 17, 2017
  8. Junio C HamanoAug 17, 2017
  9. Jeff KingAug 18, 2017
  10. Junio C HamanoAug 18, 2017
  11. Junio C HamanoOct 16, 2017
  12. Junio C HamanoOct 16, 2017
  13. Jeff KingOct 16, 2017
  14. Jonathan NiederOct 16, 2017
  15. Junio C HamanoOct 17, 2017
  16. Jeff KingOct 17, 2017
  17. Junio C HamanoOct 17, 2017
  18. Junio C HamanoOct 17, 2017
  19. 0/3 Re: [PATCH] check-ref-format: require a repository for --branchJonathan Nieder, Oct 17, 2017
  20. 1/3 check-ref-format --branch: do not expand @{...} outside repositoryJonathan Nieder, Oct 17, 2017
  21. 2/3 check-ref-format --branch: strip refs/heads/ using skip_prefixJonathan Nieder, Oct 17, 2017
  22. Junio C HamanoOct 17, 2017
  23. Jonathan NiederOct 17, 2017
  24. Junio C HamanoOct 17, 2017
  25. 3/3 check-ref-format doc: --branch validates and expands <branch>Jonathan Nieder, Oct 17, 2017
  26. Junio C HamanoOct 17, 2017
  27. Jonathan NiederOct 17, 2017
  28. Jeff KingOct 18, 2017
  29. Kevin DaudtOct 17, 2017
  30. Junio C HamanoOct 17, 2017
  31. Kevin DaudtOct 17, 2017
  32. Jeff KingOct 16, 2017
  33. Jonathan NiederOct 17, 2017
  34. Junio C HamanoOct 17, 2017
  35. Jonathan NiederOct 17, 2017
  36. Jonathan NiederOct 17, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.