git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 00/19] "git apply --3way"
@ 2012-06-13 19:32 Junio C Hamano
  2012-06-13 19:32 ` [PATCH v3 01/19] apply: fix an incomplete comment in check_patch() Junio C Hamano
                   ` (18 more replies)
  0 siblings, 19 replies; 20+ messages in thread
From: Junio C Hamano @ 2012-06-13 19:32 UTC (permalink / raw)
  To: git

Here is the third round.  Previous ones are:

    http://thread.gmane.org/gmane.comp.version-control.git/197538
    http://thread.gmane.org/gmane.comp.version-control.git/197637

"git am -3" is useful when you have to accept a patch submission to
a tree that has slightly been modified, but when you are reordeing
your own work, you would be picking some parts of a later commits to
earlier codebase without wanting to make commits out of individual
steps.

Teach "git apply" a similar "-3"way merge fallback option with this
series, and you can now apply your patches without having to reduce
context.  As it will leave the conflicted halves in the index and
let you manually resolve conflicts in the working tree, "--3way"
implies "--index", and cannot be used with "--cached".

Note that this does not call merge-recursive like "am -3" does, and
does not implement renames (i.e. a patch wants to modify path A,
your codebase has the corresponding contents at path B---"git am -3"
will end up modifying path B, but the round of this series does
not).  It should be more or less straightforward to enhance it,
though.  Instead of aborting with "preimage A does not exist in the
index nor the working tree", after finding the necessary blob that
the patch author had at path A, you run the similarity algorithm
with the blob in your tree to find path B, update the "struct patch"
to rewrite it to apply to path B, and let the existing code take
care of the rest.

Given that I started this early last month, even discounting the
fact that I was looking at it only in the background, the whole
thing would have been a bit too big for a student inexperienced to
the code base to swallow.  I would say that it would be a good
bite-sized GSoC project next summer to build on this series and make
it replace the "am -3" implementation (that means the above "apply a
patch to A to path B" needs to be added), which lets us kill the
ugly "--build-fake-ancestor" hack.

Junio C Hamano (19):
  apply: fix an incomplete comment in check_patch()
  apply: a bit more comments on PATH_TO_BE_DELETED
  apply: clear_image() clears things a bit more
  apply: refactor read_file_or_gitlink()
  apply: factor out checkout_target() helper function
  apply: split load_preimage() helper function out
  apply: refactor "previous patch" logic
  apply: further split load_preimage()
  apply: move check_to_create_blob() closer to its sole caller
  apply: move "already exists" logic to check_to_create()
  apply: accept -3/--3way command line option
  apply: fall back on three-way merge
  apply: plug the three-way merge logic in
  apply: move verify_index_match() higher
  apply: --3way with add/add conflict
  apply: register conflicted stages to the index
  apply: allow rerere() upon --3way results
  apply: document --3way option
  apply --3way: tests

 Documentation/git-apply.txt |  11 +-
 builtin/apply.c             | 550 ++++++++++++++++++++++++++++++++++----------
 t/t4108-apply-threeway.sh   | 157 +++++++++++++
 t/t4117-apply-reject.sh     |   8 +
 4 files changed, 608 insertions(+), 118 deletions(-)
 create mode 100755 t/t4108-apply-threeway.sh

-- 
1.7.11.rc3.30.g3bdace2

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

end of thread, other threads:[~2012-06-13 19:34 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-06-13 19:32 [PATCH v3 00/19] "git apply --3way" Junio C Hamano
2012-06-13 19:32 ` [PATCH v3 01/19] apply: fix an incomplete comment in check_patch() Junio C Hamano
2012-06-13 19:32 ` [PATCH v3 02/19] apply: a bit more comments on PATH_TO_BE_DELETED Junio C Hamano
2012-06-13 19:32 ` [PATCH v3 03/19] apply: clear_image() clears things a bit more Junio C Hamano
2012-06-13 19:32 ` [PATCH v3 04/19] apply: refactor read_file_or_gitlink() Junio C Hamano
2012-06-13 19:32 ` [PATCH v3 05/19] apply: factor out checkout_target() helper function Junio C Hamano
2012-06-13 19:32 ` [PATCH v3 06/19] apply: split load_preimage() helper function out Junio C Hamano
2012-06-13 19:32 ` [PATCH v3 07/19] apply: refactor "previous patch" logic Junio C Hamano
2012-06-13 19:32 ` [PATCH v3 08/19] apply: further split load_preimage() Junio C Hamano
2012-06-13 19:32 ` [PATCH v3 09/19] apply: move check_to_create_blob() closer to its sole caller Junio C Hamano
2012-06-13 19:32 ` [PATCH v3 10/19] apply: move "already exists" logic to check_to_create() Junio C Hamano
2012-06-13 19:32 ` [PATCH v3 11/19] apply: accept -3/--3way command line option Junio C Hamano
2012-06-13 19:32 ` [PATCH v3 12/19] apply: fall back on three-way merge Junio C Hamano
2012-06-13 19:32 ` [PATCH v3 13/19] apply: plug the three-way merge logic in Junio C Hamano
2012-06-13 19:32 ` [PATCH v3 14/19] apply: move verify_index_match() higher Junio C Hamano
2012-06-13 19:32 ` [PATCH v3 15/19] apply: --3way with add/add conflict Junio C Hamano
2012-06-13 19:32 ` [PATCH v3 16/19] apply: register conflicted stages to the index Junio C Hamano
2012-06-13 19:32 ` [PATCH v3 17/19] apply: allow rerere() upon --3way results Junio C Hamano
2012-06-13 19:32 ` [PATCH v3 18/19] apply: document --3way option Junio C Hamano
2012-06-13 19:33 ` [PATCH v3 19/19] apply --3way: tests Junio C Hamano

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