Re: [PATCH 1/8] gitk: fix file highlight when run in subdirectory
- From
Paul Mackerras <paulus@samba.org>
- Date
- Apr 10, 2011, 01:54 UTC
- Message-ID
- <20110410015410.GA25368@brick.ozlabs.ibm.com>
- In-Reply-To
- <1301969659-19703-2-git-send-email-martin.von.zweigbergk@gmail.com>
On Mon, Apr 04, 2011 at 10:14:12PM -0400, Martin von Zweigbergk wrote:
Show 24 quoted lines
> The "highlight this only" and "highlight this too" commands in gitk > add the path relative to $GIT_WORK_TREE to the "Find" input box. When > the search (using git-diff-tree) is run, the paths are used > unmodified, except for some shell escaping. Since the search is run > from gitk's working directory, no commits matching the paths will be > found if gitk was started in a subdirectory. > > Make the paths passed to git-diff-tree relative to gitk's working > directory instead of being relative to $GIT_WORK_TREE. If, however, > gitk is run outside of the working directory (e.g. with $GIT_WORK_TREE > set), we still need to use the path relative to $GIT_WORK_TREE. > > Signed-off-by: Martin von Zweigbergk <martin.von.zweigbergk@gmail.com> > --- > > This could also have been fixed by cd-ing to the work tree > directory. That would also make the "Local changes checked in to index > but not committed" and "Local uncommitted changes, not checked in to > index" show up properly when running with GIT_WORK_TREE defined. > > I wasn't sure if other parts of gitk depend on the working directory, > or if there are plans to make something depend on it, so I thought > changing it only for the specific case of file highlighting would be > safer. What do you think?
I have to admit I wasn't aware of GIT_WORK_TREE before I saw your patches. The patches look OK, but I wonder how many of the problems would go away if gitk were simply to set GIT_WORK_TREE in the environment for the programs it runs, if it is not already set. Something like this (untested):
# check that we can find a .git directory somewhere...
if {[catch {set gitdir [gitdir]}]} {
show_error {} . [mc "Cannot find a git repository here."]
exit 1
}
if {![file isdirectory $gitdir]} {
show_error {} . [mc "Cannot find the git directory \"%s\"." $gitdir]
exit 1
}
+if {![info exists env(GIT_WORK_TREE)]} {
+ set worktree [file dirname $gitdir]
+ if {$worktree ne "."} {
+ set env(GIT_WORK_TREE) $worktree
+ }
+}Paul.