[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Monotone-commits-diffs] net.venge.monotone.issue-209: 544ac7c8203751d61
From: |
code |
Subject: |
[Monotone-commits-diffs] net.venge.monotone.issue-209: 544ac7c8203751d61f6ccc016d6b0a28cb1e7596 |
Date: |
Sun, 3 Jun 2012 17:47:16 +0200 (CEST) |
revision: 544ac7c8203751d61f6ccc016d6b0a28cb1e7596
date: 2012-06-01T08:58:00
author: address@hidden
branch: net.venge.monotone.issue-209
changelog:
resolve_dropped_modified; progress, still fails tests
* src/merge_content.hh:
* src/merge_content.cc:
* src/cmd_merging.cc: add nis to resolve_merge_conflicts
* src/merge_conflict.cc (resolve_dropped_modified_conflicts): change keep, user
to drop/add new
* src/merge_roster.hh: add nis to resolve_dropped_modified_conflicts
* test/func/resolve_conflicts_dropped_modified/__driver__.lua: improve test
manifest:
format_version "1"
new_manifest [0230d1fa921775b0d9d1e21032cf31edf562669f]
old_revision [be008714e09af86a72e27ae7044cb85b9e689909]
patch "src/cmd_merging.cc"
from [7050a2b91ad9a15d6b8066c2b5e54bb96c87265c]
to [149b3d0a65bd2822f88e9838815aea01d827fc67]
patch "src/merge_conflict.cc"
from [15f8399fb683061a7f301d74f34d93af9d75dc98]
to [6f0a13f140b97c5b8d2f4edfd327882d6006afe8]
patch "src/merge_content.cc"
from [f3b9e82e6c46b53d17147068607cec03d581957b]
to [3f38508142269cd629be6760713f636ed75bbbfd]
patch "src/merge_content.hh"
from [c74c14bb8031b9bf67f684d9ddfdf6624f424f01]
to [c8fec9bc061a8a7ad9729ece909fde64e31b55ae]
patch "src/merge_roster.hh"
from [0756147ceb36ee1af0d2eb02371587b3c8a8ffe6]
to [90740a700bceeecc6f662663246ddbe655f2edcb]
patch "test/func/resolve_conflicts_dropped_modified/__driver__.lua"
from [939ea819f903966c0d0cf89ceb8375d5f2c40e6c]
to [a77c8e0b701e417014bf7958f8f2e8ed922586c6]
============================================================
--- src/cmd_merging.cc 7050a2b91ad9a15d6b8066c2b5e54bb96c87265c
+++ src/cmd_merging.cc 149b3d0a65bd2822f88e9838815aea01d827fc67
@@ -329,7 +329,7 @@ update(app_state & app,
left_markings, right_markings, paths);
wca.cache_roster(working_rid, working_roster);
resolve_merge_conflicts(app.lua, app.opts, *working_roster, chosen_roster,
- result, wca, false);
+ result, wca, nis, false);
// Make sure it worked...
I(result.is_clean());
@@ -719,6 +719,7 @@ void perform_merge_into_dir(app_state &
right_uncommon_ancestors,
result);
+ temp_node_id_source nis;
content_merge_database_adaptor
dba(db, left_rid, right_rid, left_marking_map, right_marking_map);
@@ -728,7 +729,7 @@ void perform_merge_into_dir(app_state &
(app.opts, left_rid, left_roster, right_rid, right_roster, result, resolutions_given);
resolve_merge_conflicts(app.lua, app.opts, left_roster, right_roster,
- result, dba, resolutions_given);
+ result, dba, nis, resolutions_given);
{
dir_t moved_root = left_roster.root();
@@ -872,10 +873,11 @@ CMD(merge_into_workspace, "merge_into_wo
map<file_id, file_path> paths;
get_content_paths(*working_roster, paths);
+ temp_node_id_source nis;
content_merge_workspace_adaptor wca(db, lca_id, lca.first,
*left.second, *right.second, paths);
wca.cache_roster(working_rid, working_roster);
- resolve_merge_conflicts(app.lua, app.opts, *left.first, *right.first, merge_result, wca, false);
+ resolve_merge_conflicts(app.lua, app.opts, *left.first, *right.first, merge_result, wca, nis, false);
// Make sure it worked...
I(merge_result.is_clean());
@@ -1405,7 +1407,7 @@ CMD(pluck, "pluck", "", CMD_REF(workspac
wca.cache_roster(to_rid, to_roster);
resolve_merge_conflicts(app.lua, app.opts, *working_roster, *to_roster,
- result, wca, false);
+ result, wca, nis, false);
I(result.is_clean());
// temporary node ids may appear
============================================================
--- src/merge_conflict.cc 15f8399fb683061a7f301d74f34d93af9d75dc98
+++ src/merge_conflict.cc 6f0a13f140b97c5b8d2f4edfd327882d6006afe8
@@ -2590,7 +2590,8 @@ roster_merge_result::resolve_dropped_mod
roster_merge_result::resolve_dropped_modified_conflicts(lua_hooks & lua,
roster_t const & left_roster,
roster_t const & right_roster,
- content_merge_adaptor & adaptor)
+ content_merge_adaptor & adaptor,
+ temp_node_id_source & nis)
{
MM(left_roster);
MM(right_roster);
@@ -2632,21 +2633,20 @@ roster_merge_result::resolve_dropped_mod
modified_name % conflict.resolution.second->as_external());
{
- file_data modified_data, result_data;
+ // See comments in keep below on why we drop first
+ roster.drop_detached_node(nid);
+
+ file_data result_data;
data result_raw_data;
file_id result_fid;
- adaptor.get_version(modified_fid, modified_data);
-
read_data(*conflict.resolution.second, result_raw_data);
result_data = file_data(result_raw_data);
calculate_ident(result_data, result_fid);
- file_t result_node = downcast_to_file_t(roster.get_node_for_update(nid));
- result_node->content = result_fid;
+ // FIXME: need to record file in db
+ nid = roster.create_file_node(result_fid, nis);
- adaptor.record_file(modified_fid, result_fid, modified_data, result_data);
-
attach_node(lua, roster, nid, modified_name);
}
break;
@@ -2659,6 +2659,17 @@ roster_merge_result::resolve_dropped_mod
case resolve_conflicts::keep:
P(F("keeping '%s'") % modified_name);
+
+ // We'd like to just attach_node here, but that violates a
+ // fundamental design principle of mtn; nodes are born once, and
+ // die once. If we attach here, the node is born, died, and then
+ // born again.
+ //
+ // So we have to drop the old node, and create a new node with the
+ // same contents. That loses history; 'mtn log <path>' will end
+ // here, not showing the history of the original node.
+ roster.drop_detached_node(nid);
+ nid = roster.create_file_node(modified_fid, nis);
attach_node (lua, roster, nid, modified_name);
break;
============================================================
--- src/merge_content.cc f3b9e82e6c46b53d17147068607cec03d581957b
+++ src/merge_content.cc 3f38508142269cd629be6760713f636ed75bbbfd
@@ -644,6 +644,7 @@ resolve_merge_conflicts(lua_hooks & lua,
roster_t const & right_roster,
roster_merge_result & result,
content_merge_adaptor & adaptor,
+ temp_node_id_source & nis,
const bool resolutions_given)
{
if (!result.is_clean())
@@ -669,7 +670,7 @@ resolve_merge_conflicts(lua_hooks & lua,
// resolve the ones we can, if they have resolutions specified
result.resolve_orphaned_node_conflicts(lua, left_roster, right_roster, adaptor);
- result.resolve_dropped_modified_conflicts(lua, left_roster, right_roster, adaptor);
+ result.resolve_dropped_modified_conflicts(lua, left_roster, right_roster, adaptor, nis);
result.resolve_duplicate_name_conflicts(lua, left_roster, right_roster, adaptor);
result.resolve_file_content_conflicts(lua, left_roster, right_roster, adaptor);
}
@@ -755,12 +756,13 @@ interactive_merge_and_store(lua_hooks &
result);
bool resolutions_given;
+ temp_node_id_source nis;
content_merge_database_adaptor dba(db, left_rid, right_rid,
left_marking_map, right_marking_map);
parse_resolve_conflicts_opts (opts, left_rid, left_roster, right_rid, right_roster, result, resolutions_given);
- resolve_merge_conflicts(lua, opts, left_roster, right_roster, result, dba, resolutions_given);
+ resolve_merge_conflicts(lua, opts, left_roster, right_roster, result, dba, nis, resolutions_given);
// write new files into the db
store_roster_merge_result(db,
@@ -779,7 +781,7 @@ store_roster_merge_result(database & db,
{
I(result.is_clean());
roster_t & merged_roster = result.roster;
- merged_roster.check_sane();
+ merged_roster.check_sane(true); // resolve conflicts can create new nodes
revision_t merged_rev;
merged_rev.made_for = made_for_database;
============================================================
--- src/merge_content.hh c74c14bb8031b9bf67f684d9ddfdf6624f424f01
+++ src/merge_content.hh c8fec9bc061a8a7ad9729ece909fde64e31b55ae
@@ -1,5 +1,5 @@
// Copyright (C) 2005 Nathaniel Smith <address@hidden>
-// 2008, 2010 Stephen Leake <address@hidden>
+// 2008, 2010, 2012 Stephen Leake <address@hidden>
//
// This program is made available under the GNU GPL version 2.0 or
// greater. See the accompanying file COPYING for details.
@@ -12,6 +12,7 @@
#define __MERGE_HH__
#include "vocab.hh"
+#include "roster.hh"
#include "rev_types.hh"
#include "paths.hh"
@@ -259,6 +260,7 @@ resolve_merge_conflicts(lua_hooks & lua,
roster_t const & right_roster,
roster_merge_result & result,
content_merge_adaptor & adaptor,
+ temp_node_id_source & nis,
bool const resolutions_given);
// traditional resolve-all-conflicts-as-you-go style merging with 3-way merge
============================================================
--- src/merge_roster.hh 0756147ceb36ee1af0d2eb02371587b3c8a8ffe6
+++ src/merge_roster.hh 90740a700bceeecc6f662663246ddbe655f2edcb
@@ -247,7 +247,8 @@ struct roster_merge_result
void resolve_dropped_modified_conflicts(lua_hooks & lua,
roster_t const & left_roster,
roster_t const & right_roster,
- content_merge_adaptor & adaptor);
+ content_merge_adaptor & adaptor,
+ temp_node_id_source & nis);
void report_duplicate_name_conflicts(roster_t const & left,
roster_t const & right,
============================================================
--- test/func/resolve_conflicts_dropped_modified/__driver__.lua 939ea819f903966c0d0cf89ceb8375d5f2c40e6c
+++ test/func/resolve_conflicts_dropped_modified/__driver__.lua a77c8e0b701e417014bf7958f8f2e8ed922586c6
@@ -152,8 +152,9 @@ check(qgrep("keeping 'file_5'", "stderr"
check(qgrep("dropping 'file_3_renamed'", "stderr"))
check(qgrep("keeping 'file_4'", "stderr"))
check(qgrep("keeping 'file_5'", "stderr"))
-check(qgrep("replacing 'file_6_renamed' with '_MTN/resolutions/file_6_resolved", "stderr"))
-check(qgrep("replacing 'file_7_renamed' with '_MTN/resolutions/file_7_resolved", "stderr"))
+check(qgrep("replacing content of 'file_6_renamed' with '_MTN/resolutions/file_6_resolved", "stderr"))
+check(qgrep("replacing content of 'file_7_renamed' with '_MTN/resolutions/file_7_resolved", "stderr"))
+check(not qgrep("warning", "stderr"))
-- FIXME: add dropped_modified to 'show_conflicts' test (etc?)
-- better to put those tests here
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Monotone-commits-diffs] net.venge.monotone.issue-209: 544ac7c8203751d61f6ccc016d6b0a28cb1e7596,
code <=