On Mon, Feb 2, 2015 at 9:41 PM, Chris Packham <judge.packham@xxxxxxxxx> wrote: > Hi, > > On Sat, Jan 31, 2015 at 10:46 AM, Rémi Rampin <remirampin@xxxxxxxxx> wrote: >> Hi, >> >> This bug report concerns git-gui. Apologies if this is not the right >> mailing-list. >> >> By submodule I mean a repository for which .git is not a regular Git >> directory, but rather a "gitdir: ..." file. >> While running "git gui" from such a directory will work fine, trying >> to open it from the choose_repository window will fail with "Not a Git >> repository". This is because of the simplistic implementation of proc >> _is_git in lib/choose_repository.tcl. >> >> I suggest fixing that function, or using Git directly to perform that >> check, for instance checking "git rev-parse --show-toplevel". I'd >> attempt a patch but my tcl-fu is weak. >> > > I would have thought the following would work > > --- 8< --- > Subject: [PATCH] git-gui: use git rev-parse to validate paths > > The current _is_git function to validate a path as a git repository does > not handle a gitfiles which have been used for submodules for some time. > Instead of using a custom function let's just ask git rev-parse. > > Signed-off-by: Chris Packham <chris.packham@xxxxxxxxxxxxxxxxxxx> > --- > lib/choose_repository.tcl | 15 ++++----------- > 1 file changed, 4 insertions(+), 11 deletions(-) > > diff --git a/lib/choose_repository.tcl b/lib/choose_repository.tcl > index 92d6022..944ab50 100644 > --- a/lib/choose_repository.tcl > +++ b/lib/choose_repository.tcl > @@ -339,19 +339,12 @@ method _git_init {} { > } > > proc _is_git {path} { > - if {[file exists [file join $path HEAD]] > - && [file exists [file join $path objects]] > - && [file exists [file join $path config]]} { > + puts $path > + if {[catch {exec git rev-parse --resolve-git-dir $path}]} { > + return 0 > + } else { > return 1 > } > - if {[is_Cygwin]} { > - if {[file exists [file join $path HEAD]] > - && [file exists [file join $path objects.lnk]] > - && [file exists [file join $path config.lnk]]} { > - return 1 > - } > - } > - return 0 > } > > proc _objdir {path} { > -- > 2.3.0.rc2 > --- >8 --- > > But it actually looks like git rev-parse --resolve-git-dir $path needs > to be run inside a git repository _any_ git repository, which seems a > bit backwards to me. > > $ cd > $ git rev-parse --resolve-git-dir ~/src/git/.git > fatal: Not a git repository (or any parent up to mount point /home) > Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set). > > $ cd ~/src/git > $ git rev-parse --resolve-git-dir ~/src/git-gui/.git > /home/chrisp/src/git-gui/.git > > So one potential fix git a gui-gui bug, one new(?) bug in git rev-parse. Not a new one. Happens in 1.9.1. Still a bit counter-intuitive IMO. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html