aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAlexander Gavrilov <angavrilov@gmail.com>2008-08-23 12:30:51 +0400
committerShawn O. Pearce <spearce@spearce.org>2008-08-24 22:00:01 -0700
commit80fd76bd58070fe9615baf365abf2ff82276e50c (patch)
treec2f9e8269858644cc30317803e54993241295eef /lib
parenta9c80b83d4bb40e0ff696520de3ef2b0f74ff8c6 (diff)
downloadgit-80fd76bd58070fe9615baf365abf2ff82276e50c.tar.gz
git-80fd76bd58070fe9615baf365abf2ff82276e50c.tar.xz
git-gui: Support passing blame to a parent commit.
Add a context menu item that switches the view to the parent of the commit under cursor. It is useful to see how the file looked before the change, and find older changes in the same lines. Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com> Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Diffstat (limited to 'lib')
-rw-r--r--lib/blame.tcl48
1 files changed, 38 insertions, 10 deletions
diff --git a/lib/blame.tcl b/lib/blame.tcl
index c8975cfec..ef4223179 100644
--- a/lib/blame.tcl
+++ b/lib/blame.tcl
@@ -262,6 +262,9 @@ constructor new {i_commit i_path} {
$w.ctxm add command \
-label [mc "Show History Context"] \
-command [cb _gitkcommit]
+ $w.ctxm add command \
+ -label [mc "Blame Parent Commit"] \
+ -command [cb _blameparent]
foreach i $w_columns {
for {set g 0} {$g < [llength $group_colors]} {incr g} {
@@ -790,19 +793,27 @@ method _load_commit {cur_w cur_d pos} {
set lno [lindex [split [$cur_w index $pos] .] 0]
set dat [lindex $line_data $lno]
if {$dat ne {}} {
- lappend history [list \
- $commit $path \
- $highlight_column \
- $highlight_line \
- [lindex [$w_file xview] 0] \
- [lindex [$w_file yview] 0] \
- ]
- set commit [lindex $dat 0]
- set path [lindex $dat 1]
- _load $this [list [lindex $dat 2]]
+ _load_new_commit $this \
+ [lindex $dat 0] \
+ [lindex $dat 1] \
+ [list [lindex $dat 2]]
}
}
+method _load_new_commit {new_commit new_path jump} {
+ lappend history [list \
+ $commit $path \
+ $highlight_column \
+ $highlight_line \
+ [lindex [$w_file xview] 0] \
+ [lindex [$w_file yview] 0] \
+ ]
+
+ set commit $new_commit
+ set path $new_path
+ _load $this $jump
+}
+
method _showcommit {cur_w lno} {
global repo_config
variable active_color
@@ -969,6 +980,23 @@ method _gitkcommit {} {
}
}
+method _blameparent {} {
+ set dat [_get_click_amov_info $this]
+ if {$dat ne {}} {
+ set cmit [lindex $dat 0]
+
+ if {[catch {set cparent [git rev-parse --verify "$cmit^"]}]} {
+ error_popup [strcat [mc "Cannot find parent commit:"] "\n\n$err"]
+ return;
+ }
+
+ _load_new_commit $this \
+ $cparent \
+ [lindex $dat 1] \
+ [list [lindex $dat 2]]
+ }
+}
+
method _show_tooltip {cur_w pos} {
if {$tooltip_wm ne {}} {
_open_tooltip $this $cur_w