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

Re: [PATCH] Do check_repository_format() early

From
Junio C Hamano <gitster@pobox.com>
Date
Dec 3, 2007, 18:07 UTC
Message-ID
<7vtzmzire7.fsf@gitster.siamese.dyndns.org>
In-Reply-To
<fcaeb9bf0712030604o2efc90d0m148d3280aaa475a5@mail.gmail.com>
"Nguyen Thai Ngoc Duy" <pclouds@gmail.com> writes:
Show 43 quoted lines
> On Dec 2, 2007 1:58 AM, Junio C Hamano <gitster@pobox.com> wrote:
>>  * Similarly, run a few commands in modes that do not require git
>>    repository.  For example, "git apply --stat" of an existing patch
>>    should be viewable no matter where you are (that is just a "better
>>    diffstat" mode), so ideally it should not barf only because you
>>    happen to be in a repository that is too new for you to understand.
>>    I do not know offhand how your patch would handle this situation.
>>
>> Note that making sure the latter works is tricky to do right, for a few
>> reasons.
>>
>>  (1) It is not absolutely clear what the right behaviour is.  It could
>>      be argued that we should just barf saying we found a repository we
>>      do not understand, refraining from doing any damange on it [*2*].
>>
>>  (2) If we choose not to barf on such a repository, it remains to be
>>      decided what "gently" should do --- if it should still treat
>>      t/trash/test (which has too new a version) as the found repository,
>>      or ignore it and use t/trash (which we can understand) as the found
>>      repository.  I think it should do the former.
>
> You might have forgotten the third choice: ignore t/trash/test and
> stop searching, instead pretend there is no repository at all (maybe
> with a big warning of unsupported repository).
>
> I agree t/trash should not be touched no matter what. I had enough
> "fun" with nested gitdir already. But if _gently() treats t/trash/test
> as a good repository, mysterious things may happen. Suppose gitdir v2
> supports some crazy refspec that current installed git cannot
> understand. Now you run git-remote on a v2 repository, it would end up
> barfing "invalid refspec" or something instead of "your repository
> version is not supported, upgrade git now". The latter error message
> is much clearer IMHO.
>
> If we are going "t/trash/test is good repo" route, we must make sure
> _gently() callers check repository version (and barf at proper places)
> before actually using it. Doing so makes repo version checking in
> _gently redundant, you need to check it from callers anyway as the
> callers will decide when to barf. Or return  *nongit_ok=-1 and let the
> callers check return value so they do not need to run
> check_repository_format_version() again.
>
> Comments?

I think I phrased the above (2) not brilliantly. I meant your "third choice" is the sane approach. Treat t/trash/test as a found place that we do not understand, perhaps issue a warning saying that we will operate in there but the repository version is too new for us to understand, but still go ahead and operate in there without doing any repository operation (so the plain git-apply without --index will act as if it is a GNU patch called to modify files in that directory).

Previous: Nguyen Thai Ngoc DuyNext: Nguyễn Thái Ngọc Duy
Message 13 of 16 in “Do check_repository_format() early”
  1. Do check_repository_format() earlyNguyễn Thái Ngọc Duy, Nov 28, 2007
  2. Johannes SchindelinNov 28, 2007
  3. Nguyen Thai Ngoc DuyNov 28, 2007
  4. Johannes SchindelinNov 28, 2007
  5. Nguyen Thai Ngoc DuyNov 28, 2007
  6. Johannes SchindelinNov 28, 2007
  7. Junio C HamanoDec 1, 2007
  8. Nguyen Thai Ngoc DuyDec 1, 2007
  9. Junio C HamanoDec 1, 2007
  10. Nguyen Thai Ngoc DuyDec 3, 2007
  11. Johannes SchindelinDec 3, 2007
  12. Nguyen Thai Ngoc DuyDec 3, 2007
  13. Junio C HamanoDec 3, 2007
  14. Do check_repository_format() earlyNguyễn Thái Ngọc Duy, Dec 5, 2007
  15. Nguyen Thai Ngoc DuyDec 5, 2007
  16. Junio C HamanoDec 6, 2007

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.