git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v3 01/17] merge-ort: add new data structures for directory rename detection

From
Elijah Newren via GitGitGadget <gitgitgadget@gmail.com>
Date
Jan 19, 2021, 19:53 UTC
Message-ID
<3b14afd4129f19ecb581025a94cc816a5f2ff28b.1611086033.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.835.v3.git.1611086033.gitgitgadget@gmail.com>
From: Elijah Newren <newren@gmail.com>
Signed-off-by: Elijah Newren <newren@gmail.com>
---
 merge-ort.c | 34 +++++++++++++++++++++++++++++++---
 1 file changed, 31 insertions(+), 3 deletions(-)
diff --git a/merge-ort.c b/merge-ort.c
index d36a92b59b7..652ff730afa 100644
--- a/merge-ort.c
+++ b/merge-ort.c
@@ -49,14 +49,42 @@ enum merge_side {
 };
 
 struct rename_info {
+	/*
+	 * All variables that are arrays of size 3 correspond to data tracked
+	 * for the sides in enum merge_side.  Index 0 is almost always unused
+	 * because we often only need to track information for MERGE_SIDE1 and
+	 * MERGE_SIDE2 (MERGE_BASE can't have rename information since renames
+	 * are determined relative to what changed since the MERGE_BASE).
+	 */
+
 	/*
 	 * pairs: pairing of filenames from diffcore_rename()
-	 *
-	 * Index 1 and 2 correspond to sides 1 & 2 as used in
-	 * conflict_info.stages.  Index 0 unused.
 	 */
 	struct diff_queue_struct pairs[3];
 
+	/*
+	 * dirs_removed: directories removed on a given side of history.
+	 */
+	struct strset dirs_removed[3];
+
+	/*
+	 * dir_rename_count: tracking where parts of a directory were renamed to
+	 *
+	 * When files in a directory are renamed, they may not all go to the
+	 * same location.  Each strmap here tracks:
+	 *      old_dir => {new_dir => int}
+	 * That is, dir_rename_count[side] is a strmap to a strintmap.
+	 */
+	struct strmap dir_rename_count[3];
+
+	/*
+	 * dir_renames: computed directory renames
+	 *
+	 * This is a map of old_dir => new_dir and is derived in part from
+	 * dir_rename_count.
+	 */
+	struct strmap dir_renames[3];
+
 	/*
 	 * needed_limit: value needed for inexact rename detection to run
 	 *
-- 
gitgitgadget
Previous: Elijah Newren via GitGitGadgetNext: Elijah Newren via GitGitGadget
Message 64 of 66 in “Add directory rename detection to merge-ort”
  1. 00/18 Add directory rename detection to merge-ortElijah Newren via GitGitGadget, Jan 7, 2021
  2. 10/18 merge-ort: implement compute_collisions()Elijah Newren via GitGitGadget, Jan 7, 2021
  3. 12/18 merge-ort: implement check_for_directory_rename()Elijah Newren via GitGitGadget, Jan 7, 2021
  4. 02/18 merge-ort: initialize and free new directory rename data structuresElijah Newren via GitGitGadget, Jan 7, 2021
  5. 01/18 merge-ort: add new data structures for directory rename detectionElijah Newren via GitGitGadget, Jan 7, 2021
  6. 07/18 merge-ort: implement compute_rename_counts()Elijah Newren via GitGitGadget, Jan 7, 2021
  7. 14/18 merge-ort: add a new toplevel_dir fieldElijah Newren via GitGitGadget, Jan 7, 2021
  8. 03/18 merge-ort: collect which directories are removed in dirs_removedElijah Newren via GitGitGadget, Jan 7, 2021
  9. 05/18 merge-ort: add outline of get_provisional_directory_renames()Elijah Newren via GitGitGadget, Jan 7, 2021
  10. 06/18 merge-ort: copy get_renamed_dir_portion() from merge-recursive.cElijah Newren via GitGitGadget, Jan 7, 2021
  11. 08/18 merge-ort: implement handle_directory_level_conflicts()Elijah Newren via GitGitGadget, Jan 7, 2021
  12. 09/18 merge-ort: modify collect_renames() for directory rename handlingElijah Newren via GitGitGadget, Jan 7, 2021
  13. 04/18 merge-ort: add outline for computing directory renamesElijah Newren via GitGitGadget, Jan 7, 2021
  14. 16/18 merge-ort: process_renames() now needs more defensivenessElijah Newren via GitGitGadget, Jan 7, 2021
  15. 11/18 merge-ort: implement apply_dir_rename() and check_dir_renamed()Elijah Newren via GitGitGadget, Jan 7, 2021
  16. 18/18 DO NOT SUBMIT: directory rename stuff for redo_after_renamesElijah Newren via GitGitGadget, Jan 7, 2021
  17. Elijah NewrenJan 7, 2021
  18. 13/18 merge-ort: implement handle_path_level_conflicts()Elijah Newren via GitGitGadget, Jan 7, 2021
  19. 15/18 merge-ort: implement apply_directory_rename_modifications()Elijah Newren via GitGitGadget, Jan 7, 2021
  20. 17/18 merge-ort: fix a directory rename detection bugElijah Newren via GitGitGadget, Jan 7, 2021
  21. 00/17 Add directory rename detection to merge-ortElijah Newren via GitGitGadget, Jan 7, 2021
  22. 02/17 merge-ort: initialize and free new directory rename data structuresElijah Newren via GitGitGadget, Jan 7, 2021
  23. 01/17 merge-ort: add new data structures for directory rename detectionElijah Newren via GitGitGadget, Jan 7, 2021
  24. 05/17 merge-ort: add outline of get_provisional_directory_renames()Elijah Newren via GitGitGadget, Jan 7, 2021
  25. Taylor BlauJan 18, 2021
  26. Elijah NewrenJan 18, 2021
  27. 09/17 merge-ort: modify collect_renames() for directory rename handlingElijah Newren via GitGitGadget, Jan 7, 2021
  28. 15/17 merge-ort: implement apply_directory_rename_modifications()Elijah Newren via GitGitGadget, Jan 7, 2021
  29. 03/17 merge-ort: collect which directories are removed in dirs_removedElijah Newren via GitGitGadget, Jan 7, 2021
  30. 16/17 merge-ort: process_renames() now needs more defensivenessElijah Newren via GitGitGadget, Jan 7, 2021
  31. 04/17 merge-ort: add outline for computing directory renamesElijah Newren via GitGitGadget, Jan 7, 2021
  32. Taylor BlauJan 18, 2021
  33. Elijah NewrenJan 18, 2021
  34. Taylor BlauJan 18, 2021
  35. 10/17 merge-ort: implement compute_collisions()Elijah Newren via GitGitGadget, Jan 7, 2021
  36. 13/17 merge-ort: implement handle_path_level_conflicts()Elijah Newren via GitGitGadget, Jan 7, 2021
  37. 11/17 merge-ort: implement apply_dir_rename() and check_dir_renamed()Elijah Newren via GitGitGadget, Jan 7, 2021
  38. 14/17 merge-ort: add a new toplevel_dir fieldElijah Newren via GitGitGadget, Jan 7, 2021
  39. 08/17 merge-ort: implement handle_directory_level_conflicts()Elijah Newren via GitGitGadget, Jan 7, 2021
  40. Taylor BlauJan 18, 2021
  41. Elijah NewrenJan 18, 2021
  42. 06/17 merge-ort: copy get_renamed_dir_portion() from merge-recursive.cElijah Newren via GitGitGadget, Jan 7, 2021
  43. 12/17 merge-ort: implement check_for_directory_rename()Elijah Newren via GitGitGadget, Jan 7, 2021
  44. 07/17 merge-ort: implement compute_rename_counts()Elijah Newren via GitGitGadget, Jan 7, 2021
  45. Taylor BlauJan 18, 2021
  46. Elijah NewrenJan 18, 2021
  47. 17/17 merge-ort: fix a directory rename detection bugElijah Newren via GitGitGadget, Jan 7, 2021
  48. 00/17 Add directory rename detection to merge-ortElijah Newren via GitGitGadget, Jan 19, 2021
  49. 02/17 merge-ort: initialize and free new directory rename data structuresElijah Newren via GitGitGadget, Jan 19, 2021
  50. 03/17 merge-ort: collect which directories are removed in dirs_removedElijah Newren via GitGitGadget, Jan 19, 2021
  51. 06/17 merge-ort: copy get_renamed_dir_portion() from merge-recursive.cElijah Newren via GitGitGadget, Jan 19, 2021
  52. 04/17 merge-ort: add outline for computing directory renamesElijah Newren via GitGitGadget, Jan 19, 2021
  53. 05/17 merge-ort: add outline of get_provisional_directory_renames()Elijah Newren via GitGitGadget, Jan 19, 2021
  54. 10/17 merge-ort: implement compute_collisions()Elijah Newren via GitGitGadget, Jan 19, 2021
  55. 15/17 merge-ort: implement apply_directory_rename_modifications()Elijah Newren via GitGitGadget, Jan 19, 2021
  56. 17/17 merge-ort: fix a directory rename detection bugElijah Newren via GitGitGadget, Jan 19, 2021
  57. 11/17 merge-ort: implement apply_dir_rename() and check_dir_renamed()Elijah Newren via GitGitGadget, Jan 19, 2021
  58. 16/17 merge-ort: process_renames() now needs more defensivenessElijah Newren via GitGitGadget, Jan 19, 2021
  59. 14/17 merge-ort: add a new toplevel_dir fieldElijah Newren via GitGitGadget, Jan 19, 2021
  60. 13/17 merge-ort: implement handle_path_level_conflicts()Elijah Newren via GitGitGadget, Jan 19, 2021
  61. 12/17 merge-ort: implement check_for_directory_rename()Elijah Newren via GitGitGadget, Jan 19, 2021
  62. 08/17 merge-ort: implement handle_directory_level_conflicts()Elijah Newren via GitGitGadget, Jan 19, 2021
  63. 09/17 merge-ort: modify collect_renames() for directory rename handlingElijah Newren via GitGitGadget, Jan 19, 2021
  64. 01/17 merge-ort: add new data structures for directory rename detectionElijah Newren via GitGitGadget, Jan 19, 2021
  65. 07/17 merge-ort: implement compute_rename_counts()Elijah Newren via GitGitGadget, Jan 19, 2021
  66. Taylor BlauJan 19, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.