# # # add_file "tests/resolve_conflicts_all_resolutions/show_first-gui_left" # content [5551f220ad40e2384766ba72d3ca34773d90328e] # # add_file "tests/resolve_conflicts_all_resolutions/show_first-gui_right" # content [0e51b268919b4c69452d5d5fbd667c73aa567042] # # add_file "tests/resolve_conflicts_all_resolutions/show_remaining-gui_left" # content [261299f85ed6f7388e2eda94a97eea9b24501908] # # patch "NEWS" # from [0c4416bd53cbe3f1e547d1aacacf038029f8af8e] # to [fe5a88f05867df4243e23040a5180050ccf98934] # # patch "cmd_conflicts.cc" # from [ba7f076aeb967031dab8c0ff7487c7f61c8fb138] # to [17a90f031a297292508aff6bb4ae9113eedc0f1f] # # patch "merge_conflict.cc" # from [c76a564607a50a2c6b16b72f478f4346724638ed] # to [bf5347a20d07b412f53995f427d0255ca7fd8f62] # # patch "merge_roster.cc" # from [65fc3696459523e1a49b234c23760af3f6c361b1] # to [e54910bfbd63ee800962d313e433fc79ad3534c1] # # patch "merge_roster.hh" # from [4624e3f09d3b3079bbce87d55b7449410cc65cc3] # to [ec7922c9e6b39c157f7ac5b1504090d88bf6b728] # # patch "monotone.texi" # from [504bf318b689b5b653b3b8c83813cb800e11fb3d] # to [b8c50f258a369c78495b703d2a520b87ab259539] # # patch "tests/resolve_conflicts_all_resolutions/__driver__.lua" # from [eb2e2dd5872306f5bbd0328a118806536d74420f] # to [ecaaa54dedc2398e3c635ddbed2c778309d5e53a] # # patch "tests/resolve_conflicts_all_resolutions/conflicts-1" # from [09ae554632fc05d64f3f59b9e536380d937895eb] # to [4c1d8ae2b01f252b6d548856bf0441c152a9f306] # # patch "tests/resolve_conflicts_all_resolutions/conflicts-resolved" # from [9bf71467379c69188e16ed3f0a1b9b2368c4dc8b] # to [c9f5081f8635b66f94e7b6cb5e94362f04efecf7] # # patch "tests/resolve_conflicts_all_resolutions/merge-1" # from [ee814b8ca07cd8626aeb8fd00052909488c48136] # to [4026a57330dfa66af8afa0eccd8aad978793991d] # # patch "tests/resolve_conflicts_all_resolutions/show_first-checkout_left" # from [eea1125a2012131fde7cb392fb3e4900df9bcf26] # to [76dd741b05d28ee8de76d364e3d5c22d8479b12a] # # patch "tests/resolve_conflicts_all_resolutions/show_first-checkout_right" # from [7059285f7bb0d9c3f1940949cb9511d8a1c2e5a8] # to [bc0da058f3eb73b3633180f77fe80f983c28bc5b] # # patch "tests/resolve_conflicts_all_resolutions/show_first-thermostat" # from [2ee635f6f68eaf75346d6c5ac413c1483e773a10] # to [745ee45027aab1ed00b0bf53a1002ced2db9b968] # # patch "tests/resolve_conflicts_all_resolutions/show_remaining-checkout_left" # from [457e3d43e1c99cff6224665099b74068733ed97a] # to [47e8b008117563185c055526be84fa00dac95fb4] # # patch "tests/resolve_conflicts_errors/__driver__.lua" # from [7688ba18626d29beb5aec22e208b74551bf4baa1] # to [972e02d35c515a9ef5e9d14310698129985e125d] # ============================================================ --- tests/resolve_conflicts_all_resolutions/show_first-gui_left 5551f220ad40e2384766ba72d3ca34773d90328e +++ tests/resolve_conflicts_all_resolutions/show_first-gui_left 5551f220ad40e2384766ba72d3ca34773d90328e @@ -0,0 +1,10 @@ +mtn: duplicate_name gui_left.sh +mtn: possible resolutions: +mtn: resolve_first_left drop +mtn: resolve_first_left keep +mtn: resolve_first_left rename "name" +mtn: resolve_first_left user "name" +mtn: resolve_first_right drop +mtn: resolve_first_right keep +mtn: resolve_first_right rename "name" +mtn: resolve_first_right user "name" ============================================================ --- tests/resolve_conflicts_all_resolutions/show_first-gui_right 0e51b268919b4c69452d5d5fbd667c73aa567042 +++ tests/resolve_conflicts_all_resolutions/show_first-gui_right 0e51b268919b4c69452d5d5fbd667c73aa567042 @@ -0,0 +1,10 @@ +mtn: duplicate_name gui_right.sh +mtn: possible resolutions: +mtn: resolve_first_left drop +mtn: resolve_first_left keep +mtn: resolve_first_left rename "name" +mtn: resolve_first_left user "name" +mtn: resolve_first_right drop +mtn: resolve_first_right keep +mtn: resolve_first_right rename "name" +mtn: resolve_first_right user "name" ============================================================ --- tests/resolve_conflicts_all_resolutions/show_remaining-gui_left 261299f85ed6f7388e2eda94a97eea9b24501908 +++ tests/resolve_conflicts_all_resolutions/show_remaining-gui_left 261299f85ed6f7388e2eda94a97eea9b24501908 @@ -0,0 +1,5 @@ +mtn: duplicate_name gui_left.sh +mtn: duplicate_name gui_right.sh +mtn: duplicate_name thermostat.c +mtn: content interactive_file +mtn: content user_file ============================================================ --- NEWS 0c4416bd53cbe3f1e547d1aacacf038029f8af8e +++ NEWS fe5a88f05867df4243e23040a5180050ccf98934 @@ -54,6 +54,8 @@ - Resolution of orphaned file conflicts is now supported by 'merge --resolve-conflicts' and the 'conflicts' commands. + - Duplicate name conflicts now support the 'keep' resolution. + Bugs fixed - Monotone now sanely skips paths with invalid characters ============================================================ --- cmd_conflicts.cc ba7f076aeb967031dab8c0ff7487c7f61c8fb138 +++ cmd_conflicts.cc 17a90f031a297292508aff6bb4ae9113eedc0f1f @@ -105,6 +105,7 @@ show_conflicts(database & db, conflicts_ if (conflict.left_resolution.first == resolve_conflicts::none) { P(F("resolve_first_left drop")); + P(F("resolve_first_left keep")); P(F("resolve_first_left rename \"name\"")); P(F("resolve_first_left user \"name\"")); } @@ -112,6 +113,7 @@ show_conflicts(database & db, conflicts_ if (conflict.right_resolution.first == resolve_conflicts::none) { P(F("resolve_first_right drop")); + P(F("resolve_first_right keep")); P(F("resolve_first_right rename \"name\"")); P(F("resolve_first_right user \"name\"")); } @@ -195,7 +197,7 @@ enum side_t {left, right, neither}; } // show_conflicts enum side_t {left, right, neither}; -static char const * const conflict_resolution_not_supported_msg = "%s is not a supported conflict resolution for %s"; +static char const * const conflict_resolution_not_supported_msg = N_("%s is not a supported conflict resolution for %s"); // Call Lua merge3 hook to merge left_fid, right_fid, store result in result_path static bool @@ -248,6 +250,16 @@ set_duplicate_name_conflict(resolve_conf E(args.size() == 1, origin::user, F("too many arguments")); resolution.first = resolve_conflicts::drop; } + else if ("keep" == idx(args, 0)()) + { + E(args.size() == 1, origin::user, F("too many arguments")); + E(other_resolution.first == resolve_conflicts::none || + other_resolution.first == resolve_conflicts::drop || + other_resolution.first == resolve_conflicts::rename, + origin::user, + F("other resolution must be 'drop' or 'rename'")); + resolution.first = resolve_conflicts::keep; + } else if ("rename" == idx(args, 0)()) { E(args.size() == 2, origin::user, F("wrong number of arguments")); @@ -257,16 +269,18 @@ set_duplicate_name_conflict(resolve_conf else if ("user" == idx(args, 0)()) { E(args.size() == 2, origin::user, F("wrong number of arguments")); - E(other_resolution.first != resolve_conflicts::content_user, + E(other_resolution.first == resolve_conflicts::none || + other_resolution.first == resolve_conflicts::drop || + other_resolution.first == resolve_conflicts::rename, origin::user, - F("left and right resolutions cannot both be 'user'")); + F("other resolution must be 'drop' or 'rename'")); resolution.first = resolve_conflicts::content_user; resolution.second = new_optimal_path(idx(args,1)(), false); } else E(false, origin::user, - F(conflict_resolution_not_supported_msg) % idx(args,0) % "duplicate_name"); + F(conflict_resolution_not_supported_msg) % idx(args,1) % "duplicate_name"); } //set_duplicate_name_conflict @@ -335,7 +349,7 @@ set_first_conflict(database & db, else { E(false, origin::user, - F(conflict_resolution_not_supported_msg) % idx(args,0) % "orphaned_node"); + F(conflict_resolution_not_supported_msg) % idx(args,1) % "orphaned_node"); } return; } @@ -377,7 +391,7 @@ set_first_conflict(database & db, // We don't allow the user to specify 'resolved_internal'; that // is only done by automate show_conflicts. E(false, origin::user, - F(conflict_resolution_not_supported_msg) % idx(args,0) % "file_content"); + F(conflict_resolution_not_supported_msg) % idx(args,1) % "file_content"); } return; } ============================================================ --- merge_conflict.cc c76a564607a50a2c6b16b72f478f4346724638ed +++ merge_conflict.cc bf5347a20d07b412f53995f427d0255ca7fd8f62 @@ -65,6 +65,8 @@ namespace symbol const orphaned_file("orphaned_file"); symbol const resolved_drop_left("resolved_drop_left"); symbol const resolved_drop_right("resolved_drop_right"); + symbol const resolved_keep_left("resolved_keep_left"); + symbol const resolved_keep_right("resolved_keep_right"); symbol const resolved_internal("resolved_internal"); symbol const resolved_rename_left("resolved_rename_left"); symbol const resolved_rename_right("resolved_rename_right"); @@ -451,6 +453,19 @@ put_resolution(basic_io::stanza & st, } break; + case resolve_conflicts::keep: + switch (side) + { + case left_side: + st.push_symbol(syms::resolved_keep_left); + break; + + case right_side: + st.push_symbol(syms::resolved_keep_right); + break; + } + break; + default: I(false); } @@ -1755,6 +1770,16 @@ read_duplicate_name_conflict(basic_io::p conflict.right_resolution.first = resolve_conflicts::drop; pars.sym(); } + else if (pars.symp (syms::resolved_keep_left)) + { + conflict.left_resolution.first = resolve_conflicts::keep; + pars.sym(); + } + else if (pars.symp (syms::resolved_keep_right)) + { + conflict.right_resolution.first = resolve_conflicts::keep; + pars.sym(); + } else if (pars.symp (syms::resolved_rename_left)) { conflict.left_resolution.first = resolve_conflicts::rename; @@ -2379,6 +2404,16 @@ resolve_duplicate_name_one_side(lua_hook result_roster.drop_detached_node(nid); break; + case resolve_conflicts::keep: + E(other_resolution.first == resolve_conflicts::drop || + other_resolution.first == resolve_conflicts::rename, + origin::user, + F("inconsistent left/right resolutions for %s") % name); + + P(F("keeping %s") % name); + attach_node (lua, result_roster, nid, name); + break; + case resolve_conflicts::rename: P(F("renaming %s to %s") % name % *resolution.second); attach_node ============================================================ --- merge_roster.cc 65fc3696459523e1a49b234c23760af3f6c361b1 +++ merge_roster.cc e54910bfbd63ee800962d313e433fc79ad3534c1 @@ -36,10 +36,12 @@ image(resolve_conflicts::resolution_t re return "content_user"; case resolve_conflicts::content_internal: return "content_internal"; + case resolve_conflicts::drop: + return "drop"; + case resolve_conflicts::keep: + return "keep"; case resolve_conflicts::rename: return "rename"; - case resolve_conflicts::drop: - return "drop"; } I(false); // keep compiler happy } ============================================================ --- merge_roster.hh 4624e3f09d3b3079bbce87d55b7449410cc65cc3 +++ merge_roster.hh ec7922c9e6b39c157f7ac5b1504090d88bf6b728 @@ -29,7 +29,7 @@ namespace resolve_conflicts namespace resolve_conflicts { - enum resolution_t {none, content_user, content_internal, rename, drop}; + enum resolution_t {none, content_user, content_internal, drop, keep, rename}; typedef std::pair > file_resolution_t; ============================================================ --- monotone.texi 504bf318b689b5b653b3b8c83813cb800e11fb3d +++ monotone.texi b8c50f258a369c78495b703d2a520b87ab259539 @@ -1138,17 +1138,17 @@ @section The Fictional Project example team; other tasks involve only one member. @menu -* Creating a Database:: -* Generating Keys:: -* Starting a New Project:: -* Adding Files:: -* Committing Work:: -* Basic Network Service:: -* Synchronising Databases:: -* Making Changes:: -* Dealing with a Fork:: -* Branching and Merging:: -* Network Service Revisited:: +* Creating a Database:: +* Generating Keys:: +* Starting a New Project:: +* Adding Files:: +* Committing Work:: +* Basic Network Service:: +* Synchronising Databases:: +* Making Changes:: +* Dealing with a Fork:: +* Branching and Merging:: +* Network Service Revisited:: @end menu @@ -3316,8 +3316,9 @@ @subheading Orphaned Node Conflict containing the orphaned files or directories. @command{conflicts} supports resolving this conflict. However, if the -orphaned node is a directory that is not empty, the user must handle -the directory contents first, before invoking the conflicts commands. +orphaned node is a directory that is not empty, and the desired +resolution is 'drop', the user must drop the directory contents and +commit before invoking the conflicts commands. @subheading Multiple Name Conflict @@ -4798,7 +4799,7 @@ @section Tree @page @menu -* Conflicts:: +* Conflicts:: @end menu @node Conflicts, , Tree, Tree @@ -4821,6 +4822,8 @@ @subsection Conflicts directory, or absolute. In the conflict file, they are relative to the workspace root, or absolute. address@hidden Commands + @ftable @command @item mtn conflicts address@hidden store @var{left_rev_id} @var{right_rev_id} Store the conflicts encountered by merging @var{left_rev_id} with @@ -4860,6 +4863,8 @@ @subsection Conflicts convenient way to clean up. @end ftable address@hidden Single file conflict resolutions + For single file conflicts, there are several possible resolutions: @ftable @command @@ -4894,6 +4899,8 @@ @subsection Conflicts @end ftable address@hidden Two file conflict resolutions + For two file conflicts, the possible resolutions are: @ftable @command @@ -4903,6 +4910,12 @@ @subsection Conflicts This inserts a @var{resolved_drop_left} or @var{resolved_drop_right} conflict resolution in the conflicts file. address@hidden keep +The file is kept in the merge. + +This inserts a @var{resolved_keep_left} or @var{resolved_keep_right} +conflict resolution in the conflicts file. + @item rename @var{filename} The file is renamed. @@ -9078,7 +9091,8 @@ @section Automation @item 11.0 -- Add resolution for orphaned node conflicts. Deleted @code{resolved_user} conflict resolution; use @code{resolved_*_left} -for single file conflicts. +for single file conflicts. Add @code{resolved_keep_left, +resolved_keep_right} resolutions. @item 9.0 -- Added default resolution for file content conflicts, user resolutions for others. @code{directory_loop_created} changed to @code{directory_loop}. @@ -9324,6 +9338,8 @@ @section Automation @verbatim resolved_drop_left resolved_drop_right + resolved_keep_left + resolved_keep_right resolved_internal resolved_rename_left file resolved_rename_right file ============================================================ --- tests/resolve_conflicts_all_resolutions/__driver__.lua eb2e2dd5872306f5bbd0328a118806536d74420f +++ tests/resolve_conflicts_all_resolutions/__driver__.lua ecaaa54dedc2398e3c635ddbed2c778309d5e53a @@ -5,26 +5,25 @@ get("merge3_hook.lua") get("merge3_hook.lua") -- Generate a conflicts file, with one conflict for each type of --- resolution. The list of currently supported resolutions is in --- roster_merge.cc, syms declaration; any sym that starts with --- "resolved". +-- resolution (not necessarily all types of conflict). The list of +-- currently supported resolutions is in ../../merge_conflict.cc, syms +-- declaration; any sym that starts with "resolved". -- -- resolution file --- resolved_drop_left checkout_left.sh abe --- resolved_drop_right checkout_right.sh beth +-- -- -- -- -- +-- resolved_drop_left checkout_left.sh abe, gui_left.sh abe +-- resolved_drop_right checkout_right.sh beth, gui_right.sh abe +-- resolved_keep_left gui_left.sh beth +-- resolved_keep_right gui_right.sh beth -- resolved_internal simple_file -- resolved_rename_left thermostat.c -> thermostat-westinghouse.c -- resolved_rename_right thermostat.c -> thermostat-honeywell.c --- resolved_user user_file --- resolved_user interactive_file --- resolved_user_left checkout_left.sh beth --- resolved_user_right checkout_right.sh abe +-- resolved_user_left user_file (single file content conflict) +-- resolved_user_left interactive_file (single file content conflict) +-- resolved_user_left checkout_left.sh beth (two file duplicate name conflict) +-- resolved_user_right checkout_right.sh abe (two file duplicate name conflict) -- -- We can't set 'resolved_internal' directly; it is set by 'conflicts store'. --- --- We have two files that have 'resolved_user' resolutions; one by 'mtn --- conflicts resolve_first user ...', one by 'mtn conflicts --- resolve_first interactive ...'. addfile("simple_file", "simple\none\ntwo\nthree\n") addfile("user_file", "blah blah blah") @@ -32,27 +31,37 @@ base = base_revision() commit() base = base_revision() -addfile("simple_file", "simple\nzero\none\ntwo\nthree\n") -writefile("user_file", "user_file abe 1") -writefile("interactive_file", "interactive_file abe 1") +-- abe creates duplicate name conflicts addfile("checkout_left.sh", "checkout_left.sh abe 1") addfile("checkout_right.sh", "checkout_right.sh abe 1") +addfile("gui_left.sh", "gui_left.sh abe 1") +addfile("gui_right.sh", "gui_right.sh abe 1") addfile("thermostat.c", "thermostat westinghouse") + +-- abe creates content conflicts +writefile("interactive_file", "interactive_file abe 1") +writefile("simple_file", "simple\nzero\none\ntwo\nthree\n") +writefile("user_file", "user_file abe 1") commit("testbranch", "abe_1") abe_1 = base_revision() revert_to(base) -addfile("simple_file", "simple\none\ntwo\nthree\nfour\n") -writefile("user_file", "user_file beth 1") -writefile("interactive_file", "interactive_file beth 1") +-- beth creates duplicate name conflicts addfile("checkout_left.sh", "checkout_left.sh beth 1") addfile("checkout_right.sh", "checkout_right.sh beth 1") +addfile("gui_left.sh", "gui_left.sh beth 1") +addfile("gui_right.sh", "gui_right.sh beth 1") addfile("thermostat.c", "thermostat honeywell") + +-- beth creates content conflicts +writefile("interactive_file", "interactive_file beth 1") +writefile("simple_file", "simple\none\ntwo\nthree\nfour\n") +writefile("user_file", "user_file beth 1") commit("testbranch", "beth_1") beth_1 = base_revision() --- Don't use _MTN/conflicts, to test that capability +-- Test non-default conflicts file name mkdir("resolutions") check (mtn("conflicts", "--conflicts-file=_MTN/conflicts-1", "store", abe_1, beth_1), 0, nil, nil) check(samefilestd("conflicts-1", "_MTN/conflicts-1")) @@ -79,6 +88,24 @@ canonicalize("stderr") check(mtn("conflicts", "--conflicts-file=_MTN/conflicts-1", "show_remaining"), 0, nil, true) canonicalize("stderr") +check(samefilestd("show_remaining-gui_left", "stderr")) + +check(mtn("conflicts", "--conflicts-file=_MTN/conflicts-1", "show_first"), 0, nil, true) +canonicalize("stderr") +check(samefilestd("show_first-gui_left", "stderr")) + +check(mtn("conflicts", "--conflicts-file=_MTN/conflicts-1", "resolve_first_left", "drop"), 0, nil, nil) +check(mtn("conflicts", "--conflicts-file=_MTN/conflicts-1", "resolve_first_right", "keep"), 0, nil, nil) + +check(mtn("conflicts", "--conflicts-file=_MTN/conflicts-1", "show_first"), 0, nil, true) +canonicalize("stderr") +check(samefilestd("show_first-gui_right", "stderr")) + +check(mtn("conflicts", "--conflicts-file=_MTN/conflicts-1", "resolve_first_left", "keep"), 0, nil, nil) +check(mtn("conflicts", "--conflicts-file=_MTN/conflicts-1", "resolve_first_right", "drop"), 0, nil, nil) + +check(mtn("conflicts", "--conflicts-file=_MTN/conflicts-1", "show_remaining"), 0, nil, true) +canonicalize("stderr") check(samefilestd("show_remaining-thermostat", "stderr")) check(mtn("conflicts", "--conflicts-file=_MTN/conflicts-1", "show_first"), 0, nil, true) ============================================================ --- tests/resolve_conflicts_all_resolutions/conflicts-1 09ae554632fc05d64f3f59b9e536380d937895eb +++ tests/resolve_conflicts_all_resolutions/conflicts-1 4c1d8ae2b01f252b6d548856bf0441c152a9f306 @@ -1,5 +1,5 @@ - left [6fcbac878d4e20dc024bf16e63bd88906ac21afd] - right [138053fd821daa41aa98e55641d087da1d70ca2b] + left [30fb5dd7fe7e8ba58f6fc604518f25fef793e365] + right [ceb209a91e2b1d381c0b9321d63f2d3c6558166f] ancestor [ecceebea23b1c81b980671b4cac91ed3421396c3] conflict duplicate_name @@ -20,6 +20,22 @@ right_file_id [838cefbcc3a1add031c1d3b40 conflict duplicate_name left_type "added file" + left_name "gui_left.sh" + left_file_id [ad354b0fe6c51ab0bc23ff9296f94432cb574caa] + right_type "added file" + right_name "gui_left.sh" +right_file_id [5a7628342f1eaf94333a8027d847bf44f717d886] + + conflict duplicate_name + left_type "added file" + left_name "gui_right.sh" + left_file_id [47add69b9a1b5b009b2355e9ac3fd65f005a235a] + right_type "added file" + right_name "gui_right.sh" +right_file_id [17a92f515839728d81893c43edc41544a0996f8d] + + conflict duplicate_name + left_type "added file" left_name "thermostat.c" left_file_id [4cdcec6fa2f9d5c075d5b80d03c708c8e4801196] right_type "added file" ============================================================ --- tests/resolve_conflicts_all_resolutions/conflicts-resolved 9bf71467379c69188e16ed3f0a1b9b2368c4dc8b +++ tests/resolve_conflicts_all_resolutions/conflicts-resolved c9f5081f8635b66f94e7b6cb5e94362f04efecf7 @@ -1,5 +1,5 @@ - left [6fcbac878d4e20dc024bf16e63bd88906ac21afd] - right [138053fd821daa41aa98e55641d087da1d70ca2b] + left [30fb5dd7fe7e8ba58f6fc604518f25fef793e365] + right [ceb209a91e2b1d381c0b9321d63f2d3c6558166f] ancestor [ecceebea23b1c81b980671b4cac91ed3421396c3] conflict duplicate_name @@ -22,6 +22,26 @@ resolved_drop_right resolved_user_left "resolutions/checkout_right.sh" resolved_drop_right + conflict duplicate_name + left_type "added file" + left_name "gui_left.sh" + left_file_id [ad354b0fe6c51ab0bc23ff9296f94432cb574caa] + right_type "added file" + right_name "gui_left.sh" + right_file_id [5a7628342f1eaf94333a8027d847bf44f717d886] + resolved_drop_left +resolved_keep_right + + conflict duplicate_name + left_type "added file" + left_name "gui_right.sh" + left_file_id [47add69b9a1b5b009b2355e9ac3fd65f005a235a] + right_type "added file" + right_name "gui_right.sh" + right_file_id [17a92f515839728d81893c43edc41544a0996f8d] + resolved_keep_left +resolved_drop_right + conflict duplicate_name left_type "added file" left_name "thermostat.c" ============================================================ --- tests/resolve_conflicts_all_resolutions/merge-1 ee814b8ca07cd8626aeb8fd00052909488c48136 +++ tests/resolve_conflicts_all_resolutions/merge-1 4026a57330dfa66af8afa0eccd8aad978793991d @@ -1,12 +1,16 @@ -mtn: [left] 6fcbac878d4e20dc024bf16e63bd88906ac21afd -mtn: [right] 138053fd821daa41aa98e55641d087da1d70ca2b +mtn: [left] 30fb5dd7fe7e8ba58f6fc604518f25fef793e365 +mtn: [right] ceb209a91e2b1d381c0b9321d63f2d3c6558166f mtn: dropping checkout_left.sh mtn: replacing content of checkout_left.sh with resolutions/checkout_left.sh mtn: replacing content of checkout_right.sh with resolutions/checkout_right.sh mtn: dropping checkout_right.sh +mtn: dropping gui_left.sh +mtn: keeping gui_left.sh +mtn: keeping gui_right.sh +mtn: dropping gui_right.sh mtn: renaming thermostat.c to thermostat-westinghouse.c mtn: renaming thermostat.c to thermostat-honeywell.c mtn: replacing content of interactive_file, interactive_file with _MTN/resolutions/interactive_file mtn: merged simple_file, simple_file mtn: replacing content of user_file, user_file with resolutions/user_file -mtn: [merged] 7bc079fffbffc9119869c770768e62ea058e35af +mtn: [merged] 6363bd08ae08d7e57067ba6476f76417c72f1a25 ============================================================ --- tests/resolve_conflicts_all_resolutions/show_first-checkout_left eea1125a2012131fde7cb392fb3e4900df9bcf26 +++ tests/resolve_conflicts_all_resolutions/show_first-checkout_left 76dd741b05d28ee8de76d364e3d5c22d8479b12a @@ -1,8 +1,10 @@ mtn: resolve_first_left drop mtn: duplicate_name checkout_left.sh mtn: possible resolutions: mtn: resolve_first_left drop +mtn: resolve_first_left keep mtn: resolve_first_left rename "name" mtn: resolve_first_left user "name" mtn: resolve_first_right drop +mtn: resolve_first_right keep mtn: resolve_first_right rename "name" mtn: resolve_first_right user "name" ============================================================ --- tests/resolve_conflicts_all_resolutions/show_first-checkout_right 7059285f7bb0d9c3f1940949cb9511d8a1c2e5a8 +++ tests/resolve_conflicts_all_resolutions/show_first-checkout_right bc0da058f3eb73b3633180f77fe80f983c28bc5b @@ -1,8 +1,10 @@ mtn: resolve_first_left drop mtn: duplicate_name checkout_right.sh mtn: possible resolutions: mtn: resolve_first_left drop +mtn: resolve_first_left keep mtn: resolve_first_left rename "name" mtn: resolve_first_left user "name" mtn: resolve_first_right drop +mtn: resolve_first_right keep mtn: resolve_first_right rename "name" mtn: resolve_first_right user "name" ============================================================ --- tests/resolve_conflicts_all_resolutions/show_first-thermostat 2ee635f6f68eaf75346d6c5ac413c1483e773a10 +++ tests/resolve_conflicts_all_resolutions/show_first-thermostat 745ee45027aab1ed00b0bf53a1002ced2db9b968 @@ -1,8 +1,10 @@ mtn: resolve_first_left drop mtn: duplicate_name thermostat.c mtn: possible resolutions: mtn: resolve_first_left drop +mtn: resolve_first_left keep mtn: resolve_first_left rename "name" mtn: resolve_first_left user "name" mtn: resolve_first_right drop +mtn: resolve_first_right keep mtn: resolve_first_right rename "name" mtn: resolve_first_right user "name" ============================================================ --- tests/resolve_conflicts_all_resolutions/show_remaining-checkout_left 457e3d43e1c99cff6224665099b74068733ed97a +++ tests/resolve_conflicts_all_resolutions/show_remaining-checkout_left 47e8b008117563185c055526be84fa00dac95fb4 @@ -1,5 +1,7 @@ mtn: duplicate_name checkout_right.sh mtn: duplicate_name checkout_left.sh mtn: duplicate_name checkout_right.sh +mtn: duplicate_name gui_left.sh +mtn: duplicate_name gui_right.sh mtn: duplicate_name thermostat.c mtn: content interactive_file mtn: content user_file ============================================================ --- tests/resolve_conflicts_errors/__driver__.lua 7688ba18626d29beb5aec22e208b74551bf4baa1 +++ tests/resolve_conflicts_errors/__driver__.lua 972e02d35c515a9ef5e9d14310698129985e125d @@ -89,6 +89,6 @@ canonicalize("stdout") check(mtn("conflicts", "resolve_first_right", "user", "checkout.sh"), 1, nil, true) check(grep("-v", "detected at", "stderr"), 0, true) canonicalize("stdout") -check("mtn: misuse: left and right resolutions cannot both be 'user'\n" == readfile("stdout")) +check("mtn: misuse: other resolution must be 'drop' or 'rename'\n" == readfile("stdout")) -- end of file