Skip to content

Commit

Permalink
git-gui: Fix Blame Parent & Context for working copy lines.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Alexander Gavrilov authored and Shawn O. Pearce committed Sep 12, 2008
1 parent 95b6a2d commit a9786bb
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 3 deletions.
3 changes: 3 additions & 0 deletions git-gui.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1025,6 +1025,9 @@ set current_diff_path {}
set is_3way_diff 0
set selected_commit_type new
set nullid "0000000000000000000000000000000000000000"
set nullid2 "0000000000000000000000000000000000000001"
######################################################################
##
## task management
Expand Down
29 changes: 26 additions & 3 deletions lib/blame.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -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]

Expand Down Expand Up @@ -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;
}
Expand All @@ -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
Expand Down

0 comments on commit a9786bb

Please sign in to comment.