diff options
author | Elijah Newren <newren@gmail.com> | 2018-04-19 10:58:05 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-05-08 16:11:00 +0900 |
commit | 7fe40b88efc721bfcbe69f00f950eb9f7a9cd236 (patch) | |
tree | 3a2883c0f0693231dbf2a5f92559076b3438401d /merge-recursive.h | |
parent | ffc16c490ad533bc07e6d8ec0226b426166e8442 (diff) | |
download | git-7fe40b88efc721bfcbe69f00f950eb9f7a9cd236.tar.gz |
merge-recursive: add get_directory_renames()
This populates a set of directory renames for us. The set of directory
renames is not yet used, but will be in subsequent commits.
Note that the use of a string_list for possible_new_dirs in the new
dir_rename_entry struct implies an O(n^2) algorithm; however, in practice
I expect the number of distinct directories that files were renamed into
from a single original directory to be O(1). My guess is that n has a
mode of 1 and a mean of less than 2, so, for now, string_list seems good
enough for possible_new_dirs.
Reviewed-by: Stefan Beller <sbeller@google.com>
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'merge-recursive.h')
-rw-r--r-- | merge-recursive.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/merge-recursive.h b/merge-recursive.h index 80d69d1401..fe64c78de4 100644 --- a/merge-recursive.h +++ b/merge-recursive.h @@ -29,6 +29,24 @@ struct merge_options { struct string_list df_conflict_file_set; }; +/* + * 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; +}; + /* merge_trees() but with recursive ancestor consolidation */ int merge_recursive(struct merge_options *o, struct commit *h1, |