From: Chris Packham Date: Wed, 07 May 2014 07:28:35 GMT Subject: Re: git gui error with relocated repository Message-ID: <5369E0A3.4040701@gmail.com> In-Reply-To: <871tw7xg3o.fsf@fox.patthoyts.tk> On 07/05/14 00:10, Pat Thoyts wrote: > Chris Packham writes: > >> On Tue, Apr 29, 2014 at 2:56 PM, Chris Packham wrote: >>> Hi Pat, >>> >>> I'm running git 2.0.0-rc0 (haven't got round to pulling down rc1 yet) >>> which includes gitgui-0.19.0 and I'm getting a new error when I run >>> 'git gui' in a repository with a .git file (created by git submodule). >>> >>> I can send you a screencap of the error message off list if you want >>> but the text is >>> >>> "No working directory ../../../ >>> >>> couldn't change working directory to ../../../: no such file or directory" >> >> My tcl is a little rusty but I think the problem might be this snippet. >> >> # v1.7.0 introduced --show-toplevel to return the canonical work-tree >> if {[package vsatisfies $_git_version 1.7.0]} { >> if { [is_Cygwin] } { >> catch {set _gitworktree [exec cygpath --windows [git rev-parse >> --show-toplevel]]} >> } else { >> set _gitworktree [git rev-parse --show-toplevel] >> } >> } else { >> # try to set work tree from environment, core.worktree or use >> # cdup to obtain a relative path to the top of the worktree. If >> # run from the top, the ./ prefix ensures normalize expands pwd. >> if {[catch { set _gitworktree $env(GIT_WORK_TREE) }]} { >> set _gitworktree [get_config core.worktree] >> if {$_gitworktree eq ""} { >> set _gitworktree [file normalize ./[git rev-parse --show-cdup]] >> } >> } >> } >> >> The vsatisfies call probably doesn't handle '2.0.0.rc0' and the >> fallback behaviour probably needs to normalise core.worktree >> > > The _git_version variable has already been trimmed to remove such > suffixes so the version comparison here will be ok. I don't think that's true 'git rev-parse --show-toplevel' does the right thing - if it's run. > It looks more likely > to be something to do with the .git being a file with a link being > mishandled. How did you setup this test repository with its link to a > parent? > It's just a git clone of the parent and a git submodule init. A subtle thing to notice is that config.worktree is relative to $GIT_DIR. All the configuration was done by git without any intervention from me. >>> >>> Here's some other info that might help >>> >>> $ git --version >>> git version 2.0.0.rc0 >>> >>> $ cat .git >>> gitdir: ../.git/modules/ >>> >>> $ git rev-parse --git-dir >>> /home/chris/src//.git/modules/ >>> >>> $ git config core.worktree >>> ../../../ >>> >>> Thanks, >>> Chris >> >