git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Martin Langhoff <martin.langhoff@gmail.com>
To: Linus Torvalds <torvalds@osdl.org>
Cc: Junio C Hamano <junkio@cox.net>,
	Darrin Thompson <darrint@progeny.com>,
	git@vger.kernel.org
Subject: Re: Patch (apply) vs. Pull
Date: Thu, 23 Jun 2005 20:36:03 +1200	[thread overview]
Message-ID: <46a038f905062301363c3c1ea8@mail.gmail.com> (raw)
In-Reply-To: <Pine.LNX.4.58.0506211452110.2353@ppc970.osdl.org>

On 6/22/05, Linus Torvalds <torvalds@osdl.org> wrote:
> Btw, I'd like to help automate the 6-7 stage with a different kind of
> merge logic.
(...)
>  - get the different HEAD info set up, and save the original head in
>    ORIG_HEAD, the way "git resolve" does for real merges:
> 
>         : ${GIT_DIR=.git}
> 
>         orig=$(git-rev-parse HEAD)
>         new=$(git-rev-parse FETCH_HEAD)
>         common=$(git-merge-base $orig $new)
> 
>         echo $orig > $GIT_DIR/ORIG_HEAD
> 
>  - fast-forward to the new HEAD. We'll want to re-base everything off
>    that. If that fails, exit out - we've got dirty state
> 
>         git-read-tree -m -u $orig $new && exit 1
> 
>  - for each commit that we had in our old tree but not in the common part,
>    try to re-base it:
> 
>         > FAILED_TO_CHERRYPICK
>         for i in $(git-rev-list $orig ^$common)
>         do
>                 git-cherry-pick $i ||
>                         (echo $i >> FAILED_TO_CHERRYPICK)
>         done
>         if [ -s FAILED_TO_CHERRYPICK ]; then
>                 echo Some commits could not be cherry-picked, check by hand:
>                 cat FAILED_TO_CHERRYPICK
>         fi

Re-base and replay local history is an approach I've been using
successfully with Arch (though it takes literally ages). Ideally, the
process should be able to be restarted after one call to
git-cherry-pick fails. It is usually a handful of patches in a series
of a few hundred that will break, usually because it's been fed
upstream. You want to resolve the conflict and resume somehow.

> and here the "git-cherry-pick" thing is just a script that basically takes
> an old commit ID, and tries to re-apply it as a patch (with author data
> and commit messages, of course) on top of the current head. It would
> basically be nothing more than a "git-diff-tree $1" followed by tryign to
> figure out whether it had already been applied or whether it can be
> applied now.
> 
> What do you think?

Sounds great. 

It might be useful to provide it a "skip" list, so that it skips
applying selected patches (that have presumably made it upstream).

And perhaps --stop-at <commit-sha> so that if a large replay fails or
yields a broken tree (not at the git level, but at the /does it
compile and run/ level), I can throw away the temporary repo where I'm
working and try again in shorter batches, stopping at "strategical"
points.

cheers,


martin

  parent reply	other threads:[~2005-06-23  9:07 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-06-20 16:19 Patch (apply) vs. Pull Darrin Thompson
2005-06-20 17:22 ` Junio C Hamano
2005-06-20 23:01   ` Darrin Thompson
2005-06-21 18:02     ` Daniel Barkalow
2005-06-22  8:47       ` Junio C Hamano
2005-06-22  9:56       ` Catalin Marinas
2005-06-21 22:09   ` Linus Torvalds
2005-06-22  9:08     ` Junio C Hamano
2005-06-22 17:21       ` Linus Torvalds
2005-06-22 20:08         ` Daniel Barkalow
2005-06-22 20:22           ` Linus Torvalds
2005-06-22 21:54             ` Daniel Barkalow
2005-06-22 22:21               ` Linus Torvalds
2005-06-23  3:32                 ` Daniel Barkalow
2005-06-23  4:23                   ` Linus Torvalds
2005-06-23  5:15                     ` Daniel Barkalow
2005-06-23  6:09                       ` Linus Torvalds
2005-06-23 16:45                         ` Daniel Barkalow
2005-06-23 18:43                           ` Linus Torvalds
2005-06-23 19:59                             ` Daniel Barkalow
2005-06-23 22:20                               ` Linus Torvalds
2005-06-23 22:49                                 ` Linus Torvalds
2005-06-23 12:10                       ` Catalin Marinas
2005-06-23 17:05                         ` Daniel Barkalow
2005-06-24 13:41                           ` Catalin Marinas
2005-06-23  8:47                 ` Martin Langhoff
2005-06-22 16:23     ` Darrin Thompson
2005-06-23  8:36     ` Martin Langhoff [this message]
2005-06-23 23:21     ` [PATCH 0/3] Rebasing for "individual developer" usage Junio C Hamano
2005-06-23 23:27       ` [PATCH 1/3] git-commit-script: get commit message from an existing one Junio C Hamano
2005-06-23 23:28       ` [PATCH 2/3] git-cherry: find commits not merged upstream Junio C Hamano
2005-06-23 23:29       ` [PATCH 3/3] git-rebase-script: rebase local commits to new upstream head Junio C Hamano
2005-06-22 17:04   ` Patch (apply) vs. Pull Catalin Marinas

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=46a038f905062301363c3c1ea8@mail.gmail.com \
    --to=martin.langhoff@gmail.com \
    --cc=darrint@progeny.com \
    --cc=git@vger.kernel.org \
    --cc=junkio@cox.net \
    --cc=torvalds@osdl.org \
    /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).