diff options
author | Alexander Gavrilov <angavrilov@gmail.com> | 2008-09-08 11:18:52 +0400 |
---|---|---|
committer | Shawn O. Pearce <sop@google.com> | 2008-09-12 08:09:09 -0700 |
commit | a9786bb42ff4fa4b8031ab69215a66cf329d8324 (patch) | |
tree | d83badd49d82ea4021b51517ae29384d1fbf4f30 /lib | |
parent | Merge branch 'maint' (diff) | |
download | tgif-a9786bb42ff4fa4b8031ab69215a66cf329d8324.tar.xz |
git-gui: Fix Blame Parent & Context for working copy lines.
Make Blame Parent Commit and Show History Context work
properly for lines blamed on the working copy.
Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com>
Signed-off-by: Shawn O. Pearce <sop@google.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/blame.tcl | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/lib/blame.tcl b/lib/blame.tcl index 827c85d67f..0d635cd3a7 100644 --- a/lib/blame.tcl +++ b/lib/blame.tcl @@ -942,9 +942,20 @@ method _format_offset_date {base offset} { } method _gitkcommit {} { + global nullid + set dat [_get_click_amov_info $this] if {$dat ne {}} { set cmit [lindex $dat 0] + + # If the line belongs to the working copy, use HEAD instead + if {$cmit eq $nullid} { + if {[catch {set cmit [git rev-parse --verify HEAD]} err]} { + error_popup [strcat [mc "Cannot find HEAD commit:"] "\n\n$err"] + return; + } + } + set radius [get_config gui.blamehistoryctx] set cmdline [list --select-commit=$cmit] @@ -981,12 +992,20 @@ method _gitkcommit {} { } method _blameparent {} { + global nullid + set dat [_get_click_amov_info $this] if {$dat ne {}} { set cmit [lindex $dat 0] set new_path [lindex $dat 1] - if {[catch {set cparent [git rev-parse --verify "$cmit^"]}]} { + # Allow using Blame Parent on lines modified in the working copy + if {$cmit eq $nullid} { + set parent_ref "HEAD" + } else { + set parent_ref "$cmit^" + } + if {[catch {set cparent [git rev-parse --verify $parent_ref]} err]} { error_popup [strcat [mc "Cannot find parent commit:"] "\n\n$err"] return; } @@ -996,8 +1015,12 @@ method _blameparent {} { # Generate a diff between the commit and its parent, # and use the hunks to update the line number. # Request zero context to simplify calculations. - if {[catch {set fd [eval git_read diff-tree \ - --unified=0 $cparent $cmit $new_path]} err]} { + if {$cmit eq $nullid} { + set diffcmd [list diff-index --unified=0 $cparent -- $new_path] + } else { + set diffcmd [list diff-tree --unified=0 $cparent $cmit -- $new_path] + } + if {[catch {set fd [eval git_read $diffcmd]} err]} { $status stop [mc "Unable to display parent"] error_popup [strcat [mc "Error loading diff:"] "\n\n$err"] return |