Re: DWIM .git repository discovery
From: Nguyen Thai Ngoc Duy <hidden>
Date: 2016-06-15 22:54:52
On Wed, Sep 26, 2012 at 11:21 AM, Junio C Hamano [off-list ref] wrote:
Nguyen Thai Ngoc Duy [off-list ref] writes:quoted
I often find myself attempting to examine another repository, especially in projects that are closely related but put in different git repos. It's usually just a diff or log command git log --patch ../path/to/another/repo/path/to/file.cI personally do not think it is _too_ bad to internally do (cd ../path/to/another/repo/path/to && git log --patch file.c)
As long as the .git discovery and path rewriting can be done automatically, that'd be nice. But..
but I doubt it is worth the numerous implications (I am not talking about implementation complexity at all, but the conceptual burden). For example, where in the working tree of the other project should the command run? The output from "log -p" happens to be always relative to the top of the working tree, but that does not necessarily hold true for other subcommands.
Returned paths should always be relative to cwd (well except diff/log which are prefixed by [ab]/). cd'ing internally like above makes it more confusing imo. Take grep for example, I find it natural for "git grep foo -- ../other/repo/bar/" to return "../other/repo/bar/foo.c ...". Prefix currently does not take "../blah" form, but I see no reasons why it can't/shouldn't. $(cwd) is most likely outside the other project's working directory. An exception running from inside a submodule and examining the parent repository. For too long relative paths, we could even display in ":/" pathspec notation. Users who don't recognize them either look up documentation, or gradually learn to drop the ":/" part, even without know what it's for. Repo modification commands like git-add could cause greater confusion (I added and committed it (on the other repo), but when I pushed (on this repo), the changes aren't there). We could and probably should avoid dwim-ing these cases. A good way to make it clear you're accessing another repository is prompt (y/n) from users. I don't think pressing Ctrl-C to abort the command is too much hassle (the command would fail anyway with "outside repository" message, without dwim).
A worse thing is that there is an oddball case "diff[ --no-index]" that changes behaviour depending on the pathspec points at inside or outside the repository.
Yep. But not many commands do this fortunately (diff and grep only?)
I think that this is a road to insanity; anybody who thinks along this line is already on the other side of the line, I would have to say ;-).
We could go slowly and stop before being diagnosed insane. I mean the trick can be opted in for a command subset where it makes sense to do so. -- Duy