On Thu, Jul 22 2021, Junio C Hamano wrote: > Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> writes: > >> Change RUN_SETUP_GENTLY to stop dying if e.g. the .git is "not a >> repo". This means that we now recover in cases like: >> >> $ echo "gitdir: /foo/bar" > .git >> $ git ls-remote https://github.com/torvalds/linux >> [... ls-remote output ...] >> >> But not (as intended): >> >> $ git rev-parse HEAD >> fatal: not a git repository: /foo/bar > > I am of two minds. ls-remote is benign in that it behaves more or > less identically when given certain types of args, and the above may > be a strict improvement (but it does fail if you did not use URL but > use a remote nickname you thought you configured in the repository > in such a situation). There however are a few niche commands that > work inside and outside a repository and they work differently. For > example, if you do > > $ git diff file1 file2 > > in such a corrupt repository, I'd prefer to see the command _fail_ > to nudge the user to look into the situation, instead of taking the > output (which degenerates to "git diff --no-index file1 file2" > outside a repository) blindly as a patch that shows the changes > relative to the index for these two paths. Yes it comes down to what we think RUN_SETUP_GENTLY and setup_git_directory_gently() should be doing. I.e. is &nongit_ok supposed to be a binary "repo you can use"/"[...] can't use", or a tri-state of that plus "this looks like it's supposed to be a repo, but it's broken, so let's die". Anyway, if you're not happy with this pretty much as-is consider it dropped from my side, because I think the next step would be to do some more work on e.g. split up RUN_SETUP_GENTLY into a mode that makes sense for "diff", and another for "bugreport" and "ls-remote". I figured this was an easy bugfix, but if not perhaps Tom Cooks wants to pick this up... I guess another easy alternative would be to issue a warning() in this case, which is a relatively light refactoring of passing an error message up from the relevant function(s) instead of having it die() directly.