In this case "git rev-parse --git-dir" doesn't return an absolute path, but merely ".git", so the selected file has a relative path. The function make_relative then tries to make the already relative path relative, which results in a path like "../../../../Makefile" with as much ".." as the number of parts [pwd] consists of. This regression was introduced by commit 9712b81 (gitk: Fix bugs in blaming code, 2008-12-06), which fixed "git gui blame" when called from subdirs. This also fixes it for bare repositories. Signed-off-by: Markus Heidelberg <markus.heidelberg@xxxxxx> --- gitk | 30 +++++++++++++++++------------- 1 files changed, 17 insertions(+), 13 deletions(-) diff --git a/gitk b/gitk index a0214b7..07a9440 100755 --- a/gitk +++ b/gitk @@ -3377,21 +3377,25 @@ proc index_sha1 {fname} { # Turn an absolute path into one relative to the current directory proc make_relative {f} { - set elts [file split $f] - set here [file split [pwd]] - set ei 0 - set hi 0 - set res {} - foreach d $here { - if {$ei < $hi || $ei >= [llength $elts] || [lindex $elts $ei] ne $d} { - lappend res ".." - } else { - incr ei + if {[file pathtype $f] ne "relative"} { + set elts [file split $f] + set here [file split [pwd]] + set ei 0 + set hi 0 + set res {} + foreach d $here { + if {$ei < $hi || $ei >= [llength $elts] || [lindex $elts $ei] ne $d} { + lappend res ".." + } else { + incr ei + } + incr hi } - incr hi + set elts [concat $res [lrange $elts $ei end]] + return [eval file join $elts] + } else { + return $f } - set elts [concat $res [lrange $elts $ei end]] - return [eval file join $elts] } proc external_blame {parent_idx {line {}}} { -- 1.6.5.2.155.gaa0e5 -- 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