# # # patch "cmd_merging.cc" # from [95ca3dac2c1c67d5e330ea37a34a8a541200cc2b] # to [0f8c0d8308a37a4477d1d2eb1d696144d8ab2fe0] # # patch "cmd_netsync.cc" # from [3c096db6a66e44ba35629da3aa7d19aa3f830ed7] # to [ed958b8d660c96e0a0d3f212bc915bdc37f33587] # # patch "cmd_ws_commit.cc" # from [efa32bdc2827fb72d86f4a2362bf1a0c9a325440] # to [edaf65d2c5ef37448d14ca60863af76ca22d49cf] # # patch "diff_patch.cc" # from [822945b5ae0d751574256250157b6bd1383633c7] # to [bf0138e49ccc702cb042fa0f95e272e3a072ea96] # # patch "diff_patch.hh" # from [ae5f59a69f0e07c5360b424c3a967b7031232a74] # to [172cec4dd2b4e2bb80b454660910313a97cff8a7] # # patch "merge.cc" # from [0bf98c2c7ff106686c0b4d2aaca3233d1ef37155] # to [cc1fbab1643cd6188637296b9806c637134c1f78] # # patch "merge.hh" # from [f12a288adf1d3b16c7687444011313d34a4e9a03] # to [e37513afabd41ebafa5bc2b42a42121900c23269] # ============================================================ --- cmd_merging.cc 95ca3dac2c1c67d5e330ea37a34a8a541200cc2b +++ cmd_merging.cc 0f8c0d8308a37a4477d1d2eb1d696144d8ab2fe0 @@ -272,11 +272,11 @@ CMD(update, "update", "", CMD_REF(worksp map paths; get_content_paths(*working_roster, paths); - content_merge_workspace_adaptor wca(app, old_rid, old_roster, + content_merge_workspace_adaptor wca(app.db, old_rid, old_roster, left_markings, right_markings, paths); wca.cache_roster(working_rid, working_roster); resolve_merge_conflicts(*working_roster, chosen_roster, - result, wca, app); + result, wca, app.lua); // Make sure it worked... I(result.is_clean()); @@ -354,7 +354,7 @@ merge_two(revision_id const & left, revi revision_id merged; transaction_guard guard(app.db); - interactive_merge_and_store(left, right, merged, app); + interactive_merge_and_store(left, right, merged, app.db, app.lua); app.get_project().put_standard_certs_from_options(merged, branch, @@ -607,14 +607,14 @@ CMD(merge_into_dir, "merge_into_dir", "" result); content_merge_database_adaptor - dba(app, left_rid, right_rid, left_marking_map, right_marking_map); + dba(app.db, left_rid, right_rid, left_marking_map, right_marking_map); { rsa_keypair_id key; get_user_key(key, app.db); } resolve_merge_conflicts(left_roster, right_roster, - result, dba, app); + result, dba, app.lua); { dir_t moved_root = left_roster.root(); @@ -719,10 +719,10 @@ CMD(merge_into_workspace, "merge_into_wo map paths; get_content_paths(*working_roster, paths); - content_merge_workspace_adaptor wca(app, lca_id, lca.first, + content_merge_workspace_adaptor wca(app.db, lca_id, lca.first, *left.second, *right.second, paths); wca.cache_roster(working_rid, working_roster); - resolve_merge_conflicts(*left.first, *right.first, merge_result, wca, app); + resolve_merge_conflicts(*left.first, *right.first, merge_result, wca, app.lua); // Make sure it worked... I(merge_result.is_clean()); @@ -821,7 +821,7 @@ CMD(show_conflicts, "show_conflicts", "" } else { - content_merge_database_adaptor adaptor(app, l_id, r_id, + content_merge_database_adaptor adaptor(app.db, l_id, r_id, l_marking, r_marking); result.report_missing_root_conflicts(l_roster, r_roster, adaptor); @@ -974,7 +974,7 @@ CMD(pluck, "pluck", "", CMD_REF(workspac map paths; get_content_paths(*working_roster, paths); - content_merge_workspace_adaptor wca(app, from_rid, from_roster, + content_merge_workspace_adaptor wca(app.db, from_rid, from_roster, left_markings, right_markings, paths); wca.cache_roster(working_rid, working_roster); @@ -983,7 +983,7 @@ CMD(pluck, "pluck", "", CMD_REF(workspac wca.cache_roster(to_rid, to_roster); resolve_merge_conflicts(*working_roster, *to_roster, - result, wca, app); + result, wca, app.lua); I(result.is_clean()); // temporary node ids may appear ============================================================ --- cmd_netsync.cc 3c096db6a66e44ba35629da3aa7d19aa3f830ed7 +++ cmd_netsync.cc ed958b8d660c96e0a0d3f212bc915bdc37f33587 @@ -380,7 +380,7 @@ CMD(clone, "clone", "", CMD_REF(network) cset checkout; make_cset(*empty_roster, current_roster, checkout); - content_merge_checkout_adaptor wca(app); + content_merge_checkout_adaptor wca(app.db); app.work.perform_content_update(checkout, wca, false); ============================================================ --- cmd_ws_commit.cc efa32bdc2827fb72d86f4a2362bf1a0c9a325440 +++ cmd_ws_commit.cc edaf65d2c5ef37448d14ca60863af76ca22d49cf @@ -617,7 +617,7 @@ CMD(checkout, "checkout", "co", CMD_REF( cset checkout; make_cset(*empty_roster, current_roster, checkout); - content_merge_checkout_adaptor wca(app); + content_merge_checkout_adaptor wca(app.db); app.work.perform_content_update(checkout, wca, false); ============================================================ --- diff_patch.cc 822945b5ae0d751574256250157b6bd1383633c7 +++ diff_patch.cc bf0138e49ccc702cb042fa0f95e272e3a072ea96 @@ -28,8 +28,8 @@ #include "revision.hh" #include "constants.hh" #include "file_io.hh" -#include "app_state.hh" #include "pcrewrap.hh" +#include "lua_hooks.hh" using std::make_pair; using std::map; @@ -488,17 +488,17 @@ bool merge3(vector const & ances /////////////////////////////////////////////////////////////////////////// -content_merge_database_adaptor::content_merge_database_adaptor(app_state & app, +content_merge_database_adaptor::content_merge_database_adaptor(database & db, revision_id const & left, revision_id const & right, marking_map const & left_mm, marking_map const & right_mm) - : app(app), left_mm(left_mm), right_mm(right_mm) + : db(db), left_mm(left_mm), right_mm(right_mm) { // FIXME: possibly refactor to run this lazily, as we don't // need to find common ancestors if we're never actually // called on to do content merging. - find_common_ancestor_for_merge(left, right, lca, app.db); + find_common_ancestor_for_merge(left, right, lca, db); } void @@ -512,19 +512,19 @@ content_merge_database_adaptor::record_m L(FL("recording successful merge of %s <-> %s into %s") % left_ident % right_ident % merged_ident); - transaction_guard guard(app.db); + transaction_guard guard(db); if (!(left_ident == merged_ident)) { delta left_delta; diff(left_data.inner(), merged_data.inner(), left_delta); - app.db.put_file_version(left_ident, merged_ident, file_delta(left_delta)); + db.put_file_version(left_ident, merged_ident, file_delta(left_delta)); } if (!(right_ident == merged_ident)) { delta right_delta; diff(right_data.inner(), merged_data.inner(), right_delta); - app.db.put_file_version(right_ident, merged_ident, file_delta(right_delta)); + db.put_file_version(right_ident, merged_ident, file_delta(right_delta)); } guard.commit(); } @@ -533,7 +533,7 @@ load_and_cache_roster(revision_id const load_and_cache_roster(revision_id const & rid, map > & rmap, shared_ptr & rout, - app_state & app) + database & db) { map >::const_iterator i = rmap.find(rid); if (i != rmap.end()) @@ -541,7 +541,7 @@ load_and_cache_roster(revision_id const else { database::cached_roster cr; - app.db.get_roster(rid, cr); + db.get_roster(rid, cr); safe_insert(rmap, make_pair(rid, cr.first)); rout = cr.first; } @@ -559,7 +559,7 @@ content_merge_database_adaptor::get_ance // Begin by loading any non-empty file lca roster rid = lca; if (!lca.inner()().empty()) - load_and_cache_roster(lca, rosters, anc, app); + load_and_cache_roster(lca, rosters, anc, db); // If there is no LCA, or the LCA's roster doesn't contain the file, // then use the file's birth roster. @@ -587,7 +587,7 @@ content_merge_database_adaptor::get_ance rid = lmm->second.birth_revision; } - load_and_cache_roster(rid, rosters, anc, app); + load_and_cache_roster(rid, rosters, anc, db); } I(anc); } @@ -596,7 +596,7 @@ content_merge_database_adaptor::get_vers content_merge_database_adaptor::get_version(file_id const & ident, file_data & dat) const { - app.db.get_file_version(ident, dat); + db.get_file_version(ident, dat); } @@ -604,7 +604,6 @@ content_merge_database_adaptor::get_vers // content_merge_workspace_adaptor /////////////////////////////////////////////////////////////////////////// - void content_merge_workspace_adaptor::cache_roster(revision_id const & rid, boost::shared_ptr roster) @@ -663,7 +662,7 @@ content_merge_workspace_adaptor::get_anc rid = lmm->second.birth_revision; } - load_and_cache_roster(rid, rosters, anc, app); + load_and_cache_roster(rid, rosters, anc, db); } I(anc); } @@ -675,8 +674,8 @@ content_merge_workspace_adaptor::get_ver map::const_iterator i = temporary_store.find(ident); if (i != temporary_store.end()) dat = i->second; - else if (app.db.file_version_exists(ident)) - app.db.get_file_version(ident, dat); + else if (db.file_version_exists(ident)) + db.get_file_version(ident, dat); else { data tmp; @@ -724,7 +723,7 @@ content_merge_checkout_adaptor::get_vers content_merge_checkout_adaptor::get_version(file_id const & ident, file_data & dat) const { - app.db.get_file_version(ident, dat); + db.get_file_version(ident, dat); } @@ -732,18 +731,6 @@ content_merge_checkout_adaptor::get_vers // content_merger /////////////////////////////////////////////////////////////////////////// -content_merger::content_merger(app_state & app, - roster_t const & anc_ros, - roster_t const & left_ros, - roster_t const & right_ros, - content_merge_adaptor & adaptor) - : app(app), - anc_ros(anc_ros), - left_ros(left_ros), - right_ros(right_ros), - adaptor(adaptor) -{} - string content_merger::get_file_encoding(file_path const & path, roster_t const & ros) @@ -889,9 +876,9 @@ content_merger::try_user_merge(file_path % right_path % merged_path); - if (app.lua.hook_merge3(anc_path, left_path, right_path, merged_path, - ancestor_unpacked, left_unpacked, - right_unpacked, merged_unpacked)) + if (lua.hook_merge3(anc_path, left_path, right_path, merged_path, + ancestor_unpacked, left_unpacked, + right_unpacked, merged_unpacked)) { hexenc tmp_id; file_data merge_data; ============================================================ --- diff_patch.hh ae5f59a69f0e07c5360b424c3a967b7031232a74 +++ diff_patch.hh 172cec4dd2b4e2bb80b454660910313a97cff8a7 @@ -18,7 +18,8 @@ #include #include "vector.hh" -class app_state; +class database; +class lua_hooks; struct conflict {}; @@ -64,12 +65,12 @@ content_merge_database_adaptor content_merge_database_adaptor : public content_merge_adaptor { - app_state & app; + database & db; revision_id lca; marking_map const & left_mm; marking_map const & right_mm; std::map > rosters; - content_merge_database_adaptor(app_state & app, + content_merge_database_adaptor(database & db, revision_id const & left, revision_id const & right, marking_map const & left_mm, @@ -94,20 +95,20 @@ content_merge_workspace_adaptor : public content_merge_adaptor { std::map temporary_store; - app_state & app; + database & db; revision_id const lca; boost::shared_ptr base; marking_map const & left_mm; marking_map const & right_mm; std::map > rosters; std::map content_paths; - content_merge_workspace_adaptor(app_state & app, + content_merge_workspace_adaptor(database & db, revision_id const & lca, boost::shared_ptr base, marking_map const & left_mm, marking_map const & right_mm, std::map const & paths) - : app(app), lca(lca), base(base), + : db(db), lca(lca), base(base), left_mm(left_mm), right_mm(right_mm), content_paths(paths) {} @@ -133,9 +134,9 @@ content_merge_checkout_adaptor content_merge_checkout_adaptor : public content_merge_adaptor { - app_state & app; - content_merge_checkout_adaptor(app_state & app) - : app(app) + database & db; + content_merge_checkout_adaptor(database & db) + : db(db) {} void record_merge(file_id const & left_ident, @@ -157,18 +158,24 @@ struct content_merger struct content_merger { - app_state & app; + lua_hooks & lua; roster_t const & anc_ros; roster_t const & left_ros; roster_t const & right_ros; content_merge_adaptor & adaptor; - content_merger(app_state & app, + content_merger(lua_hooks & lua, roster_t const & anc_ros, roster_t const & left_ros, roster_t const & right_ros, - content_merge_adaptor & adaptor); + content_merge_adaptor & adaptor) + : lua(lua), + anc_ros(anc_ros), + left_ros(left_ros), + right_ros(right_ros), + adaptor(adaptor) + {} // merge3 on a file (line by line) bool try_auto_merge(file_path const & anc_path, ============================================================ --- merge.cc 0bf98c2c7ff106686c0b4d2aaca3233d1ef37155 +++ merge.cc cc1fbab1643cd6188637296b9806c637134c1f78 @@ -18,7 +18,6 @@ #include "roster_merge.hh" #include "safe_map.hh" #include "transforms.hh" -#include "app_state.hh" using std::make_pair; using std::map; @@ -43,7 +42,7 @@ namespace } void - try_to_merge_files(app_state & app, + try_to_merge_files(lua_hooks & lua, roster_t const & left_roster, roster_t const & right_roster, roster_merge_result & result, content_merge_adaptor & adaptor, merge_method const method) @@ -75,7 +74,7 @@ namespace file_id merged_id; - content_merger cm(app, *roster_for_file_lca, + content_merger cm(lua, *roster_for_file_lca, left_roster, right_roster, adaptor); @@ -128,7 +127,7 @@ resolve_merge_conflicts(roster_t const & roster_t const & right_roster, roster_merge_result & result, content_merge_adaptor & adaptor, - app_state & app) + lua_hooks & lua) { // FIXME_ROSTERS: we only have code (below) to invoke the // line-merger on content conflicts. Other classes of conflict will @@ -159,7 +158,7 @@ resolve_merge_conflicts(roster_t const & L(FL("examining content conflicts")); - try_to_merge_files(app, left_roster, right_roster, + try_to_merge_files(lua, left_roster, right_roster, result, adaptor, auto_merge); size_t remaining = result.file_content_conflicts.size(); @@ -169,7 +168,7 @@ resolve_merge_conflicts(roster_t const & result.report_file_content_conflicts(left_roster, right_roster, adaptor); } - try_to_merge_files(app, left_roster, right_roster, + try_to_merge_files(lua, left_roster, right_roster, result, adaptor, user_merge); } @@ -181,16 +180,16 @@ interactive_merge_and_store(revision_id interactive_merge_and_store(revision_id const & left_rid, revision_id const & right_rid, revision_id & merged_rid, - app_state & app) + database & db, lua_hooks & lua) { roster_t left_roster, right_roster; marking_map left_marking_map, right_marking_map; set left_uncommon_ancestors, right_uncommon_ancestors; - app.db.get_roster(left_rid, left_roster, left_marking_map); - app.db.get_roster(right_rid, right_roster, right_marking_map); - app.db.get_uncommon_ancestors(left_rid, right_rid, - left_uncommon_ancestors, right_uncommon_ancestors); + db.get_roster(left_rid, left_roster, left_marking_map); + db.get_roster(right_rid, right_roster, right_marking_map); + db.get_uncommon_ancestors(left_rid, right_rid, + left_uncommon_ancestors, right_uncommon_ancestors); roster_merge_result result; @@ -206,15 +205,15 @@ interactive_merge_and_store(revision_id right_roster, right_marking_map, right_uncommon_ancestors, result); - content_merge_database_adaptor dba(app, left_rid, right_rid, + content_merge_database_adaptor dba(db, left_rid, right_rid, left_marking_map, right_marking_map); resolve_merge_conflicts(left_roster, right_roster, - result, dba, app); + result, dba, lua); // write new files into the db store_roster_merge_result(left_roster, right_roster, result, left_rid, right_rid, merged_rid, - app.db); + db); } void ============================================================ --- merge.hh f12a288adf1d3b16c7687444011313d34a4e9a03 +++ merge.hh e37513afabd41ebafa5bc2b42a42121900c23269 @@ -12,7 +12,8 @@ #include "vocab.hh" -class app_state; +class database; +class lua_hooks; class roster_t; // Destructively alter a roster_merge_result to attempt to remove any @@ -28,7 +29,7 @@ resolve_merge_conflicts(roster_t const & roster_t const & right_roster, roster_merge_result & result, content_merge_adaptor & adaptor, - app_state & app); + lua_hooks & lua); // traditional resolve-all-conflicts-as-you-go style merging with 3-way merge // for file texts @@ -43,7 +44,7 @@ interactive_merge_and_store(revision_id // revision and its merged files not being written back to the db void interactive_merge_and_store(revision_id const & left, revision_id const & right, - revision_id & merged, app_state & app); + revision_id & merged, database & db, lua_hooks & lua); void store_roster_merge_result(roster_t const & left_roster,