From 8b19280930eba7d66549f64344a49b3641821046 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Sun, 7 Aug 2005 13:58:56 -0700 Subject: [PATCH] gitk "parent information" in commit window This adds a useful "Parent:" line to the git commit information window. It looks something like this (from the infamous octopus merge): Author: Junio C Hamano 2005-05-05 16:16:54 Committer: Junio C Hamano 2005-05-05 16:16:54 Parent: fc54a9c30ccad3fde5890d2c0ca2e2acc0848fbc (Update git-apply-patch-script ...) Parent: 9e30dd7c0ecc9f10372f31539d0122db97418353 (Make git-prune-script executa ...) Parent: c4b83e618f1df7d8ecc9392fa40e5bebccbe6b5a (Do not write out new index if ...) Parent: 660265909fc178581ef327076716dfd3550e6e7b (diff-cache shows differences ...) Parent: b28858bf65d4fd6d8bb070865518ec43817fe7f3 (Update diff engine for symlin ...) Octopus merge of the following five patches. Update git-apply-patch-script for symbolic links. Make git-prune-script executable again. Do not write out new index if nothing has changed. diff-cache shows differences for unmerged paths without --cache. Update diff engine for symlinks stored in the cache. Signed-off-by: Junio C Hamano where all the parent commit ID's are clickable, because the new lines are added as part of the "comment" string, and thus the regular clickability thing will match them automatically. I think this is good. And my random-tcl-monkey-skills are clearly getting better (although it's perfectly possible that somebody who actually knows what he is doing would have done things differently). Signed-off-by: Linus Torvalds Signed-off-by: Paul Mackerras --- gitk | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/gitk b/gitk index e21d7a28f1..7a0d766ee1 100755 --- a/gitk +++ b/gitk @@ -1799,9 +1799,21 @@ proc selectline {l isnew} { } $ctext insert end "\n" } - $ctext insert end "\n" + set commentstart [$ctext index "end - 1c"] - set comment [lindex $info 5] + set comment {} + foreach p $parents($id) { + set l "..." + if {[info exists commitinfo($p)]} { + set l [lindex $commitinfo($p) 0] + if {[string length $l] > 32} { + set l "[string range $l 0 28] ..." + } + } + append comment "Parent: $p ($l)\n" + } + append comment "\n" + append comment [lindex $info 5] $ctext insert end $comment $ctext insert end "\n" -- cgit v1.2.3 From fa4da7b32e1197fa5032db6a2de7749868253f8b Mon Sep 17 00:00:00 2001 From: Paul Mackerras Date: Mon, 8 Aug 2005 09:47:22 +1000 Subject: Better graph line details display and expand history coverage. Now the history remembers when we have clicked on a graph line and when we have asked for a diff between two commits, as well as when we have displayed a commit. The display when you click on a graph line now uses clickable SHA1 IDs instead of the embedded "Go" buttons. Also made the IDs clickable in the header for a diff between two commits. --- gitk | 117 ++++++++++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 78 insertions(+), 39 deletions(-) diff --git a/gitk b/gitk index 7a0d766ee1..edf94bf4c4 100755 --- a/gitk +++ b/gitk @@ -715,7 +715,7 @@ proc bindline {t id} { $canv bind $t "lineenter %x %y $id" $canv bind $t "linemotion %x %y $id" $canv bind $t "lineleave $id" - $canv bind $t "lineclick %x %y $id" + $canv bind $t "lineclick %x %y $id 1" } proc drawcommitline {level} { @@ -1687,7 +1687,7 @@ proc unmarkmatches {} { } proc selcanvline {w x y} { - global canv canvy0 ctext linespc selectedline + global canv canvy0 ctext linespc global lineid linehtag linentag linedtag rowtextx set ymax [lindex [$canv cget -scrollregion] 3] if {$ymax == {}} return @@ -1710,7 +1710,6 @@ proc selectline {l isnew} { global canvy0 linespc parents nparents global cflist currentid sha1entry global commentend idtags idline - global history historyindex $canv delete hover if {![info exists lineid($l)] || ![info exists linehtag($l)]} return @@ -1761,19 +1760,8 @@ proc selectline {l isnew} { allcanvs yview moveto [expr $newtop * 1.0 / $ymax] } - if {$isnew && (![info exists selectedline] || $selectedline != $l)} { - if {$historyindex < [llength $history]} { - set history [lreplace $history $historyindex end $l] - } else { - lappend history $l - } - incr historyindex - if {$historyindex > 1} { - .ctop.top.bar.leftbut conf -state normal - } else { - .ctop.top.bar.leftbut conf -state disabled - } - .ctop.top.bar.rightbut conf -state disabled + if {$isnew} { + addtohistory [list selectline $l 0] } set selectedline $l @@ -1857,12 +1845,42 @@ proc selnextline {dir} { selectline $l 1 } +proc unselectline {} { + global selectedline + + catch {unset selectedline} + allcanvs delete secsel +} + +proc addtohistory {cmd} { + global history historyindex + + if {$historyindex > 0 + && [lindex $history [expr {$historyindex - 1}]] == $cmd} { + return + } + + if {$historyindex < [llength $history]} { + set history [lreplace $history $historyindex end $cmd] + } else { + lappend history $cmd + } + incr historyindex + if {$historyindex > 1} { + .ctop.top.bar.leftbut conf -state normal + } else { + .ctop.top.bar.leftbut conf -state disabled + } + .ctop.top.bar.rightbut conf -state disabled +} + proc goback {} { global history historyindex if {$historyindex > 1} { incr historyindex -1 - selectline [lindex $history [expr {$historyindex - 1}]] 0 + set cmd [lindex $history [expr {$historyindex - 1}]] + eval $cmd .ctop.top.bar.rightbut conf -state normal } if {$historyindex <= 1} { @@ -1874,9 +1892,9 @@ proc goforw {} { global history historyindex if {$historyindex < [llength $history]} { - set l [lindex $history $historyindex] + set cmd [lindex $history $historyindex] incr historyindex - selectline $l 0 + eval $cmd .ctop.top.bar.leftbut conf -state normal } if {$historyindex >= [llength $history]} { @@ -2624,7 +2642,7 @@ proc setcoords {} { } proc redisplay {} { - global selectedline stopped redisplaying phase + global stopped redisplaying phase if {$stopped > 1} return if {$phase == "getcommits"} return set redisplaying 1 @@ -2636,7 +2654,7 @@ proc redisplay {} { } proc incrfont {inc} { - global mainfont namefont textfont selectedline ctext canv phase + global mainfont namefont textfont ctext canv phase global stopped entries unmarkmatches set mainfont [lreplace $mainfont 1 1 [expr {[lindex $mainfont 1] + $inc}]] @@ -2778,34 +2796,40 @@ proc linehover {} { $canv raise $t } -proc lineclick {x y id} { +proc lineclick {x y id isnew} { global ctext commitinfo children cflist canv unmarkmatches + unselectline + if {$isnew} { + addtohistory [list lineclick $x $x $id 0] + } $canv delete hover # fill the details pane with info about this line $ctext conf -state normal $ctext delete 0.0 end - $ctext insert end "Parent:\n " - catch {destroy $ctext.$id} - button $ctext.$id -text "Go:" -command "selbyid $id" \ - -padx 4 -pady 0 - $ctext window create end -window $ctext.$id -align center + $ctext tag conf link -foreground blue -underline 1 + $ctext tag bind link { %W configure -cursor hand2 } + $ctext tag bind link { %W configure -cursor $curtextcursor } + $ctext insert end "Parent:\t" + $ctext insert end $id [list link link0] + $ctext tag bind link0 <1> [list selbyid $id] set info $commitinfo($id) - $ctext insert end "\t[lindex $info 0]\n" + $ctext insert end "\n\t[lindex $info 0]\n" $ctext insert end "\tAuthor:\t[lindex $info 1]\n" $ctext insert end "\tDate:\t[lindex $info 2]\n" - $ctext insert end "\tID:\t$id\n" if {[info exists children($id)]} { $ctext insert end "\nChildren:" + set i 0 foreach child $children($id) { - $ctext insert end "\n " - catch {destroy $ctext.$child} - button $ctext.$child -text "Go:" -command "selbyid $child" \ - -padx 4 -pady 0 - $ctext window create end -window $ctext.$child -align center + incr i set info $commitinfo($child) - $ctext insert end "\t[lindex $info 0]" + $ctext insert end "\n\t" + $ctext insert end $child [list link link$i] + $ctext tag bind link$i <1> [list selbyid $child] + $ctext insert end "\n\t[lindex $info 0]" + $ctext insert end "\n\tAuthor:\t[lindex $info 1]" + $ctext insert end "\n\tDate:\t[lindex $info 2]\n" } } $ctext conf -state disabled @@ -2845,8 +2869,6 @@ proc rowmenu {x y id} { proc diffvssel {dirn} { global rowmenuid selectedline lineid - global ctext cflist - global commitinfo if {![info exists selectedline]} return if {$dirn} { @@ -2856,15 +2878,32 @@ proc diffvssel {dirn} { set oldid $rowmenuid set newid $lineid($selectedline) } + addtohistory [list doseldiff $oldid $newid] + doseldiff $oldid $newid +} + +proc doseldiff {oldid newid} { + global ctext cflist + global commitinfo + $ctext conf -state normal $ctext delete 0.0 end $ctext mark set fmark.0 0.0 $ctext mark gravity fmark.0 left $cflist delete 0 end $cflist insert end "Top" - $ctext insert end "From $oldid\n " + $ctext insert end "From " + $ctext tag conf link -foreground blue -underline 1 + $ctext tag bind link { %W configure -cursor hand2 } + $ctext tag bind link { %W configure -cursor $curtextcursor } + $ctext tag bind link0 <1> [list selbyid $oldid] + $ctext insert end $oldid [list link link0] + $ctext insert end "\n " $ctext insert end [lindex $commitinfo($oldid) 0] - $ctext insert end "\n\nTo $newid\n " + $ctext insert end "\n\nTo " + $ctext tag bind link1 <1> [list selbyid $newid] + $ctext insert end $newid [list link link1] + $ctext insert end "\n " $ctext insert end [lindex $commitinfo($newid) 0] $ctext insert end "\n" $ctext conf -state disabled -- cgit v1.2.3