On Sat, 5 May 2007, Linus Torvalds wrote: > > (It also shows that my "gitk" patch was incorrectly getting the commit > name from character 6 onward, even though it should have been 7, but I'll > also try to make gitk understand the "<" and ">" markers, and make it > possible to say > > gitk --left-right a...b > > and have the commits colored appropriately. That would be cool, but it > might need more tcl/tk knowledge than I actually possess). Ok, that turned out to be the case. Here's an updated patch to gitk, which at least *parses* the "--left-right" data properly, it just doesn't use it. But with the fix to "git log" I just posted, and this, you at least have the same capabilities gitk used to have, and it should be fairly easy for somebody who knows tcltk to squirrel away the "leftright" data per commit and use that to color the commit lines in the top-most pane. I'm also sure the "if first character is one of '-'/'<'/'>'" test can be written more prettily, rather than have three if-statements on it. Finally, it realy _should_ check that the first 7 characters of the commit log (the ones it ignores by just asking for substring 7..) are actually the exact characters "commit ", but I'll blame my lack of comfort with the language again. Somebody? Please? It really should be pretty cool. Do gitk --left-right commit^1...commit^2 for an appropriate 'commit' that is a merge, and the two sides getting merged should show up with different colors! Linus ---- gitk | 18 ++++++++++++++---- 1 files changed, 14 insertions(+), 4 deletions(-) diff --git a/gitk b/gitk index b1c65d7..0bf00ee 100755 --- a/gitk +++ b/gitk @@ -33,8 +33,8 @@ proc start_rev_list {view} { set order "--date-order" } if {[catch { - set fd [open [concat | git rev-list --header $order \ - --parents --boundary --default HEAD $args] r] + set fd [open [concat | git log -z --pretty=raw $order \ + --parents --boundary $args] r] } err]} { puts stderr "Error executing git rev-list: $err" exit 1 @@ -127,13 +127,23 @@ proc getcommitlines {fd view} { set start [expr {$i + 1}] set j [string first "\n" $cmit] set ok 0 + set leftright 0 set listed 1 if {$j >= 0} { - set ids [string range $cmit 0 [expr {$j - 1}]] + # start with 'commit ' + set ids [string range $cmit 7 [expr {$j - 1}]] if {[string range $ids 0 0] == "-"} { set listed 0 set ids [string range $ids 1 end] } + if {[string range $ids 0 0] == "<"} { + set leftright -1 + set ids [string range $ids 1 end] + } + if {[string range $ids 0 0] == ">"} { + set leftright 1 + set ids [string range $ids 1 end] + } set ok 1 foreach id $ids { if {[string length $id] != 40} { @@ -147,7 +157,7 @@ proc getcommitlines {fd view} { if {[string length $shortcmit] > 80} { set shortcmit "[string range $shortcmit 0 80]..." } - error_popup "Can't parse git rev-list output: {$shortcmit}" + error_popup "Can't parse git git log output: {$shortcmit}" exit 1 } set id [lindex $ids 0] - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html