git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Show patch in gitk --first-parent ?
@ 2013-10-30 12:39 Karl Wiberg
  2013-10-30 14:30 ` Stefan Haller
  2013-10-30 17:55 ` Show patch in gitk --first-parent ? Andreas Schwab
  0 siblings, 2 replies; 6+ messages in thread
From: Karl Wiberg @ 2013-10-30 12:39 UTC (permalink / raw)
  To: Git Mailing List

Hi all,

With "gitk --first-parent", I get a graph that only follows the first
parent of every merge---perfect if you always merge topic branches
into the main branch. However, the diff shown is still the normal
merge diff, and not the diff between the new tree and the first
parent's tree---is it possible to make it do that instead?

(With "git log --first-parent -p -m", I get precisely the diffs I
want, but everything is fully expanded so it's hard to navigate.)

-- 
Karl Wiberg, kha@treskal.com
   subrabbit.wordpress.com
   www.treskal.com/kalle

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Show patch in gitk --first-parent ?
  2013-10-30 12:39 Show patch in gitk --first-parent ? Karl Wiberg
@ 2013-10-30 14:30 ` Stefan Haller
  2013-10-30 17:10   ` Karl Wiberg
  2013-10-30 17:55 ` Show patch in gitk --first-parent ? Andreas Schwab
  1 sibling, 1 reply; 6+ messages in thread
From: Stefan Haller @ 2013-10-30 14:30 UTC (permalink / raw)
  To: Karl Wiberg, Git Mailing List; +Cc: Paul Mackerras, Jonathan Nieder

Karl Wiberg <kha@treskal.com> wrote:

> With "gitk --first-parent", I get a graph that only follows the first
> parent of every merge---perfect if you always merge topic branches
> into the main branch. However, the diff shown is still the normal
> merge diff, and not the diff between the new tree and the first
> parent's tree---is it possible to make it do that instead?

I once posted a patch that adds a "First parent" checkbox to gitk's
window: <http://comments.gmane.org/gmane.comp.version-control.git/160920>

The patch no longer applies today, but I can send an updated version that
does, if there's interest.

The topic didn't go anywhere for two reasons:

1) There's the confusion about history traversal option (the existing
--first-parent command-line option) versus diff option (the new check
box); they have similar names, but control different things (and it
should be possible to control these independently).

2) Space is short in the diff pane; you need to make the window rather
wide to see them all.

I didn't have the energy to drive these to a resolution back then; if you
could do that, it would be great. Personally I'm using my own gitk with
my patch applied, and I do use the "First parent" checkbox rather often.


-- 
Stefan Haller
Berlin, Germany
http://www.haller-berlin.de/

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Show patch in gitk --first-parent ?
  2013-10-30 14:30 ` Stefan Haller
@ 2013-10-30 17:10   ` Karl Wiberg
  2013-10-31 14:59     ` [PATCH] gitk: Add "First parent" checkbox Stefan Haller
  0 siblings, 1 reply; 6+ messages in thread
From: Karl Wiberg @ 2013-10-30 17:10 UTC (permalink / raw)
  To: Stefan Haller; +Cc: Git Mailing List, Paul Mackerras, Jonathan Nieder

On Wed, Oct 30, 2013 at 3:30 PM, Stefan Haller <lists@haller-berlin.de> wrote:

> I once posted a patch that adds a "First parent" checkbox to gitk's
> window:
> <http://comments.gmane.org/gmane.comp.version-control.git/160920>
>
> The patch no longer applies today, but I can send an updated version
> that does, if there's interest.

Please do. I don't have the time to attempt to drive inclusion of the
patch (I'd have to start by reading up on tcl and gitk), but if you
have a patch ready, I'd like to try it.

> The topic didn't go anywhere for two reasons:
>
> 1) There's the confusion about history traversal option (the
> existing --first-parent command-line option) versus diff option (the
> new check box); they have similar names, but control different
> things (and it should be possible to control these independently).
>
> 2) Space is short in the diff pane; you need to make the window
> rather wide to see them all.
>
> I didn't have the energy to drive these to a resolution back then;
> if you could do that, it would be great. Personally I'm using my own
> gitk with my patch applied, and I do use the "First parent" checkbox
> rather often.

Hmmm, I wonder... a related feature I'd like to have is to see the
combined diff of two or more commits. I guess the fully general form
of this is to allow the user to select one "after" commit and zero or
more "before" commits, and then present the resulting diff.

For example, when the user clicks on the shortlog of a commit, gitk
could automatically select its parents (by painting their dots in the
DAG differently, say). The user could then click on any commit dot in
the dag to toggle it between being included in and excluded from the
"before" set. (A simpler variant would be to limit the "before" set to
exactly one commit as soon as the user changes it at all.)

As I said, I don't have time to do this myself; I just thought I'd
toss the idea out there, since good ideas are so scarce and competent
programmers with free time on their hands are so plentiful.

-- 
Karl Wiberg, kha@treskal.com
   subrabbit.wordpress.com
   www.treskal.com/kalle

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Show patch in gitk --first-parent ?
  2013-10-30 12:39 Show patch in gitk --first-parent ? Karl Wiberg
  2013-10-30 14:30 ` Stefan Haller
@ 2013-10-30 17:55 ` Andreas Schwab
  2013-10-31 10:10   ` Karl Wiberg
  1 sibling, 1 reply; 6+ messages in thread
From: Andreas Schwab @ 2013-10-30 17:55 UTC (permalink / raw)
  To: Karl Wiberg; +Cc: Git Mailing List

Karl Wiberg <kha@treskal.com> writes:

> With "gitk --first-parent", I get a graph that only follows the first
> parent of every merge---perfect if you always merge topic branches
> into the main branch. However, the diff shown is still the normal
> merge diff, and not the diff between the new tree and the first
> parent's tree---is it possible to make it do that instead?

While not automatic, you can right click on the parent and select
Diff this->selected.

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Show patch in gitk --first-parent ?
  2013-10-30 17:55 ` Show patch in gitk --first-parent ? Andreas Schwab
@ 2013-10-31 10:10   ` Karl Wiberg
  0 siblings, 0 replies; 6+ messages in thread
From: Karl Wiberg @ 2013-10-31 10:10 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: Git Mailing List

On Wed, Oct 30, 2013 at 6:55 PM, Andreas Schwab <schwab@linux-m68k.org> wrote:
> While not automatic, you can right click on the parent and select
> Diff this->selected.

And there's also the option to "mark" a commit, and diff this with
marked. Thanks, that's just what I needed (although as you say, it
isn't automatic).

-- 
Karl Wiberg, kha@treskal.com
   subrabbit.wordpress.com
   www.treskal.com/kalle

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH] gitk: Add "First parent" checkbox
  2013-10-30 17:10   ` Karl Wiberg
@ 2013-10-31 14:59     ` Stefan Haller
  0 siblings, 0 replies; 6+ messages in thread
From: Stefan Haller @ 2013-10-31 14:59 UTC (permalink / raw)
  To: Karl Wiberg; +Cc: git, Paul Mackerras, Jonathan Nieder

Sometimes it's desirable to see what changes were introduced by a
merge commit, rather than how conflicts were resolved. This adds
a checkbox which, when turned on, makes gitk show the equivalent
of "git show --first-parent <commit>" for merge commits.

Signed-off-by: Stefan Haller <stefan@haller-berlin.de>
---
This is the same patch as the one I sent in
<http://comments.gmane.org/gmane.comp.version-control.git/160920>, with
the same issues discussed in that thread. I just brought it up to date
with current master.

 gitk | 25 ++++++++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)

diff --git a/gitk b/gitk
index 5cd00d8..3466054 100755
--- a/gitk
+++ b/gitk
@@ -2336,6 +2336,10 @@ proc makewindow {} {
 	pack .bleft.mid.worddiff -side left -padx 5
     }

+    ${NS}::checkbutton .bleft.mid.firstparent -text [mc "First parent"] \
+	-command changefirstparent -variable firstparent
+    pack .bleft.mid.firstparent -side left -padx 5
+
     set ctext .bleft.bottom.ctext
     text $ctext -background $bgcolor -foreground $fgcolor \
 	-state disabled -font textfont \
@@ -7080,6 +7084,7 @@ proc selectline {l isnew {desired_loc {}}} {
     global cmitmode showneartags allcommits
     global targetrow targetid lastscrollrows
     global autoselect autosellen jump_to_here
+    global firstparent

     catch {unset pending_select}
     $canv delete hover
@@ -7221,7 +7226,7 @@ proc selectline {l isnew {desired_loc {}}} {
     init_flist [mc "Comments"]
     if {$cmitmode eq "tree"} {
 	gettree $id
-    } elseif {[llength $olds] <= 1} {
+    } elseif {[llength $olds] <= 1 || $firstparent} {
 	startdiff $id
     } else {
 	mergediff $id
@@ -7624,7 +7629,7 @@ proc diffcmd {ids flags} {
 proc gettreediffs {ids} {
     global treediff treepending limitdiffs vfilelimit curview

-    set cmd [diffcmd $ids {--no-commit-id}]
+    set cmd [diffcmd $ids {--no-commit-id -m --first-parent}]
     if {$limitdiffs && $vfilelimit($curview) ne {}} {
 	    set cmd [concat $cmd -- $vfilelimit($curview)]
     }
@@ -7710,12 +7715,20 @@ proc changeworddiff {name ix op} {
     reselectline
 }

+proc changefirstparent {} {
+    global treediffs
+    catch {unset treediffs}
+
+    reselectline
+}
+
 proc getblobdiffs {ids} {
     global blobdifffd diffids env
     global diffinhdr treediffs
     global diffcontext
     global ignorespace
     global worddiff
+    global firstparent
     global limitdiffs vfilelimit curview
     global diffencoding targetline diffnparents
     global git_version currdiffsubmod
@@ -7728,13 +7741,18 @@ proc getblobdiffs {ids} {
     if {[package vcompare $git_version "1.6.6"] >= 0} {
 	set submodule "--submodule"
     }
-    set cmd [diffcmd $ids "-p $textconv $submodule  -C --cc --no-commit-id -U$diffcontext"]
+    set cmd [diffcmd $ids "-p $textconv $submodule  -C --no-commit-id -U$diffcontext"]
     if {$ignorespace} {
 	append cmd " -w"
     }
     if {$worddiff ne [mc "Line diff"]} {
 	append cmd " --word-diff=porcelain"
     }
+    if {$firstparent} {
+	append cmd " -m --first-parent"
+    } else {
+	append cmd " --cc"
+    }
     if {$limitdiffs && $vfilelimit($curview) ne {}} {
 	set cmd [concat $cmd -- $vfilelimit($curview)]
     }
@@ -11865,6 +11883,7 @@ set diffcontext 3
 set mergecolors {red blue green purple brown "#009090" magenta "#808000" "#009000" "#ff0080" cyan "#b07070" "#70b0f0" "#70f0b0" "#f0b070" "#ff70b0"}
 set ignorespace 0
 set worddiff ""
+set firstparent 0
 set markbgcolor "#e0e0ff"

 set headbgcolor green
--
1.8.3.2.747.g15edaa9

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2013-10-31 14:59 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-10-30 12:39 Show patch in gitk --first-parent ? Karl Wiberg
2013-10-30 14:30 ` Stefan Haller
2013-10-30 17:10   ` Karl Wiberg
2013-10-31 14:59     ` [PATCH] gitk: Add "First parent" checkbox Stefan Haller
2013-10-30 17:55 ` Show patch in gitk --first-parent ? Andreas Schwab
2013-10-31 10:10   ` Karl Wiberg

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).