diff options
author | Alexander Gavrilov <angavrilov@gmail.com> | 2008-12-06 20:21:54 +0300 |
---|---|---|
committer | Shawn O. Pearce <spearce@spearce.org> | 2008-12-08 08:33:05 -0800 |
commit | 95e706b5ec4d9b6832640c717c98fb4c912b54c5 (patch) | |
tree | 224912b2912bf41a89c2bb3c11a6f7be1f4f670c | |
parent | git-gui: Teach start_push_anywhere_action{} to notice when remote is a mirror. (diff) | |
download | tgif-95e706b5ec4d9b6832640c717c98fb4c912b54c5.tar.xz |
git-gui: Fix handling of relative paths in blame.
Currently using '..' or '.' in the file path for gui blame
causes it to break, because the path is passed inside the
SHA:PATH spec to cat-file, which apparently does not understand
such items. As a result, cat-file returns nothing, and the
viewer crashes because of an "index out of range" error.
This commit adds a simple function that normalizes such paths.
I choose not to use [file normalize], because it uses some data
from the file system, e.g. dereferences symlinks, and creates
an absolute path, while blame may be used to inspect historical
information that bears no relation to the current filesystem state.
Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
-rwxr-xr-x | git-gui.sh | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/git-gui.sh b/git-gui.sh index 8a4b42dbd7..65dacf9b16 100755 --- a/git-gui.sh +++ b/git-gui.sh @@ -2630,6 +2630,20 @@ proc usage {} { exit 1 } +proc normalize_relpath {path} { + set elements {} + foreach item [file split $path] { + if {$item eq {.}} continue + if {$item eq {..} && [llength $elements] > 0 + && [lindex $elements end] ne {..}} { + set elements [lrange $elements 0 end-1] + continue + } + lappend elements $item + } + return [eval file join $elements] +} + # -- Not a normal commit type invocation? Do that instead! # switch -- $subcommand { @@ -2648,7 +2662,7 @@ blame { foreach a $argv { if {$is_path || [file exists $_prefix$a]} { if {$path ne {}} usage - set path $_prefix$a + set path [normalize_relpath $_prefix$a] break } elseif {$a eq {--}} { if {$path ne {}} { @@ -2671,7 +2685,7 @@ blame { unset is_path if {$head ne {} && $path eq {}} { - set path $_prefix$head + set path [normalize_relpath $_prefix$head] set head {} } |