# # # patch "roster_merge.cc" # from [890ca37b82f4b4de03680cb660a40db17ae97664] # to [3e750304ce9a32dfc133335060911ae4952fc2cb] # # patch "roster_merge.hh" # from [ed68adf1d012e2a3689168d7367bfd5bd3b7be20] # to [640cc2a03c5a509b1ea23a266724595896c9df6a] # ============================================================ --- roster_merge.cc 890ca37b82f4b4de03680cb660a40db17ae97664 +++ roster_merge.cc 3e750304ce9a32dfc133335060911ae4952fc2cb @@ -18,7 +18,9 @@ && node_attr_conflicts.empty() && orphaned_node_conflicts.empty() && rename_target_conflicts.empty() - && directory_loop_conflicts.empty(); + && directory_loop_conflicts.empty() + && illegal_name_conflicts.empty() + && !missing_root_dir; } void @@ -30,6 +32,8 @@ orphaned_node_conflicts.clear(); rename_target_conflicts.clear(); directory_loop_conflicts.clear(); + illegal_name_conflicts.clear(); + missing_root_dir = false; roster = roster_t(); } @@ -234,7 +238,6 @@ std::set const & right_uncommon_ancestors, roster_merge_result & result) { - result.clear(); MM(left_parent); MM(left_marking); ============================================================ --- roster_merge.hh ed68adf1d012e2a3689168d7367bfd5bd3b7be20 +++ roster_merge.hh 640cc2a03c5a509b1ea23a266724595896c9df6a @@ -92,10 +92,19 @@ std::pair parent_name; }; -// renaming the root dir (as we currently do _not_) allows: +// renaming the root dir allows these: // -- MT in root // -- missing root directory +// this is a node that cleanly merged to some name, but that name was somehow +// forbidden. (Currently, the only forbidden name is "MT" in the root +// directory.) +struct illegal_name_conflict +{ + node_id nid; + std::pair parent_name; +}; + struct roster_merge_result { std::vector node_name_conflicts; @@ -104,6 +113,8 @@ std::vector orphaned_node_conflicts; std::vector rename_target_conflicts; std::vector directory_loop_conflicts; + std::vector illegal_name_conflicts; + bool missing_root_dir; // this roster is sane if is_clean() returns true roster_t roster; bool is_clean();