[PATCH v2 00/33] Add directory rename detection to git

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

 



This patchset introduces directory rename detection to merge-recursive.
See https://public-inbox.org/git/20171110190550.27059-1-newren@xxxxxxxxx/
for the previous series, design considerations, etc.

Changes since the first series include:

  * Rebased on latest master (addressing a couple minor conflicts)

  * Fixed numerous checkstyle.pl issues (except a few line-too-long and
    string-split ones, in order to match the style of the surrounding code;
    also, added two BUG() calls as suggested by Stefan)

  * Various code cleanups and commit message improvements suggested by
    reviewers

  * Testcase cleanups suggested by reviewers:
    * Use test_create_repo for different tests instead of heavy-handed
      cleaning
    * O-A-B instead of A-B-C for labelling original commit and sides of
      merge
    * reduced the number of git-rev-parse invocations
    * various wording fixes, clarifications, and typo eradication in
      comments

  * New testcases (see patch 31/33):
    * Added a pair of testcases suggested by Stefan Boller and a third that
      was a slight modification of one of those two.  The second testcase
      Stefan suggested has a fairly weird resolution that folks may want to
      double check, although to be fair, the input is fairly weird so some
      kind of weirdness in the output is to be expected.
    * Added a new testcase 9h based on a separate bug I found

  * Fixed two bugs:
    * ensure we write updates for directory-renamed file (bug triggered by
      testcase suggested by Stefan Boller; see patch 33/33)
    * avoid spurious rename/rename(1to2) conflicts from dir renames (found
      while I was digging around more; see patch 32/33)

Both Junio and Stefan made numerous suggestions that were very helpful.  I
believe this second series incorporates all suggestions made by Junio, all
but one of the non-tentative suggestions from Stefan (namely, the git
ls-files exit code checking), and several of the tentative suggestions from
Stefan as well.  If folks feel strongly about the ls-files exit code
checking or can spot anything I missed that looks important, let me know
and I'll get it fixed up.

Elijah Newren (33):
  Tighten and correct a few testcases for merging and cherry-picking
  merge-recursive: fix logic ordering issue
  merge-recursive: add explanation for src_entry and dst_entry
  directory rename detection: basic testcases
  directory rename detection: directory splitting testcases
  directory rename detection: testcases to avoid taking detection too
    far
  directory rename detection: partially renamed directory
    testcase/discussion
  directory rename detection: files/directories in the way of some
    renames
  directory rename detection: testcases checking which side did the
    rename
  directory rename detection: more involved edge/corner testcases
  directory rename detection: testcases exploring possibly suboptimal
    merges
  directory rename detection: miscellaneous testcases to complete
    coverage
  directory rename detection: tests for handling overwriting untracked
    files
  directory rename detection: tests for handling overwriting dirty files
  merge-recursive: move the get_renames() function
  merge-recursive: introduce new functions to handle rename logic
  merge-recursive: fix leaks of allocated renames and diff_filepairs
  merge-recursive: make !o->detect_rename codepath more obvious
  merge-recursive: split out code for determining diff_filepairs
  merge-recursive: add a new hashmap for storing directory renames
  merge-recursive: add get_directory_renames()
  merge-recursive: check for directory level conflicts
  merge-recursive: add a new hashmap for storing file collisions
  merge-recursive: add computation of collisions due to dir rename &
    merging
  merge-recursive: check for file level conflicts then get new name
  merge-recursive: when comparing files, don't include trees
  merge-recursive: apply necessary modifications for directory renames
  merge-recursive: avoid clobbering untracked files with directory
    renames
  merge-recursive: fix overwriting dirty files involved in renames
  merge-recursive: fix remaining directory rename + dirty overwrite
    cases
  directory rename detection: new testcases showcasing a pair of bugs
  merge-recursive: avoid spurious rename/rename conflict from dir
    renames
  merge-recursive: ensure we write updates for directory-renamed file

 merge-recursive.c                   | 1239 +++++++++++-
 merge-recursive.h                   |   17 +
 t/t3501-revert-cherry-pick.sh       |    5 +-
 t/t6043-merge-rename-directories.sh | 3821 +++++++++++++++++++++++++++++++++++
 t/t7607-merge-overwrite.sh          |    7 +-
 unpack-trees.c                      |    4 +-
 unpack-trees.h                      |    4 +
 7 files changed, 4981 insertions(+), 116 deletions(-)
 create mode 100755 t/t6043-merge-rename-directories.sh

-- 
2.15.0.309.g00c152f825




[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]

  Powered by Linux