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

Re: [PATCH 18/18] DO NOT SUBMIT: directory rename stuff for redo_after_renames

From
Elijah Newren <newren@gmail.com>
Date
Jan 7, 2021, 20:02 UTC
Message-ID
<CABPp-BGFQfFBdGtPxTnCG8-5yUwnUK9tsEzdWDgHk4pHfx2s9A@mail.gmail.com>
In-Reply-To
<786dc8f0c449958174a4cf5e98704d36f3ae4076.1610049687.git.gitgitgadget@gmail.com>
Whoops.  Ignore this patch, of course.

On Thu, Jan 7, 2021 at 12:01 PM Elijah Newren via GitGitGadget <gitgitgadget@gmail.com> wrote:

Show 83 quoted lines
>
> From: Elijah Newren <newren@gmail.com>
>
> I believe the
>    ci->dirmask & sidemask
> stuff was leftovers from before I added dirs_removed.  I think it's
> dead, useless code; just need to check.
>
> Also, the
>    !mi || mi->clean
> portions should only be triggerable once I do the redo_after_renames
> stuff.
>
> Signed-off-by: Elijah Newren <newren@gmail.com>
> ---
>  merge-ort.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 45 insertions(+)
>
> diff --git a/merge-ort.c b/merge-ort.c
> index 55a835f8b97..1eb3a2e0fbb 100644
> --- a/merge-ort.c
> +++ b/merge-ort.c
> @@ -1031,6 +1031,48 @@ static void get_provisional_directory_renames(struct merge_options *opt,
>         }
>  }
>
> +static void remove_invalid_dir_renames(struct merge_options *opt,
> +                                      struct strmap *side_dir_renames,
> +                                      unsigned side_mask)
> +{
> +       struct hashmap_iter iter;
> +       struct strmap_entry *entry;
> +       struct string_list removable = STRING_LIST_INIT_NODUP;
> +       int i;
> +
> +       strmap_for_each_entry(side_dir_renames, &iter, entry) {
> +               struct merged_info *mi;
> +               struct conflict_info *ci;
> +
> +               mi = strmap_get(&opt->priv->paths, entry->key);
> +               INITIALIZE_CI(ci, mi);
> +               if (!mi ||
> +                   mi->clean ||
> +                   (ci->dirmask & side_mask)) {
> +                       /*
> +                        * !mi: This rename came from a directory that was
> +                        * unchanged on the other side of history, and NULL on
> +                        * our side.  No directory rename detection needed.
> +                        *
> +                        * mi->clean: Due to redo_after_renames, on the second
> +                        * run, collect_merge_info_callback was able to
> +                        * cleanly resolve the trivial directory merge without
> +                        * recursing.  As such, we know we don't need
> +                        * directory rename detection for it.
> +                        *
> +                        * ci->dirmask & side_mask: this directory "rename"
> +                        * isn't valid because the source directory name still
> +                        * exists on the destination side.
> +                        */
> +                       string_list_append(&removable, entry->key);
> +               }
> +       }
> +
> +       for (i=0; i<removable.nr; ++i)
> +               strmap_remove(side_dir_renames, removable.items[i].string, 0);
> +       string_list_clear(&removable, 0);
> +}
> +
>  static void handle_directory_level_conflicts(struct merge_options *opt)
>  {
>         struct hashmap_iter iter;
> @@ -1050,6 +1092,9 @@ static void handle_directory_level_conflicts(struct merge_options *opt)
>                 strmap_remove(side2_dir_renames, duplicated.items[i].string, 0);
>         }
>         string_list_clear(&duplicated, 0);
> +
> +       remove_invalid_dir_renames(opt, side1_dir_renames, (1 << MERGE_SIDE1));
> +       remove_invalid_dir_renames(opt, side2_dir_renames, (1 << MERGE_SIDE2));
>  }
>
>  static struct strmap_entry *check_dir_renamed(const char *path,
> --
> gitgitgadget
Previous: Elijah Newren via GitGitGadgetNext: Elijah Newren via GitGitGadget
Message 17 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.