# # # patch "automate.cc" # from [f3959ab3d355a49eb5b957689ddc8172587a5f02] # to [7cdbf648bead873a24451286f474678903af09b9] # # patch "cert.cc" # from [3fc31d229cfee22f7cf64ea473ff589efc31322c] # to [74f04c20c158a6cef03e39f0faf5590b1d8c19ec] # # patch "cert.hh" # from [4c371d6c98080824726b4b48529d85c430f3c5ee] # to [68d4b95d0eed546a10c00cbd58cf998383fe1c33] # # patch "cmd_key_cert.cc" # from [7ad1ea9539f5a89078d0ad592627a703345a9702] # to [b80c5e664a6ccb34aa9ea6882e0f2025720badd4] # # patch "cmd_list.cc" # from [6469ed5180cdbbee6624d729a67b02b32a1a164d] # to [26c98511538702f696669ffcb7a36bfdc9718b7b] # # patch "cmd_merging.cc" # from [5bdc3a199fbb821122122965ee2de162cf6ec4db] # to [e42ee860d4797c7be2497a0ba9797b2c53109139] # # patch "cmd_netsync.cc" # from [9bc7de6d975efa195491f71370b39929009bbcad] # to [3228c11dbb5651fd8277eea24faa690596ff9a09] # # patch "cmd_policy.cc" # from [9aaf990cedfd5765aea57d0105b680a287d767ac] # to [a6767f052d77500ef08f244bfa2890988f20de09] # # patch "enumerator.cc" # from [b750556e6ccf7bd8bcde69727e93792f47fae925] # to [4299154a8679576f7e40f4e71a600774267245ed] # # patch "netsync.cc" # from [9fc5efb4fe1fc45018b0653843f7f07252bbd612] # to [2ec010be852485910713f89858e4206fd10625c5] # # patch "project.cc" # from [a8f0db446ce5ad2877e8be734711d4b5ecfae810] # to [43edeaf955b2d43ee616a2f075f216b90868ac32] # # patch "update.cc" # from [e4e1f8d71ba2133af8d22537033ed7f1bb350cbd] # to [272c75236950e27f13cfc182a6b5e9b2017c777b] # # patch "update.hh" # from [182e0764bd0c84327c2b1f073fc3eaf3642ad4d2] # to [e1824334065fdaae0e7c51f52f1ded89a8de51c8] # ============================================================ --- automate.cc f3959ab3d355a49eb5b957689ddc8172587a5f02 +++ automate.cc 7cdbf648bead873a24451286f474678903af09b9 @@ -76,7 +76,7 @@ CMD_AUTOMATE(heads, N_("[BRANCH]"), F("wrong argument count")); database db(app); - project_set projects(app.db, app.lua, app.opts); + project_set projects(db, app.lua, app.opts); branch_name branch; if (args.size() == 1) @@ -1421,7 +1421,7 @@ CMD_AUTOMATE(packets_for_certs, N_("REVI F("wrong argument count")); database db(app); - project_set projects(app.db, app.lua, app.opts); + project_set projects(db, app.lua, app.opts); packet_writer pw(output); revision_id r_id(idx(args, 0)()); @@ -1593,7 +1593,7 @@ CMD_AUTOMATE(branches, "", F("no arguments needed")); database db(app); - project_set projects(app.db, app.lua, app.opts); + project_set projects(db, app.lua, app.opts); set names; projects.get_branch_list(names, !app.opts.ignore_suspend_certs); @@ -1645,7 +1645,7 @@ CMD_AUTOMATE(tags, N_("[BRANCH_PATTERN]" F("wrong argument count")); database db(app); - project_set projects(app.db, app.lua, app.opts); + project_set projects(db, app.lua, app.opts); globish incl("*"); bool filtering(false); ============================================================ --- cert.cc 3fc31d229cfee22f7cf64ea473ff589efc31322c +++ cert.cc 74f04c20c158a6cef03e39f0faf5590b1d8c19ec @@ -160,13 +160,13 @@ erase_bogus_certs(database & db, certs = tmp_certs; } -void erase_bogus_certs(std::vector< revision > & certs, - database & db) +void erase_bogus_certs(database & db, + std::vector< revision > & certs) { - erase_bogus_certs(certs, + erase_bogus_certs(db, boost::bind(&database::hook_get_revision_cert_trust, &db, _1, _2, _3, _4), - db); + certs); } void erase_bogus_certs(database & db, ============================================================ --- cert.hh 4c371d6c98080824726b4b48529d85c430f3c5ee +++ cert.hh 68d4b95d0eed546a10c00cbd58cf998383fe1c33 @@ -80,9 +80,9 @@ typedef boost::function trust_function; -void erase_bogus_certs(std::vector< revision > & certs, +void erase_bogus_certs(database & db, trust_function trust_fn, - database & db); + std::vector< revision > & certs); void erase_bogus_certs(database & db, std::vector< revision > & certs); ============================================================ --- cmd_key_cert.cc 7ad1ea9539f5a89078d0ad592627a703345a9702 +++ cmd_key_cert.cc b80c5e664a6ccb34aa9ea6882e0f2025720badd4 @@ -154,13 +154,12 @@ CMD(cert, "cert", "", CMD_REF(key_and_ce { database db(app); key_store keys(app); - project_t project(db); + project_set projects(db, app.lua, app.opts); if ((args.size() != 3) && (args.size() != 2)) throw usage(execid); - project_set projects(db, app.lua, app.opts); - transaction_guard guard(app.db); + transaction_guard guard(db); revision_id rid; complete(app, projects, idx(args, 0)(), rid); @@ -180,7 +179,7 @@ CMD(cert, "cert", "", CMD_REF(key_and_ce val = cert_value(dat()); } - put_simple_revision_cert(rid, cname, val, db, app.keys); + put_simple_revision_cert(db, keys, rid, cname, val); guard.commit(); } ============================================================ --- cmd_list.cc 6469ed5180cdbbee6624d729a67b02b32a1a164d +++ cmd_list.cc 26c98511538702f696669ffcb7a36bfdc9718b7b @@ -699,7 +699,7 @@ CMD_AUTOMATE(certs, N_("REV"), F("wrong argument count")); database db(app); - project_set projects(app.db, app.lua, app.opts); + project_set projects(db, app.lua, app.opts); vector certs; ============================================================ --- cmd_merging.cc 5bdc3a199fbb821122122965ee2de162cf6ec4db +++ cmd_merging.cc e42ee860d4797c7be2497a0ba9797b2c53109139 @@ -86,13 +86,15 @@ static bool } static bool -pick_branch_for_update(options & opts, database & db, revision_id chosen_rid) +pick_branch_for_update(lua_hooks & lua, + options & opts, database & db, + revision_id chosen_rid) { bool switched_branch = false; // figure out which branches the target is in set< branch_name > branches; - project_set projects(db, app.lua, app.opts); + project_set projects(db, lua, opts); projects.get_revision_branches(chosen_rid, branches); if (branches.find(opts.branchname) != branches.end()) @@ -213,7 +215,8 @@ CMD(update, "update", "", CMD_REF(worksp // Fiddle around with branches, in an attempt to guess what the user // wants. - bool switched_branch = pick_branch_for_update(app.opts, db, chosen_rid); + bool switched_branch = pick_branch_for_update(app.lua, app.opts, db, + chosen_rid); if (switched_branch) P(F("switching to branch %s") % app.opts.branchname()); ============================================================ --- cmd_netsync.cc 9bc7de6d975efa195491f71370b39929009bbcad +++ cmd_netsync.cc 3228c11dbb5651fd8277eea24faa690596ff9a09 @@ -183,7 +183,7 @@ CMD(pull, "pull", "", CMD_REF(network), { database db(app); key_store keys(app); - project_set project(db, app.lua, app.opts); + project_set projects(db, app.lua, app.opts); utf8 addr; globish include_pattern, exclude_pattern; ============================================================ --- cmd_policy.cc 9aaf990cedfd5765aea57d0105b680a287d767ac +++ cmd_policy.cc a6767f052d77500ef08f244bfa2890988f20de09 @@ -11,6 +11,7 @@ #include "dates.hh" #include "file_io.hh" #include "keys.hh" +#include "key_store.hh" #include "revision.hh" #include "roster.hh" #include "transforms.hh" @@ -74,7 +75,7 @@ namespace { std::set const & administrators, std::string & policy_uid, data & spec) { - cache_user_key(opts, lua, keys, db); + cache_user_key(opts, lua, db, keys); policy_uid = generate_uid(); transaction_guard guard(db); @@ -126,10 +127,10 @@ namespace { } utf8 changelog(N_("Create new policy branch.")); - cert_revision_in_branch(rev_id, branch_uid(policy_uid), db, keys); - cert_revision_changelog(rev_id, changelog, db, keys); - cert_revision_date_time(rev_id, date, db, keys); - cert_revision_author(rev_id, author, db, keys); + cert_revision_in_branch(db, keys, rev_id, branch_uid(policy_uid)); + cert_revision_changelog(db, keys, rev_id, changelog); + cert_revision_date_time(db, keys, rev_id, date); + cert_revision_author(db, keys, rev_id, author); guard.commit(); @@ -145,6 +146,10 @@ CMD(create_project, "create_project", "" { N(args.size() == 1, F("Wrong argument count.")); + + database db(app); + key_store keys(app); + std::string project_name = idx(args, 0)(); system_path project_dir = app.opts.conf_dir / "projects"; system_path project_file = project_dir / path_component(project_name); @@ -156,13 +161,13 @@ CMD(create_project, "create_project", "" F("You already have a project with that name.")); mkdir_p(project_dir); - cache_user_key(app.opts, app.lua, app.keys, app.db); + cache_user_key(app.opts, app.lua, db, keys); std::set admin_keys; - admin_keys.insert(app.keys.signing_key); + admin_keys.insert(keys.signing_key); std::string policy_uid; data policy_spec; - create_policy_branch(app.db, app.keys, app.lua, app.opts, + create_policy_branch(db, keys, app.lua, app.opts, branch_prefix(project_name), admin_keys, policy_uid, policy_spec); ============================================================ --- enumerator.cc b750556e6ccf7bd8bcde69727e93792f47fae925 +++ enumerator.cc 4299154a8679576f7e40f4e71a600774267245ed @@ -27,9 +27,9 @@ using std::vector; using std::set; using std::vector; -revision_enumerator::revision_enumerator(project_t & project, - database & db) - : cb(cb), db(db) +revision_enumerator::revision_enumerator(database & db, + enumerator_callbacks & cb) + : db(db), cb(cb) { revision_id root; revs.push_back(root); ============================================================ --- netsync.cc 9fc5efb4fe1fc45018b0653843f7f07252bbd612 +++ netsync.cc 2ec010be852485910713f89858e4206fd10625c5 @@ -423,7 +423,7 @@ session: session(options & opts, lua_hooks & lua, - project_t & project, + project_set & projects, key_store & keys, protocol_role role, protocol_voice voice, @@ -594,7 +594,7 @@ session::session(options & opts, key_refiner(key_item, voice, *this), cert_refiner(cert_item, voice, *this), rev_refiner(revision_item, voice, *this), - rev_enumerator(projects, *this), + rev_enumerator(projects.db, *this), initiated_by_server(initiated_by_server) {} @@ -3317,7 +3317,7 @@ run_netsync_protocol(options & opts, lua void run_netsync_protocol(options & opts, lua_hooks & lua, - project_tse & projects, key_store & keys, + project_set & projects, key_store & keys, protocol_voice voice, protocol_role role, std::list const & addrs, ============================================================ --- project.cc a8f0db446ce5ad2877e8be734711d4b5ecfae810 +++ project.cc 43edeaf955b2d43ee616a2f075f216b90868ac32 @@ -302,10 +302,10 @@ namespace cert_name(branch_cert_name), branch_encoded, certs); - erase_bogus_certs(certs, + erase_bogus_certs(db, boost::bind(¬_in_managed_branch::is_trusted, this, _1, _2, _3, _4), - db); + certs); return certs.empty(); } }; @@ -341,10 +341,10 @@ namespace cert_name(suspend_cert_name), branch_encoded, certs); - erase_bogus_certs(certs, + erase_bogus_certs(db, boost::bind(&suspended_in_managed_branch::is_trusted, this, _1, _2, _3, _4), - db); + certs); return !certs.empty(); } }; @@ -365,7 +365,7 @@ namespace heads); not_in_managed_branch p(db, branch_encoded, trusted_signers); - erase_ancestors_and_failures(heads, p, db, NULL); + erase_ancestors_and_failures(db, heads, p, NULL); if (heads.size() != 1) { @@ -662,7 +662,7 @@ project_t::get_branch_heads(branch_name else { not_in_managed_branch p(db, branch_encoded, bp->committers); - erase_ancestors_and_failures(branch.second, p, db, + erase_ancestors_and_failures(db, branch.second, p, inverse_graph_cache_ptr); } @@ -1110,7 +1110,7 @@ project_set::put_tag(key_store & keys, revision_id const & id, string const & name) { - cert_revision_tag(id, name, db, keys); + cert_revision_tag(db, keys, id, name); } outdated_indicator @@ -1148,7 +1148,7 @@ project_set::get_revision_certs_by_name( std::vector > & certs) { outdated_indicator i = db.get_revision_certs(id, name, certs); - erase_bogus_certs(certs, db); + erase_bogus_certs(db, certs); return i; } ============================================================ --- update.cc e4e1f8d71ba2133af8d22537033ed7f1bb350cbd +++ update.cc 272c75236950e27f13cfc182a6b5e9b2017c777b @@ -53,12 +53,12 @@ static void using boost::lexical_cast; static void -get_test_results_for_revision(project_t & project, +get_test_results_for_revision(project_set & projects, revision_id const & id, map & results) { vector< revision > certs; - project.get_revision_certs_by_name(id, cert_name(testresult_cert_name), + projects.get_revision_certs_by_name(id, cert_name(testresult_cert_name), certs); for (vector< revision >::const_iterator i = certs.begin(); i != certs.end(); ++i) @@ -79,7 +79,7 @@ acceptable_descendent(lua_hooks & lua, static bool acceptable_descendent(lua_hooks & lua, - project_t & project, + project_set & projects, branch_name const & branch, revision_id const & base, map & base_results, @@ -88,7 +88,9 @@ acceptable_descendent(lua_hooks & lua, L(FL("Considering update target %s") % target); // step 1: check the branch - if (!project.revision_is_in_branch(target, branch)) + if (!projects + .get_project_of_branch(branch) + .revision_is_in_branch(target, branch)) { L(FL("%s not in branch %s") % target % branch); return false; @@ -96,7 +98,7 @@ acceptable_descendent(lua_hooks & lua, // step 2: check the testresults map target_results; - get_test_results_for_revision(project, target, target_results); + get_test_results_for_revision(projects, target, target_results); if (lua.hook_accept_testresult_change(base_results, target_results)) { L(FL("%s is acceptable update candidate") % target); @@ -111,7 +113,7 @@ pick_update_candidates(lua_hooks & lua, void pick_update_candidates(lua_hooks & lua, - project_t & project, + project_set & projects, set & candidates, revision_id const & base, branch_name const & branch, @@ -121,13 +123,13 @@ pick_update_candidates(lua_hooks & lua, I(!branch().empty()); map base_results; - get_test_results_for_revision(project, base, base_results); + get_test_results_for_revision(projects, base, base_results); candidates.clear(); // we possibly insert base into the candidate set as well; returning a set // containing just it means that we are up to date; returning an empty set // means that there is no acceptable update. - if (acceptable_descendent(lua, project, branch, base, base_results, base)) + if (acceptable_descendent(lua, projects, branch, base, base_results, base)) candidates.insert(base); // keep a visited set to avoid repeating work @@ -135,7 +137,7 @@ pick_update_candidates(lua_hooks & lua, set children; vector to_traverse; - project.db.get_revision_children(base, children); + projects.db.get_revision_children(base, children); copy(children.begin(), children.end(), back_inserter(to_traverse)); while (!to_traverse.empty()) @@ -149,16 +151,16 @@ pick_update_candidates(lua_hooks & lua, visited.insert(target); // then, possibly insert this revision as a candidate - if (acceptable_descendent(lua, project, branch, base, base_results, + if (acceptable_descendent(lua, projects, branch, base, base_results, target)) candidates.insert(target); // and traverse its children as well - project.db.get_revision_children(target, children); + projects.db.get_revision_children(target, children); copy(children.begin(), children.end(), back_inserter(to_traverse)); } - erase_ancestors(project.db, candidates); + erase_ancestors(projects.db, candidates); if (ignore_suspend_certs) return; @@ -166,7 +168,9 @@ pick_update_candidates(lua_hooks & lua, set active_candidates; for (set::const_iterator i = candidates.begin(); i != candidates.end(); i++) - if (!project.revision_is_suspended_in_branch(*i, branch)) + if (!projects + .get_project_of_branch(branch) + .revision_is_suspended_in_branch(*i, branch)) safe_insert(active_candidates, *i); if (!active_candidates.empty()) ============================================================ --- update.hh 182e0764bd0c84327c2b1f073fc3eaf3642ad4d2 +++ update.hh e1824334065fdaae0e7c51f52f1ded89a8de51c8 @@ -26,7 +26,7 @@ void pick_update_candidates(lua_hooks & // revision, then 'candidates' will contain exactly the current revision. void pick_update_candidates(lua_hooks & lua, - project_t & project, + project_set & projects, std::set & candidates, revision_id const & base_ident, branch_name const & branchname,