[RFC PATCH] gitk: showing onging merge as such
From: Yann Dirson <hidden>
Date: 2016-06-15 22:46:43
Subsystem:
the rest · Maintainer:
Linus Torvalds
While resolving a conflicted merge, I wondered if there was any reason why gitk does not show that we are indeed doing a merge, by showing the staged contents as a merge commit if MERGE_HEAD is found. Is there any reason why we would not do this ? I had a quick try at how this could be done, here it is. The diff is not yet displayed as combined.
I'm lucky I did not advertise the patch yet as being right below :)
From e3f3d8e04a05dfc5961671ab36bbd0541a03433b Mon Sep 17 00:00:00 2001
From: Yann Dirson <redacted> Date: Thu, 7 May 2009 13:44:54 +0200 Subject: [PATCH] gitk: crude addition of ongoing merge. --- gitk-git/gitk | 50 ++++++++++++++++++++++++++++++-------------------- 1 files changed, 30 insertions(+), 20 deletions(-)
diff --git a/gitk-git/gitk b/gitk-git/gitk
index 1a7887b..863dde2 100644
--- a/gitk-git/gitk
+++ b/gitk-git/gitk@@ -918,29 +918,31 @@ proc insertrow {id p v} { } } -proc insertfakerow {id p} { +proc insertfakerow {id pl} { global varcid varccommits parents children cmitlisted global commitidx varctok vtokmod targetid targetrow curview numcommits set v $curview - set a $varcid($v,$p) - set i [lsearch -exact $varccommits($v,$a) $p] - if {$i < 0} { - puts "oops: insertfakerow can't find [shortids $p] on arc $a" - return - } set children($v,$id) {} - set parents($v,$id) [list $p] - set varcid($v,$id) $a - lappend children($v,$p) $id + set parents($v,$id) $pl set cmitlisted($v,$id) 1 set numcommits [incr commitidx($v)] - # note we deliberately don't update varcstart($v) even if $i == 0 - set varccommits($v,$a) [linsert $varccommits($v,$a) $i $id] - modify_arc $v $a $i - if {[info exists targetid]} { - if {![comes_before $targetid $p]} { - incr targetrow + foreach p $pl { + set a $varcid($v,$p) + set i [lsearch -exact $varccommits($v,$a) $p] + if {$i < 0} { + puts "oops: insertfakerow can't find [shortids $p] on arc $a" + return + } + set varcid($v,$id) $a + lappend children($v,$p) $id + # note we deliberately don't update varcstart($v) even if $i == 0 + set varccommits($v,$a) [linsert $varccommits($v,$a) $i $id] + modify_arc $v $a $i + if {[info exists targetid]} { + if {![comes_before $targetid $p]} { + incr targetrow + } } } setcanvscroll
@@ -4595,7 +4597,6 @@ proc ntimes {n o} { proc ordertoken {id} { global ordertok curview varcid varcstart varctok curview parents
children
- global nullid nullid2
if {[info exists ordertok($id)]} {
return $ordertok($id)@@ -4811,7 +4812,7 @@ proc dodiffindex {} { proc readdiffindex {fd serial inst} { global viewmainheadid nullid nullid2 curview commitinfo commitdata
lserial
- global vfilelimit
+ global vfilelimit gitdir
set isdiff 1
if {[gets $fd line] < 0} {@@ -4838,14 +4839,23 @@ proc readdiffindex {fd serial inst} { filerun $fd [list readdifffiles $fd $serial $i] if {$isdiff && ![commitinview $nullid2 $curview]} { + set heads [list] # add the line for the changes in the index to the graph set hl [mc "Local changes checked in to index but not committed"] + if {[catch { + # get the last line from .git/MERGE_HEAD + set f [open [file join $gitdir MERGE_HEAD] r] + set heads [lrange [split [read $f] "\n"] 0 end-1] + close $f + } err]} { + #error_popup "This is NO merge" + } set commitinfo($nullid2) [list $hl {} {} {} {} " $hl\n"] set commitdata($nullid2) "\n $hl\n" if {[commitinview $nullid $curview]} { removefakerow $nullid } - insertfakerow $nullid2 $viewmainheadid($curview) + insertfakerow $nullid2 [concat $viewmainheadid($curview) $heads] } elseif {!$isdiff && [commitinview $nullid2 $curview]} { if {[commitinview $nullid $curview]} { removefakerow $nullid
@@ -4883,7 +4893,7 @@ proc readdifffiles {fd serial inst} { } else { set p $viewmainheadid($curview) } - insertfakerow $nullid $p + insertfakerow $nullid [list $p] } elseif {!$isdiff && [commitinview $nullid $curview]} { removefakerow $nullid }
--
1.6.3.rc3