gitk: Fix file highlight when run in subdirectory

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> Signed-off-by: Paul Mackerras <paulus@samba.org>

Martin von Zweigbergk committed Apr 4, 2011 at 22:14 UTC c332f44514375fd8e70da2c347b7bb8f2bd240f4
1 file changed +10 -1
gitk
+10 -1
@@ -4527,12 +4527,17 @@ proc makepatterns {l} {
4527
4528 proc do_file_hl {serial} {
4529 global highlight_files filehighlight highlight_paths gdttype fhl_list
4530 + global cdup
4531
4532 if {$gdttype eq [mc "touching paths:"]} {
4533 if {[catch {set paths [shellsplit $highlight_files]}]} return
4534 set highlight_paths [makepatterns $paths]
4535 highlight_filelist
4535 - set gdtargs [concat -- $paths]
4536 + set relative_paths {}
4537 + foreach path $paths {
4538 + lappend relative_paths [file join $cdup $path]
4539 + }
4540 + set gdtargs [concat -- $relative_paths]
4541 } elseif {$gdttype eq [mc "adding/removing string:"]} {
4542 set gdtargs [list "-S$highlight_files"]
4543 } else {
@@ -11641,6 +11646,10 @@ set stuffsaved 0
11646 set patchnum 0
11647 set lserial 0
11648 set isworktree [expr {[exec git rev-parse --is-inside-work-tree] == "true"}]
11649 +set cdup {}
11650 +if {$isworktree} {
11651 + set cdup [exec git rev-parse --show-cdup]
11652 +}
11653 setcoords
11654 makewindow
11655 catch {