git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jeff King <peff@peff.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: Thomas Rast <trast@student.ethz.ch>,
	Jonathan Nieder <jrnieder@gmail.com>,
	Shawn Pearce <spearce@spearce.org>,
	Ramkumar Ramachandra <artagnon@gmail.com>,
	Jens Lehmann <Jens.Lehmann@web.de>,
	Christian Couder <chriscool@tuxfamily.org>,
	git <git@vger.kernel.org>
Subject: Re: Summer of Code project ideas due this Friday
Date: Thu, 10 Mar 2011 16:42:06 -0500	[thread overview]
Message-ID: <20110310214206.GA15828@sigill.intra.peff.net> (raw)
In-Reply-To: <7vtyfa3ddm.fsf@alter.siamese.dyndns.org>

On Thu, Mar 10, 2011 at 12:54:29PM -0800, Junio C Hamano wrote:

> Forgetting for now the implementation, I _think_ what you would want is
> for "git add -p" to notice that you are resolving conflicts, and do not
> bother you about cleanly merged parts (I take it is a given that you would
> always want to add them to the index without even inspecting when running
> "add -p"), and make the per-hunk selection loop ask only about the parts
> that originally had conflicts.

Yes, I don't want to see cleanly merged parts. And "--cc" already does
what I want by not showing them. But of course they still need to be
added to the index.

So my thinking was more along the lines of:

  1. Get "git diff HEAD file" and store its hunks.

  2. Get "git diff --cc file" and stores its hunks.

  3. For each hunk in (1), if it does not have an analagous hunk in (2),
     mark it for staging without asking the user.

  4. For the remaining hunks in (1), show the user the analagous --cc
     hunk from (2), and mark the hunk from (1) for staging if requested.

  5. Create the final patch from the marked hunks, apply it to
     HEAD:file, and put that in the index.

There are two issues (and I think you know this, but it took me
reasoning out why this wouldn't work to quite understand what you were
saying in your email, so I'll elaborate here for the benefit of other
readers):

  a. Step (3) glosses over the definition of "analagous hunk". In simple
     cases the hunk headers match up (i.e., they start at the same
     offsets). But the --cc diff is actually a diff against the merge
     base, and the diff in step (1) is against HEAD. So actually we
     would want step (1) and (5) to deal not with the file in HEAD, but
     the file in the merge-base.

     Or we can use "-c" in the first place, which gives us interesting
     and uninteresting parts, and then suppress the uninteresting ones.

  b. You can't stage part of a resolution. This is the "adding a path
     collapses stages to #0" that you mentioned. So either you need an
     index extension, or you need to make it all-or-nothing.

> [discussion of how this could be done right]

That description makes sense to me, but is way overkill for my workflow.
I think at its simplest, what I would like is to be shown the entire
--cc diff, have it say "do you want this and all of the cleanly merged
bits added?" and then either stage the whole thing or not.

Which really I could do with:

  for i in `git diff-files --name-only --diff-filter=U`; do
    git diff --cc $i
    echo 'OK?'
    read r
    test "$r" = y && git add $i
  done

It would just be a little nicer to have it integrated into the "git add
-p" loop.

Even though it is obviously a less featureful solution than what you
proposed, I am tempted to implement it anyway because the current
behavior is so bad (it shows the diff but doesn't consider it a
selectable hunk at all, so it just skips it, exiting immediately if
there are no other files).

And then if somebody wants to spend time allowing partial resolution
selection, it would be a nice improvement on top of that.

-Peff

  reply	other threads:[~2011-03-10 21:42 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-03 18:08 Google Summer of Code 2011 Shawn Pearce
2011-03-03 18:59 ` Jeff King
2011-03-03 19:04   ` Shawn Pearce
2011-03-03 20:33     ` Jeff King
2011-03-03 21:25       ` Jakub Narebski
2011-03-09 16:38         ` Jeff King
2011-03-09 16:39       ` Jeff King
2011-03-09 16:47         ` Shawn Pearce
2011-03-09 17:49       ` Jeff King
2011-03-09 17:52         ` Shawn Pearce
2011-03-09 21:58           ` Summer of Code project ideas due this Friday Jeff King
2011-03-10  0:10             ` Jonathan Nieder
2011-03-10 16:30               ` Jeff King
2011-03-10 17:31                 ` Shawn Pearce
2011-03-10 21:43                   ` Alexander Miseler
2011-03-10 17:15               ` Thomas Rast
2011-03-10 18:17                 ` Santi Béjar
2011-03-10 18:46                 ` Jeff King
2011-03-10 19:21                   ` Junio C Hamano
2011-03-10 19:28                     ` Jeff King
2011-03-10 20:54                       ` Junio C Hamano
2011-03-10 21:42                         ` Jeff King [this message]
2011-03-10 22:58                           ` Junio C Hamano
2011-03-10 23:09                             ` Jeff King
2011-03-11 13:31                   ` Thomas Rast
2011-03-10 17:39               ` Jakub Narebski
2011-03-11 13:28                 ` Thomas Rast
2011-03-12  0:20                 ` History surgery with fast-import (Re: Summer of Code project ideas due this Friday) Jonathan Nieder
2011-03-13 17:08               ` Summer of Code project ideas due this Friday Ramkumar Ramachandra
2011-03-10  0:19             ` Nguyen Thai Ngoc Duy
2011-03-10 16:31               ` Jeff King
2011-03-10 21:40             ` Alexander Miseler
2011-03-10 22:18               ` Jeff King
2011-03-11 14:17                 ` Alexander Miseler
2011-03-12 19:47                   ` Alexander Miseler
2011-03-11 12:18             ` Alexander Miseler
2011-03-11 12:52               ` Ilari Liusvaara
2011-03-11 13:48                 ` Nguyen Thai Ngoc Duy
2011-03-11 14:10                   ` Alexander Miseler
2011-03-11 14:27                     ` Nguyen Thai Ngoc Duy
2011-03-11 22:42                       ` Sam Vilain
2011-03-12 21:41                       ` Alexander Miseler
2011-03-11 12:43             ` Ævar Arnfjörð Bjarmason
2011-03-11 14:24               ` code.sculptor
2011-03-17 23:40             ` Summer of Code project ideas Jakub Narebski
2011-03-22 20:31               ` Heiko Voigt
2011-03-22 22:55               ` J.H.
2011-03-25  1:11               ` Pat Thoyts
2011-03-25 13:02                 ` Jakub Narebski
2011-03-03 21:04 ` Google Summer of Code 2011 Ramkumar Ramachandra
2011-03-03 22:08   ` Jonathan Nieder
2011-03-07 12:15   ` Sverre Rabbelier
2011-03-08 12:33     ` Ramkumar Ramachandra
2011-03-08 12:49       ` Sverre Rabbelier
2011-03-03 22:38 ` Jens Lehmann
2011-03-05  4:05 ` Christian Couder
2011-03-06 19:24 ` Sam Vilain
2011-03-07 19:40 ` Heiko Voigt
2011-03-07 20:50   ` Fredrik Gustafsson
2011-03-09 21:52     ` Heiko Voigt
2011-03-09 23:16       ` Fredrik Gustafsson
2011-03-10 22:46         ` Heiko Voigt
2011-03-09 15:18 ` Thomas Rast

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110310214206.GA15828@sigill.intra.peff.net \
    --to=peff@peff.net \
    --cc=Jens.Lehmann@web.de \
    --cc=artagnon@gmail.com \
    --cc=chriscool@tuxfamily.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jrnieder@gmail.com \
    --cc=spearce@spearce.org \
    --cc=trast@student.ethz.ch \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).