* [RFC/PATCH] gitk: Visualize a merge commit with a right-click in gitk
@ 2012-12-30 0:16 Jason Holden
2012-12-31 4:27 ` Paul Mackerras
0 siblings, 1 reply; 3+ messages in thread
From: Jason Holden @ 2012-12-30 0:16 UTC (permalink / raw)
To: git; +Cc: paulus, Jason Holden
When first doing a merge in git-gui, the "Visualize Merge" button is
quite helpful to visualize the changes due to a merge.
But once the merge is complete, there's not a similarly convenient
way to recreate that merge view in gitk.
This commit adds to gitk the ability to right-click on a merge commit and
bring up a new gitk window displaying only those commits involved in
the merge.
When right-clicking on a non-merge commit, this option is grayed out. This
patch also supports correct visualization of octopus merges
Signed-off-by: Jason Holden <jason.k.holden.swdev@gmail.com>
---
gitk | 33 +++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/gitk b/gitk
index 379582a..17e1fcb 100755
--- a/gitk
+++ b/gitk
@@ -2551,6 +2551,7 @@ proc makewindow {} {
{mc "Compare with marked commit" command compare_commits}
{mc "Diff this -> marked commit" command {diffvsmark 0}}
{mc "Diff marked commit -> this" command {diffvsmark 1}}
+ {mc "Visualize this merge" command visualize_merge}
}
$rowctxmenu configure -tearoff 0
@@ -2590,6 +2591,31 @@ proc makewindow {} {
$diff_menu configure -tearoff 0
}
+# Return the number of parents for a given sha1 id
+proc get_numparents_from_id {id} {
+ global parentlist
+ set row [rowofcommit $id]
+ return [llength [lindex $parentlist $row]]
+}
+
+proc visualize_merge {} {
+ global parents currentid parentlist
+ global rowmenuid
+
+ set num_parents [get_numparents_from_id $rowmenuid]
+ set row [rowofcommit $rowmenuid]
+
+ if {$num_parents >= 2} {
+ set revlist $rowmenuid
+ for { set i 1 } {$i < $num_parents} {incr i} {
+
+ set revlist "$revlist [lindex $parentlist $row 0]..[lindex $parentlist $row $i] $rowmenuid"
+ }
+
+ eval exec gitk $revlist
+ }
+}
+
# Windows sends all mouse wheel events to the current focused window, not
# the one where the mouse hovers, so bind those events here and redirect
# to the correct window
@@ -8577,6 +8603,13 @@ proc rowmenu {x y id} {
$menu entryconfigure 9 -state $mstate
$menu entryconfigure 10 -state $mstate
$menu entryconfigure 11 -state $mstate
+
+ # Disable visualize-merge on only one parent
+ if {[get_numparents_from_id $id] == 1} {
+ $menu entryconfigure 15 -state disabled
+ } else {
+ $menu entryconfigure 15 -state normal
+ }
} else {
set menu $fakerowmenu
}
--
1.8.1.rc3.28.g0ab5d1f
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [RFC/PATCH] gitk: Visualize a merge commit with a right-click in gitk
2012-12-30 0:16 [RFC/PATCH] gitk: Visualize a merge commit with a right-click in gitk Jason Holden
@ 2012-12-31 4:27 ` Paul Mackerras
2012-12-31 18:46 ` Jason Holden
0 siblings, 1 reply; 3+ messages in thread
From: Paul Mackerras @ 2012-12-31 4:27 UTC (permalink / raw)
To: Jason Holden; +Cc: git
On Sat, Dec 29, 2012 at 07:16:16PM -0500, Jason Holden wrote:
> When first doing a merge in git-gui, the "Visualize Merge" button is
> quite helpful to visualize the changes due to a merge.
> But once the merge is complete, there's not a similarly convenient
> way to recreate that merge view in gitk.
>
> This commit adds to gitk the ability to right-click on a merge commit and
> bring up a new gitk window displaying only those commits involved in
> the merge.
>
> When right-clicking on a non-merge commit, this option is grayed out. This
> patch also supports correct visualization of octopus merges
Thanks for the patch. I have a couple of comments about it. First,
the exec command waits for the process to complete, which means that
the initial gitk GUI will be unresponsive until the user quits the
gitk window showing the merge, which could be quite confusing for the
user.
Secondly, gitk already has support for showing multiple views of a
repository, that is, different subsets of the commits. Wouldn't it be
much better to have your new menu item simply create a new view
showing the merge, rather than creating a whole new window?
Paul.
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [RFC/PATCH] gitk: Visualize a merge commit with a right-click in gitk
2012-12-31 4:27 ` Paul Mackerras
@ 2012-12-31 18:46 ` Jason Holden
0 siblings, 0 replies; 3+ messages in thread
From: Jason Holden @ 2012-12-31 18:46 UTC (permalink / raw)
To: git
On Mon, Dec 31, 2012 at 03:27:36PM +1100, Paul Mackerras wrote:
>
> Thanks for the patch. I have a couple of comments about it. First,
> the exec command waits for the process to complete, which means that
> the initial gitk GUI will be unresponsive until the user quits the
> gitk window showing the merge, which could be quite confusing for the
> user.
Good catch. Adding an ampersand on to the exec looks like it fixes
the unresponsiveness. Any issues with that approach?
>
> Secondly, gitk already has support for showing multiple views of a
> repository, that is, different subsets of the commits. Wouldn't it be
> much better to have your new menu item simply create a new view
> showing the merge, rather than creating a whole new window?
I've found when using this feature that I tend to use it in a stack-like
fashion. I tend to want to "push" a merge-view onto the stack, investigate
that view of history for a bit, then "pop" back to my old view. But
you're correct that you can end up with a lot of windows pretty quick.
Any support for stack-like views in the current gui that I missed?
I've got another feature brewing, similiar to the merge-view, where you can
right-click on a file and a new window pops up with the history of just that
file. I tend to use that feature in a stack-like fashion as well.
Maybe the seperate-window/new-view-in-same-window should be a new user
preference?
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-12-31 18:46 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-12-30 0:16 [RFC/PATCH] gitk: Visualize a merge commit with a right-click in gitk Jason Holden
2012-12-31 4:27 ` Paul Mackerras
2012-12-31 18:46 ` Jason Holden
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).