[PATCH v3 00/19] "git apply --3way"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]