All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sam Vilain <sam@vilain.net>
To: Bryan Jacobs <bjacobs@woti.com>
Cc: git@vger.kernel.org, Eric Wong <normalperson@yhbt.net>
Subject: Re: [spf:guess,iffy] Re: [spf:guess,iffy] [PATCH] git-svn: teach git-svn to populate svn:mergeinfo
Date: Fri, 02 Sep 2011 12:01:09 -0700	[thread overview]
Message-ID: <4E6127F5.5070009@vilain.net> (raw)
In-Reply-To: <20110902144922.383ed0f1@robyn.woti.com>

On 9/2/11 11:49 AM, Bryan Jacobs wrote:
> I could do a pass through all the commits which are about to be sent
> out to SVN to check if this is going to happen, yes. But I think a
> better solution would be to change how the changes are replayed by
> git-svn dcommit: right now, all changes are applied to the WC, then it
> sequentially does an add+dcommit for each patch? Right? I think it might
> be better to reset --hard to the parent, then pick each change into the
> WC+index before committing. That way if you abort early, cleaning up
> just consists of rebasing the stack onto the last change you sent
> upstream.

That's one way to do it; in fact, if the trees match you don't need to 
do anything complicated like cherry-pick.

ie, say you're committing

    r1---A---B---C---D

and it blows up at

    r1--r2--r3--C---D

So long as the tree from the fetched r3 == the tree from B, then you can 
just go ahead and write out new commits for C and D without doing any 
merging (ie cherry-pick or rebase).  You could also put merge commits 
back the way they were, too.

If they don't match, then something went wrong with the push really, or 
there is something weird going on.  I'd try to avoid using cherry pick 
automatically in situations like this.  There are too many error modes, 
and if it only happens when you don't know what's going on, it's not a 
good idea to try to fix that.  If it /is/ a sufficiently unlikely error 
(ie, the trees not matching as above), then it would be better to simply 
bomb out and provide two commands:

* a 'git reset' command to restore to previous state (ie, before the 
dcommit)
* a 'git rebase' command to attempt to put the new history on top of the 
new upstream.  Rebase doesn't work with merges of course but it still 
should help the user figure out what to do.

Another benefit of this approach is that you don't need to muck with the 
WC + index at all, no matter what happens.

Sam

  reply	other threads:[~2011-09-02 19:01 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-02 18:07 [PATCH] git-svn: teach git-svn to populate svn:mergeinfo Bryan Jacobs
2011-09-02 18:40 ` [spf:guess,iffy] " Sam Vilain
2011-09-02 18:49   ` Bryan Jacobs
2011-09-02 19:01     ` Sam Vilain [this message]
2011-09-02 19:42       ` [spf:guess,iffy] " Bryan Jacobs
2011-09-02 21:30         ` Sam Vilain
2011-09-03  8:49           ` Eric Wong
2011-09-06 14:00             ` Bryan Jacobs
2011-09-06 20:45               ` Eric Wong
2011-09-06 20:57 ` Eric Wong
2011-09-07 14:14   ` Bryan Jacobs

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=4E6127F5.5070009@vilain.net \
    --to=sam@vilain.net \
    --cc=bjacobs@woti.com \
    --cc=git@vger.kernel.org \
    --cc=normalperson@yhbt.net \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.