diff options
| author | Junio C Hamano <gitster@pobox.com> | 2018-04-10 08:25:43 +0900 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2018-04-10 08:25:43 +0900 |
| commit | e4bb62fa1eeee689744b413e29a50b4d1dae6886 (patch) | |
| tree | 674f7d3cc3c82665a296216b952524b215302028 /merge-recursive.h | |
| parent | Git 2.17 (diff) | |
| parent | merge-recursive: ensure we write updates for directory-renamed file (diff) | |
| download | git-e4bb62fa1eeee689744b413e29a50b4d1dae6886.tar.gz git-e4bb62fa1eeee689744b413e29a50b4d1dae6886.zip | |
Merge branch 'en/rename-directory-detection'
Rename detection logic in "diff" family that is used in "merge" has
learned to guess when all of x/a, x/b and x/c have moved to z/a,
z/b and z/c, it is likely that x/d added in the meantime would also
want to move to z/d by taking the hint that the entire directory
'x' moved to 'z'. A bug causing dirty files involved in a rename
to be overwritten during merge has also been fixed as part of this
work.
* en/rename-directory-detection: (29 commits)
merge-recursive: ensure we write updates for directory-renamed file
merge-recursive: avoid spurious rename/rename conflict from dir renames
directory rename detection: new testcases showcasing a pair of bugs
merge-recursive: fix remaining directory rename + dirty overwrite cases
merge-recursive: fix overwriting dirty files involved in renames
merge-recursive: avoid clobbering untracked files with directory renames
merge-recursive: apply necessary modifications for directory renames
merge-recursive: when comparing files, don't include trees
merge-recursive: check for file level conflicts then get new name
merge-recursive: add computation of collisions due to dir rename & merging
merge-recursive: check for directory level conflicts
merge-recursive: add get_directory_renames()
merge-recursive: make a helper function for cleanup for handle_renames
merge-recursive: split out code for determining diff_filepairs
merge-recursive: make !o->detect_rename codepath more obvious
merge-recursive: fix leaks of allocated renames and diff_filepairs
merge-recursive: introduce new functions to handle rename logic
merge-recursive: move the get_renames() function
directory rename detection: tests for handling overwriting dirty files
directory rename detection: tests for handling overwriting untracked files
...
Diffstat (limited to 'merge-recursive.h')
| -rw-r--r-- | merge-recursive.h | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/merge-recursive.h b/merge-recursive.h index 80d69d1401..d863cf8867 100644 --- a/merge-recursive.h +++ b/merge-recursive.h @@ -1,6 +1,7 @@ #ifndef MERGE_RECURSIVE_H #define MERGE_RECURSIVE_H +#include "unpack-trees.h" #include "string-list.h" struct merge_options { @@ -27,6 +28,32 @@ struct merge_options { struct strbuf obuf; struct hashmap current_file_dir_set; struct string_list df_conflict_file_set; + struct unpack_trees_options unpack_opts; +}; + +/* + * For dir_rename_entry, directory names are stored as a full path from the + * toplevel of the repository and do not include a trailing '/'. Also: + * + * dir: original name of directory being renamed + * non_unique_new_dir: if true, could not determine new_dir + * new_dir: final name of directory being renamed + * possible_new_dirs: temporary used to help determine new_dir; see comments + * in get_directory_renames() for details + */ +struct dir_rename_entry { + struct hashmap_entry ent; /* must be the first member! */ + char *dir; + unsigned non_unique_new_dir:1; + struct strbuf new_dir; + struct string_list possible_new_dirs; +}; + +struct collision_entry { + struct hashmap_entry ent; /* must be the first member! */ + char *target_file; + struct string_list source_files; + unsigned reported_already:1; }; /* merge_trees() but with recursive ancestor consolidation */ |
