# # # patch "annotate.cc" # from [673b10cddd60e867b346f692aa7eb724dd878795] # to [2a87cf72208691bc4f163f5e7ddf54c3371f9745] # # patch "annotate.hh" # from [6ec5ba3b60c4ab9958cb29e28ec178a888121ae5] # to [1ffd0ce10fb46ba3d995e3ae5fbc1638d7462896] # # patch "asciik.cc" # from [730518319fa8c40ef0dda16a866e9a2063b5a777] # to [c8b1e5c363ff9b4bb8a81ae5a2a2a02d942412df] # # patch "automate.cc" # from [5ad369286b168736e3f9c062b4de444d23de504e] # to [dd89b4d5df9e6abf89f3ae82a6ada7f19a8e71af] # # patch "cert.cc" # from [17912b27d57c6e5bb7cb2483207c7c5f99c0e73a] # to [c7144ab423ab1f7e34541435207f7c15eefe49e1] # # patch "cert.hh" # from [9b81b8443f3d45c85d2623756565883fdd59d0af] # to [6de8a02eb770625c1dfba467a931058f740bac0f] # # patch "cmd.hh" # from [dc20987d3ec2e4c37f0be7252eb0b420d8787c7e] # to [f0e4d46973929a8c7b70b0e12593de40e7aec203] # # patch "cmd_db.cc" # from [1794451779caf28bbc7457823de9e6b949240fc9] # to [ce7ba2f11a33bb666cb46ded743bcd072823e43d] # # patch "cmd_diff_log.cc" # from [0740f76d3168c8a1eb04a781c0772a0de0acfb05] # to [79daedbcd72b7b9699a218f4705e3ff5afbbd7a6] # # patch "cmd_files.cc" # from [603c820cc7de711ca0d310963d940eac6583cc38] # to [13ac87d8dda0b82d84fad7aa920d0c405ca90d49] # # patch "cmd_key_cert.cc" # from [501fa9fa3878942c918aebdfad8385f1a2aaaf06] # to [d4bef6abb016454790b480d67767cc6b74cb80a6] # # patch "cmd_list.cc" # from [192b6b21e949c760e8bf345d51b453902f51040c] # to [0b8bad1dd9d90b653979a894d1d565d44c819634] # # patch "cmd_merging.cc" # from [8294caa3d6c1d7f2c071cc179b829fa03758d519] # to [bf19280b61d728e6212fcb8bad893b60fbaa0901] # # patch "cmd_netsync.cc" # from [db84756d8147257d0850b7a4c1a0b0d5e9fca25a] # to [7054046a7433ac46acfa4a4588b0002bcfa1ad54] # # patch "cmd_othervcs.cc" # from [ba783daa7f499d9623d35d0a7de38adcf1c9cef8] # to [cdd68594edb020c117661aa7eccc093eb66a6b33] # # patch "cmd_policy.cc" # from [6a10d05b0c08df3b0e8220acba639e19013a0d04] # to [68eafd64425fd1b26a6a1b03d1aebd9d83c9d4c5] # # patch "cmd_ws_commit.cc" # from [26a27f9320351d0da69ecdbcc35465500f6ec712] # to [b6732ca44a2e1a76c6f15855aad79b26d763d3ef] # # patch "commands.cc" # from [f87e5793a4e0f2d68bf0bf21e6234b06fb18b01b] # to [0cf90848baf2600e9f60d74d642af0202b8ae23b] # # patch "netcmd.hh" # from [615c02971da60cd1c1783d9dd80329ad84997971] # to [10527907b0ef2b48afc16182cc998211ba879d08] # # patch "netsync.cc" # from [7f523fa35df92eb2ae1f04bc790731d8609b97f1] # to [c81c5cbd3b5d0c784f762019e3db267a4a101aff] # # patch "project.cc" # from [ed85ed558b26c5d9e0e63359c59bec7ba3f600f4] # to [c9a149747281d686e02992e3de35cdd5f1925bba] # # patch "project.hh" # from [3c2a769f1897d909d9e18d6708aff10607b395ac] # to [3f2cb4af25501bef9d91c87b4318b9ac3e5be11a] # # patch "rcs_import.cc" # from [94d70c02806a0ea2447281e60abb8561bce31f91] # to [a7f8196795b4e5a45d74be47cf4df22e995f4659] # # patch "selectors.cc" # from [248b4df6a7de6b4582234ca930da381cc462218c] # to [535e4916da7d47f6ff8d82db0df576635c38d126] # # patch "selectors.hh" # from [2bdba72afbc3aaba45595d11d07db790ce53db14] # to [19cc6377e9afbf63e494d7bcfde3eb4754d2b510] # # patch "update.cc" # from [5f6dc8f3dbe233939f6f9d588d6fbdc2365e1031] # to [04ca1a313bbd21e3fb4654074b36a791246052af] # # patch "update.hh" # from [e1824334065fdaae0e7c51f52f1ded89a8de51c8] # to [182e0764bd0c84327c2b1f073fc3eaf3642ad4d2] # ============================================================ --- annotate.cc 673b10cddd60e867b346f692aa7eb724dd878795 +++ annotate.cc 2a87cf72208691bc4f163f5e7ddf54c3371f9745 @@ -59,7 +59,7 @@ public: class annotate_context { public: - annotate_context(project_set & projects, file_id fid); + annotate_context(project_t & project, file_id fid); shared_ptr initial_lineage() const; @@ -86,7 +86,7 @@ private: private: void build_revisions_to_annotations(map & r2a) const; - project_set & projects; + project_t & project; /// keep a count so we can tell quickly whether we can terminate size_t annotated_lines_completed; @@ -207,12 +207,12 @@ typedef multi_index_container< > work_units; -annotate_context::annotate_context(project_set & projects, file_id fid) - : projects(projects), annotated_lines_completed(0) +annotate_context::annotate_context(project_t & project, file_id fid) + : project(project), annotated_lines_completed(0) { // initialize file_lines file_data fpacked; - projects.db.get_file_version(fid, fpacked); + project.db.get_file_version(fid, fpacked); string encoding = constants::default_encoding; // FIXME split_into_lines(fpacked.inner()(), encoding, file_lines); L(FL("annotate_context::annotate_context initialized " @@ -392,8 +392,8 @@ annotate_context::build_revisions_to_ann i != seen.end(); i++) { vector< revision > certs; - projects.get_revision_certs(*i, certs); - erase_bogus_certs(projects.db, certs); + project.get_revision_certs(*i, certs); + erase_bogus_certs(project.db, certs); string author(cert_string_value(certs, author_cert_name, true, false, "@< ")); @@ -817,14 +817,14 @@ void } void -do_annotate (project_set & projects, file_t file_node, +do_annotate (project_t & project, file_t file_node, revision_id rid, bool just_revs) { L(FL("annotating file %s with content %s in revision %s") % file_node->self % file_node->content % rid); shared_ptr - acp(new annotate_context(projects, file_node->content)); + acp(new annotate_context(project, file_node->content)); shared_ptr lineage = acp->initial_lineage(); @@ -833,14 +833,14 @@ do_annotate (project_set & projects, fil { // prepare the first work_unit rev_height height; - projects.db.get_rev_height(rid, height); + project.db.get_rev_height(rid, height); set rids_interesting_ancestors; - get_file_content_marks(projects.db, rid, file_node->self, + get_file_content_marks(project.db, rid, file_node->self, rids_interesting_ancestors); bool rid_marked = (rids_interesting_ancestors.size() == 1 && *(rids_interesting_ancestors.begin()) == rid); if (rid_marked) - projects.db.get_revision_parents(rid, rids_interesting_ancestors); + project.db.get_revision_parents(rid, rids_interesting_ancestors); annotate_node_work workunit(acp, lineage, rid, file_node->self, height, rids_interesting_ancestors, file_node->content, @@ -859,7 +859,7 @@ do_annotate (project_set & projects, fil annotate_node_work work = *w; work_units.erase(w); - do_annotate_node(projects.db, work, work_units); + do_annotate_node(project.db, work, work_units); } acp->annotate_equivalent_lines(); ============================================================ --- annotate.hh 6ec5ba3b60c4ab9958cb29e28ec178a888121ae5 +++ annotate.hh 1ffd0ce10fb46ba3d995e3ae5fbc1638d7462896 @@ -13,10 +13,10 @@ #include "vocab.hh" #include "rev_types.hh" -class project_set; +class project_t; void -do_annotate(project_set & projects, file_t file_node, revision_id rid, +do_annotate(project_t & project, file_t file_node, revision_id rid, bool just_revs); // Local Variables: ============================================================ --- asciik.cc 730518319fa8c40ef0dda16a866e9a2063b5a777 +++ asciik.cc c8b1e5c363ff9b4bb8a81ae5a2a2a02d942412df @@ -380,8 +380,8 @@ CMD(asciik, "asciik", "", CMD_REF(debug) set revs; database db(app); - project_set projects(db, app.lua, app.opts); - complete(app.opts, app.lua, projects, idx(args, 0)(), revs); + project_t project(db, app.lua, app.opts); + complete(app.opts, app.lua, project, idx(args, 0)(), revs); vector sorted; toposort(db, revs, sorted); ============================================================ --- automate.cc 5ad369286b168736e3f9c062b4de444d23de504e +++ automate.cc dd89b4d5df9e6abf89f3ae82a6ada7f19a8e71af @@ -81,7 +81,7 @@ CMD_AUTOMATE(heads, N_("[BRANCH]"), F("wrong argument count")); database db(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); branch_name branch; if (args.size() == 1) @@ -94,10 +94,7 @@ CMD_AUTOMATE(heads, N_("[BRANCH]"), } set heads; - projects - .get_project_of_branch(branch) - .get_branch_heads(branch, heads, - app.opts.ignore_suspend_certs); + project.get_branch_heads(branch, heads, app.opts.ignore_suspend_certs); for (set::const_iterator i = heads.begin(); i != heads.end(); ++i) output << *i << '\n'; @@ -511,9 +508,9 @@ CMD_AUTOMATE(select, N_("SELECTOR"), F("wrong argument count")); database db(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); set completions; - expand_selector(app.opts, app.lua, projects, idx(args, 0)(), completions); + expand_selector(app.opts, app.lua, project, idx(args, 0)(), completions); for (set::const_iterator i = completions.begin(); i != completions.end(); ++i) @@ -1488,14 +1485,14 @@ CMD_AUTOMATE(packets_for_certs, N_("REVI F("wrong argument count")); database db(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); packet_writer pw(output); revision_id r_id(decode_hexenc(idx(args, 0)())); vector< revision > certs; N(db.revision_exists(r_id), F("no such revision '%s'") % r_id); - projects.get_revision_certs(r_id, certs); + project.get_revision_certs(r_id, certs); for (vector< revision >::const_iterator i = certs.begin(); i != certs.end(); i++) @@ -1629,10 +1626,10 @@ CMD_AUTOMATE(branches, "", F("no arguments needed")); database db(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); set names; - projects.get_branch_list(names, !app.opts.ignore_suspend_certs); + project.get_branch_list(names, !app.opts.ignore_suspend_certs); for (set::const_iterator i = names.begin(); i != names.end(); ++i) @@ -1681,7 +1678,7 @@ CMD_AUTOMATE(tags, N_("[BRANCH_PATTERN]" F("wrong argument count")); database db(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); globish incl("*"); bool filtering(false); @@ -1696,13 +1693,13 @@ CMD_AUTOMATE(tags, N_("[BRANCH_PATTERN]" prt.print_stanza(stz); set tags; - projects.get_tags(tags); + project.get_tags(tags); for (set::const_iterator tag = tags.begin(); tag != tags.end(); ++tag) { set branches; - projects.get_revision_branches(tag->ident, branches); + project.get_revision_branches(tag->ident, branches); bool show(!filtering); vector branch_names; ============================================================ --- cert.cc 17912b27d57c6e5bb7cb2483207c7c5f99c0e73a +++ cert.cc c7144ab423ab1f7e34541435207f7c15eefe49e1 @@ -404,7 +404,7 @@ void // OPTS may override. Branch name is returned in BRANCHNAME. // Does not modify branch state in OPTS. void -guess_branch(options & opts, project_set & projects, +guess_branch(options & opts, project_t & project, revision_id const & ident, branch_name & branchname) { if (opts.branch_given && !opts.branchname().empty()) @@ -416,7 +416,7 @@ guess_branch(options & opts, project_set "please provide a branch name")); set branches; - projects.get_revision_branches(ident, branches); + project.get_revision_branches(ident, branches); N(branches.size() != 0, F("no branch certs found for revision %s, " @@ -435,10 +435,10 @@ void // As above, but set the branch name in the options // if it wasn't already set. void -guess_branch(options & opts, project_set & projects, revision_id const & ident) +guess_branch(options & opts, project_t & project, revision_id const & ident) { branch_name branchname; - guess_branch(opts, projects, ident, branchname); + guess_branch(opts, project, ident, branchname); opts.branchname = branchname; } ============================================================ --- cert.hh 9b81b8443f3d45c85d2623756565883fdd59d0af +++ cert.hh 6de8a02eb770625c1dfba467a931058f740bac0f @@ -28,7 +28,7 @@ class database; class key_store; class database; -class project_set; +class project_t; struct options; struct cert @@ -103,10 +103,10 @@ void // reason not to. void -guess_branch(options & opts, project_set & projects, revision_id const & rev, +guess_branch(options & opts, project_t & project, revision_id const & rev, branch_name & branchname); void -guess_branch(options & opts, project_set & projects, revision_id const & rev); +guess_branch(options & opts, project_t & project, revision_id const & rev); #define date_cert_name cert_name("date") #define author_cert_name cert_name("author") ============================================================ --- cmd.hh dc20987d3ec2e4c37f0be7252eb0b420d8787c7e +++ cmd.hh f0e4d46973929a8c7b70b0e12593de40e7aec203 @@ -21,7 +21,6 @@ class project_t; class app_state; class database; class project_t; -class project_set; struct workspace; namespace commands @@ -157,7 +156,7 @@ std::string } std::string -describe_revision(project_set & projects, revision_id const & id); +describe_revision(project_t & project, revision_id const & id); void notify_if_multiple_heads(project_t & project, branch_name const & branchname, ============================================================ --- cmd_db.cc 1794451779caf28bbc7457823de9e6b949240fc9 +++ cmd_db.cc ce7ba2f11a33bb666cb46ded743bcd072823e43d @@ -138,8 +138,8 @@ CMD(db_kill_rev_locally, "kill_rev_local revision_id revid; database db(app); - project_set projects(db, app.lua, app.opts); - complete(app.opts, app.lua, projects, idx(args, 0)(), revid); + project_t project(db, app.lua, app.opts); + complete(app.opts, app.lua, project, idx(args, 0)(), revid); // Check that the revision does not have any children std::set children; @@ -299,9 +299,9 @@ CMD_HIDDEN(clear_epoch, "clear_epoch", " branch_name name(idx(args, 0)()); database db(app); - project_set projects(db, app.lua, app.opts); - branch_uid branch = projects.translate_branch(name); - projects.db.clear_epoch(branch); + project_t project(db, app.lua, app.opts); + branch_uid branch = project.translate_branch(name); + project.db.clear_epoch(branch); } CMD(db_set_epoch, "set_epoch", "", CMD_REF(db), "BRANCH EPOCH", @@ -317,9 +317,9 @@ CMD(db_set_epoch, "set_epoch", "", CMD_R branch_name name(idx(args, 0)()); epoch_data ed(decode_hexenc(idx(args, 1)())); database db(app); - project_set projects(db, app.lua, app.opts); - branch_uid branch = projects.translate_branch(name); - projects.db.set_epoch(branch, ed); + project_t project(db, app.lua, app.opts); + branch_uid branch = project.translate_branch(name); + project.db.set_epoch(branch, ed); } CMD(set, "set", "", CMD_REF(variables), N_("DOMAIN NAME VALUE"), @@ -374,7 +374,7 @@ CMD(complete, "complete", "", CMD_REF(in throw usage(execid); database db(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); bool verbose = app.opts.verbose; @@ -389,7 +389,7 @@ CMD(complete, "complete", "", CMD_REF(in i != completions.end(); ++i) { if (!verbose) cout << *i << '\n'; - else cout << describe_revision(projects, *i) << '\n'; + else cout << describe_revision(project, *i) << '\n'; } } else if (idx(args, 0)() == "file") ============================================================ --- cmd_diff_log.cc 0740f76d3168c8a1eb04a781c0772a0de0acfb05 +++ cmd_diff_log.cc 79daedbcd72b7b9699a218f4705e3ff5afbbd7a6 @@ -360,7 +360,7 @@ prepare_diff(app_state & app, cset excluded; // initialize before transaction so we have a database to work with. - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); N(app.opts.revision_selectors.size() <= 2, F("more than two revisions given")); @@ -405,7 +405,7 @@ prepare_diff(app_state & app, revision_id r_old_id; workspace work(app); - complete(app.opts, app.lua, projects, idx(app.opts.revision_selectors, 0)(), r_old_id); + complete(app.opts, app.lua, project, idx(app.opts.revision_selectors, 0)(), r_old_id); db.get_roster(r_old_id, old_roster); work.get_current_roster_shape(db, nis, new_roster); @@ -431,8 +431,8 @@ prepare_diff(app_state & app, roster_t old_roster, restricted_roster, new_roster; revision_id r_old_id, r_new_id; - complete(app.opts, app.lua, projects, idx(app.opts.revision_selectors, 0)(), r_old_id); - complete(app.opts, app.lua, projects, idx(app.opts.revision_selectors, 1)(), r_new_id); + complete(app.opts, app.lua, project, idx(app.opts.revision_selectors, 0)(), r_old_id); + complete(app.opts, app.lua, project, idx(app.opts.revision_selectors, 1)(), r_new_id); db.get_roster(r_old_id, old_roster); db.get_roster(r_new_id, new_roster); @@ -564,7 +564,7 @@ static void static void -log_certs(project_set & projects, ostream & os, revision_id id, cert_name name, +log_certs(project_t & project, ostream & os, revision_id id, cert_name name, string label, string separator, bool multiline, bool newline) { vector< revision > certs; @@ -573,7 +573,7 @@ log_certs(project_set & projects, ostrea if (multiline) newline = true; - projects.get_revision_certs_by_name(id, name, certs); + project.get_revision_certs_by_name(id, name, certs); for (vector< revision >::const_iterator i = certs.begin(); i != certs.end(); ++i) { @@ -593,16 +593,16 @@ static void } static void -log_certs(project_set & projects, ostream & os, revision_id id, cert_name name, +log_certs(project_t & project, ostream & os, revision_id id, cert_name name, string label, bool multiline) { - log_certs(projects, os, id, name, label, label, multiline, true); + log_certs(project, os, id, name, label, label, multiline, true); } static void -log_certs(project_set & projects, ostream & os, revision_id id, cert_name name) +log_certs(project_t & project, ostream & os, revision_id id, cert_name name) { - log_certs(projects, os, id, name, " ", ",", false, false); + log_certs(project, os, id, name, " ", ",", false, false); } @@ -633,7 +633,7 @@ CMD(log, "log", "", CMD_REF(informative) | options::opts::no_graph) { database db(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); long last = app.opts.last; long next = app.opts.next; @@ -665,7 +665,7 @@ CMD(log, "log", "", CMD_REF(informative) i != app.opts.from.end(); i++) { set rids; - complete(app.opts, app.lua, projects, (*i)(), rids); + complete(app.opts, app.lua, project, (*i)(), rids); for (set::const_iterator j = rids.begin(); j != rids.end(); ++j) { @@ -721,7 +721,7 @@ CMD(log, "log", "", CMD_REF(informative) { MM(*i); set rids; - complete(app.opts, app.lua, projects, (*i)(), rids); + complete(app.opts, app.lua, project, (*i)(), rids); for (set::const_iterator j = rids.begin(); j != rids.end(); ++j) { @@ -874,16 +874,16 @@ CMD(log, "log", "", CMD_REF(informative) if (app.opts.brief) { out << rid; - log_certs(projects, out, rid, author_name); + log_certs(project, out, rid, author_name); if (app.opts.no_graph) - log_certs(projects, out, rid, date_name); + log_certs(project, out, rid, date_name); else { out << '\n'; - log_certs(projects, out, rid, date_name, + log_certs(project, out, rid, date_name, string(), string(), false, false); } - log_certs(projects, out, rid, branch_name); + log_certs(project, out, rid, branch_name); out << '\n'; } else @@ -906,10 +906,10 @@ CMD(log, "log", "", CMD_REF(informative) anc != ancestors.end(); ++anc) out << "Ancestor: " << *anc << '\n'; - log_certs(projects, out, rid, author_name, "Author: ", false); - log_certs(projects, out, rid, date_name, "Date: ", false); - log_certs(projects, out, rid, branch_name, "Branch: ", false); - log_certs(projects, out, rid, tag_name, "Tag: ", false); + log_certs(project, out, rid, author_name, "Author: ", false); + log_certs(project, out, rid, date_name, "Date: ", false); + log_certs(project, out, rid, branch_name, "Branch: ", false); + log_certs(project, out, rid, tag_name, "Tag: ", false); if (!app.opts.no_files && !csum.cs.empty()) { @@ -918,8 +918,8 @@ CMD(log, "log", "", CMD_REF(informative) out << '\n'; } - log_certs(projects, out, rid, changelog_name, "ChangeLog: ", true); - log_certs(projects, out, rid, comment_name, "Comments: ", true); + log_certs(project, out, rid, changelog_name, "ChangeLog: ", true); + log_certs(project, out, rid, comment_name, "Comments: ", true); } if (app.opts.diffs) ============================================================ --- cmd_files.cc 603c820cc7de711ca0d310963d940eac6583cc38 +++ cmd_files.cc 13ac87d8dda0b82d84fad7aa920d0c405ca90d49 @@ -136,7 +136,7 @@ CMD(annotate, "annotate", "", CMD_REF(in { revision_id rid; database db(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); if ((args.size() != 1) || (app.opts.revision_selectors.size() > 1)) throw usage(execid); @@ -174,7 +174,7 @@ CMD(annotate, "annotate", "", CMD_REF(in } else { - complete(app.opts, app.lua, projects, idx(app.opts.revision_selectors, 0)(), rid); + complete(app.opts, app.lua, project, idx(app.opts.revision_selectors, 0)(), rid); db.get_roster(rid, roster); } @@ -189,7 +189,7 @@ CMD(annotate, "annotate", "", CMD_REF(in file_t file_node = downcast_to_file_t(node); L(FL("annotate for file_id %s") % file_node->self); - do_annotate(projects, file_node, rid, app.opts.revs_only); + do_annotate(project, file_node, rid, app.opts.revs_only); } CMD(identify, "identify", "", CMD_REF(debug), N_("[PATH]"), @@ -307,8 +307,8 @@ CMD(cat, "cat", "", CMD_REF(informative) } else { - project_set projects(db, app.lua, app.opts); - complete(app.opts, app.lua, projects, idx(app.opts.revision_selectors, 0)(), rid); + project_t project(db, app.lua, app.opts); + complete(app.opts, app.lua, project, idx(app.opts.revision_selectors, 0)(), rid); } dump_file(db, cout, rid, idx(args, 0)); @@ -375,8 +375,8 @@ CMD_AUTOMATE(get_file_of, N_("FILENAME") } else { - project_set projects(db, app.lua, app.opts); - complete(app.opts, app.lua, projects, idx(app.opts.revision_selectors, 0)(), rid); + project_t project(db, app.lua, app.opts); + complete(app.opts, app.lua, project, idx(app.opts.revision_selectors, 0)(), rid); } dump_file(db, output, rid, idx(args, 0)); ============================================================ --- cmd_key_cert.cc 501fa9fa3878942c918aebdfad8385f1a2aaaf06 +++ cmd_key_cert.cc d4bef6abb016454790b480d67767cc6b74cb80a6 @@ -156,7 +156,7 @@ CMD(cert, "cert", "", CMD_REF(key_and_ce { database db(app); key_store keys(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); if ((args.size() != 3) && (args.size() != 2)) throw usage(execid); @@ -164,7 +164,7 @@ CMD(cert, "cert", "", CMD_REF(key_and_ce transaction_guard guard(db); revision_id rid; - complete(app.opts, app.lua, projects, idx(args, 0)(), rid); + complete(app.opts, app.lua, project, idx(args, 0)(), rid); cert_name cname; internalize_cert_name(idx(args, 1), cname); @@ -181,7 +181,7 @@ CMD(cert, "cert", "", CMD_REF(key_and_ce val = cert_value(dat()); } - put_simple_revision_cert(db, keys, rid, cname, val); + project.put_cert(keys, rid, cname, val); guard.commit(); } @@ -192,14 +192,14 @@ CMD(trusted, "trusted", "", CMD_REF(key_ options::opts::none) { database db(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); if (args.size() < 4) throw usage(execid); set rids; - expand_selector(app.opts, app.lua, projects, idx(args, 0)(), rids); - diagnose_ambiguous_expansion(projects, idx(args, 0)(), rids); + expand_selector(app.opts, app.lua, project, idx(args, 0)(), rids); + diagnose_ambiguous_expansion(project, idx(args, 0)(), rids); revision_id ident; if (!rids.empty()) @@ -247,16 +247,16 @@ CMD(tag, "tag", "", CMD_REF(review), N_( { database db(app); key_store keys(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); if (args.size() != 2) throw usage(execid); revision_id r; - complete(app.opts, app.lua, projects, idx(args, 0)(), r); + complete(app.opts, app.lua, project, idx(args, 0)(), r); cache_user_key(app.opts, app.lua, db, keys); - projects.put_tag(keys, r, idx(args, 1)()); + project.put_tag(keys, r, idx(args, 1)()); } @@ -268,13 +268,13 @@ CMD(testresult, "testresult", "", CMD_RE { database db(app); key_store keys(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); if (args.size() != 2) throw usage(execid); revision_id r; - complete(app.opts, app.lua, projects, idx(args, 0)(), r); + complete(app.opts, app.lua, project, idx(args, 0)(), r); cache_user_key(app.opts, app.lua, db, keys); cert_revision_testresult(db, keys, r, idx(args, 1)()); @@ -288,20 +288,18 @@ CMD(approve, "approve", "", CMD_REF(revi { database db(app); key_store keys(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); if (args.size() != 1) throw usage(execid); revision_id r; - complete(app.opts, app.lua, projects, idx(args, 0)(), r); - guess_branch(app.opts, projects, r); + complete(app.opts, app.lua, project, idx(args, 0)(), r); + guess_branch(app.opts, project, r); N(app.opts.branchname() != "", F("need --branch argument for approval")); cache_user_key(app.opts, app.lua, db, keys); - projects - .get_project_of_branch(app.opts.branchname) - .put_revision_in_branch(keys, r, app.opts.branchname); + project.put_revision_in_branch(keys, r, app.opts.branchname); } CMD(suspend, "suspend", "", CMD_REF(review), N_("REVISION"), @@ -311,19 +309,17 @@ CMD(suspend, "suspend", "", CMD_REF(revi { database db(app); key_store keys(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); if (args.size() != 1) throw usage(execid); revision_id r; - complete(app.opts, app.lua, projects, idx(args, 0)(), r); - guess_branch(app.opts, projects, r); + complete(app.opts, app.lua, project, idx(args, 0)(), r); + guess_branch(app.opts, project, r); N(app.opts.branchname() != "", F("need --branch argument to suspend")); cache_user_key(app.opts, app.lua, db, keys); - projects - .get_project_of_branch(app.opts.branchname) - .suspend_revision_in_branch(keys, r, app.opts.branchname); + project.suspend_revision_in_branch(keys, r, app.opts.branchname); } CMD(comment, "comment", "", CMD_REF(review), N_("REVISION [COMMENT]"), @@ -333,7 +329,7 @@ CMD(comment, "comment", "", CMD_REF(revi { database db(app); key_store keys(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); if (args.size() != 1 && args.size() != 2) throw usage(execid); @@ -353,7 +349,7 @@ CMD(comment, "comment", "", CMD_REF(revi F("empty comment")); revision_id r; - complete(app.opts, app.lua, projects, idx(args, 0)(), r); + complete(app.opts, app.lua, project, idx(args, 0)(), r); cache_user_key(app.opts, app.lua, db, keys); cert_revision_comment(db, keys, r, comment); ============================================================ --- cmd_list.cc 192b6b21e949c760e8bf345d51b453902f51040c +++ cmd_list.cc 0b8bad1dd9d90b653979a894d1d565d44c819634 @@ -62,17 +62,17 @@ CMD(certs, "certs", "", CMD_REF(list), " throw usage(execid); database db(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); vector certs; transaction_guard guard(db, false); revision_id ident; - complete(app.opts, app.lua, projects, idx(args, 0)(), ident); + complete(app.opts, app.lua, project, idx(args, 0)(), ident); vector< revision > ts; // FIXME_PROJECTS: after projects are implemented, // use the app.db version instead if no project is specified. - projects.get_revision_certs(ident, ts); + project.get_revision_certs(ident, ts); for (size_t i = 0; i < ts.size(); ++i) certs.push_back(idx(ts, i).inner()); @@ -285,11 +285,10 @@ CMD(branches, "branches", "", CMD_REF(li throw usage(execid); database db(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); globish exc(app.opts.exclude_patterns); set names; - projects.get_branch_list(inc, names, - !app.opts.ignore_suspend_certs); + project.get_branch_list(inc, names, !app.opts.ignore_suspend_certs); for (set::const_iterator i = names.begin(); i != names.end(); ++i) @@ -305,12 +304,12 @@ CMD(epochs, "epochs", "", CMD_REF(list), database db(app); map epochs; db.get_epochs(epochs); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); if (args.size() == 0) { std::set branches; - projects.get_branch_uids(branches); + project.get_branch_list(branches); for (map::const_iterator i = epochs.begin(); i != epochs.end(); ++i) @@ -321,7 +320,7 @@ CMD(epochs, "epochs", "", CMD_REF(list), } else { - branch_name branch = projects.translate_branch(i->first); + branch_name branch = project.translate_branch(i->first); cout << encode_hexenc(i->second.inner()()) << ' ' << branch << '\n'; } } @@ -329,7 +328,7 @@ CMD(epochs, "epochs", "", CMD_REF(list), else { std::set branches; - projects.get_branch_list(branches, false); + project.get_branch_list(branches, false); for (args_vector::const_iterator i = args.begin(); i != args.end(); ++i) @@ -337,7 +336,7 @@ CMD(epochs, "epochs", "", CMD_REF(list), branch_name branch((*i)()); N(branches.find(branch) != branches.end(), F("Unknown branch %s") % branch); - branch_uid b = projects.translate_branch(branch); + branch_uid b = project.translate_branch(branch); map::const_iterator j = epochs.find(b); N(j != epochs.end(), F("no epoch for branch %s") % *i); cout << encode_hexenc(j->second.inner()()) << ' ' << j->first << '\n'; @@ -352,8 +351,8 @@ CMD(tags, "tags", "", CMD_REF(list), "", { database db(app); set tags; - project_set projects(db, app.lua, app.opts); - projects.get_tags(tags); + project_t project(db, app.lua, app.opts); + project.get_tags(tags); for (set::const_iterator i = tags.begin(); i != tags.end(); ++i) { @@ -699,7 +698,7 @@ CMD_AUTOMATE(certs, N_("REV"), F("wrong argument count")); database db(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); vector certs; @@ -711,9 +710,7 @@ CMD_AUTOMATE(certs, N_("REV"), N(db.revision_exists(rid), F("no such revision '%s'") % hrid); vector< revision > ts; - // FIXME_PROJECTS: after projects are implemented, - // use the db version instead if no project is specified. - projects.get_revision_certs(rid, ts); + project.get_revision_certs(rid, ts); for (size_t i = 0; i < ts.size(); ++i) certs.push_back(idx(ts, i).inner()); ============================================================ --- cmd_merging.cc 8294caa3d6c1d7f2c071cc179b829fa03758d519 +++ cmd_merging.cc bf19280b61d728e6212fcb8bad893b60fbaa0901 @@ -89,13 +89,13 @@ static bool } static bool -pick_branch_for_update(options & opts, project_set & projects, revision_id chosen_rid) +pick_branch_for_update(options & opts, project_t & project, revision_id chosen_rid) { bool switched_branch = false; // figure out which branches the target is in set< branch_name > branches; - projects.get_revision_branches(chosen_rid, branches); + project.get_revision_branches(chosen_rid, branches); if (branches.find(opts.branchname) != branches.end()) { @@ -147,7 +147,7 @@ CMD(update, "update", "", CMD_REF(worksp database db(app); workspace work(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); // Figure out where we are parent_map parents; @@ -170,7 +170,7 @@ CMD(update, "update", "", CMD_REF(worksp { P(F("updating along branch '%s'") % app.opts.branchname); set candidates; - pick_update_candidates(app.lua, projects, candidates, old_rid, + pick_update_candidates(app.lua, project, candidates, old_rid, app.opts.branchname, app.opts.ignore_suspend_certs); N(!candidates.empty(), @@ -184,7 +184,7 @@ CMD(update, "update", "", CMD_REF(worksp for (set::const_iterator i = candidates.begin(); i != candidates.end(); ++i) P(i18n_format(" %s") - % describe_revision(projects, *i)); + % describe_revision(project, *i)); P(F("choose one with '%s update -r'") % ui.prog_name); E(false, F("multiple update candidates remain after selection")); } @@ -192,14 +192,14 @@ CMD(update, "update", "", CMD_REF(worksp } else { - complete(app.opts, app.lua, projects, app.opts.revision_selectors[0](), chosen_rid); + complete(app.opts, app.lua, project, app.opts.revision_selectors[0](), chosen_rid); } I(!null_id(chosen_rid)); // do this notification before checking to see if we can bail out early, // because when you are at one of several heads, and you hit update, you // want to know that merging would let you update further. - notify_if_multiple_heads(projects.get_project_of_branch(app.opts.branchname), + notify_if_multiple_heads(project, app.opts.branchname, app.opts.ignore_suspend_certs); if (old_rid == chosen_rid) @@ -215,7 +215,7 @@ 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, projects, chosen_rid); + bool switched_branch = pick_branch_for_update(app.opts, project, chosen_rid); if (switched_branch) P(F("switching to branch %s") % app.opts.branchname()); @@ -416,7 +416,7 @@ CMD(merge, "merge", "", CMD_REF(tree), " { database db(app); key_store keys(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); if (args.size() != 0) throw usage(execid); @@ -425,10 +425,8 @@ CMD(merge, "merge", "", CMD_REF(tree), " F("please specify a branch, with --branch=BRANCH")); set heads; - projects - .get_project_of_branch(app.opts.branchname) - .get_branch_heads(app.opts.branchname, heads, - app.opts.ignore_suspend_certs); + project.get_branch_heads(app.opts.branchname, heads, + app.opts.ignore_suspend_certs); N(heads.size() != 0, F("branch '%s' is empty") % app.opts.branchname); if (heads.size() == 1) @@ -464,14 +462,12 @@ CMD(merge, "merge", "", CMD_REF(tree), " revpair p = find_heads_to_merge(db, heads); - merge_two(app.opts, app.lua, projects.get_project_of_branch(app.opts.branchname), keys, + merge_two(app.opts, app.lua, project, keys, p.first, p.second, app.opts.branchname, string("merge"), std::cout, false); - projects - .get_project_of_branch(app.opts.branchname) - .get_branch_heads(app.opts.branchname, heads, - app.opts.ignore_suspend_certs); + project.get_branch_heads(app.opts.branchname, heads, + app.opts.ignore_suspend_certs); pass++; } @@ -485,7 +481,7 @@ CMD(merge, "merge", "", CMD_REF(tree), " revision_id right = *i++; I(i == heads.end()); - merge_two(app.opts, app.lua, projects.get_project_of_branch(app.opts.branchname), keys, + merge_two(app.opts, app.lua, project, keys, left, right, app.opts.branchname, string("merge"), std::cout, false); P(F("note: your workspaces have not been updated")); @@ -538,20 +534,16 @@ CMD(merge_into_dir, "merge_into_dir", "" { database db(app); key_store keys(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); set src_heads, dst_heads; if (args.size() != 3) throw usage(execid); - projects - .get_project_of_branch(branch_name(idx(args, 0)())) - .get_branch_heads(branch_name(idx(args, 0)()), src_heads, - app.opts.ignore_suspend_certs); - projects - .get_project_of_branch(branch_name(idx(args, 1)())) - .get_branch_heads(branch_name(idx(args, 1)()), dst_heads, - app.opts.ignore_suspend_certs); + project.get_branch_heads(branch_name(idx(args, 0)()), src_heads, + app.opts.ignore_suspend_certs); + project.get_branch_heads(branch_name(idx(args, 1)()), dst_heads, + app.opts.ignore_suspend_certs); N(src_heads.size() != 0, F("branch '%s' is empty") % idx(args, 0)()); N(src_heads.size() == 1, F("branch '%s' is not merged") % idx(args, 0)()); @@ -582,10 +574,8 @@ CMD(merge_into_dir, "merge_into_dir", "" P(F("no merge necessary; putting %s in branch '%s'") % *src_i % idx(args, 1)()); transaction_guard guard(db); - projects - .get_project_of_branch(branch_name(idx(args, 1)())) - .put_revision_in_branch(keys, *src_i, - branch_name(idx(args, 1)())); + project.put_revision_in_branch(keys, *src_i, + branch_name(idx(args, 1)())); guard.commit(); } else @@ -667,13 +657,11 @@ CMD(merge_into_dir, "merge_into_dir", "" % idx(args, 1) % *dst_i).str()); - projects - .get_project_of_branch(branch_name(idx(args, 1)())) - .put_standard_certs_from_options(app.opts, app.lua, - keys, - merged, - branch_name(idx(args, 1)()), - log_message); + project.put_standard_certs_from_options(app.opts, app.lua, + keys, + merged, + branch_name(idx(args, 1)()), + log_message); guard.commit(); P(F("[merged] %s") % merged); @@ -699,7 +687,7 @@ CMD(merge_into_workspace, "merge_into_wo database db(app); workspace work(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); // Get the current state of the workspace. @@ -729,7 +717,7 @@ CMD(merge_into_workspace, "merge_into_wo calculate_ident(working_rev, working_rid); } - complete(app.opts, app.lua, projects, idx(args, 0)(), right_id); + complete(app.opts, app.lua, project, idx(args, 0)(), right_id); db.get_roster(right_id, right); N(!(left_id == right_id), F("workspace is already at revision %s") % left_id); @@ -800,15 +788,15 @@ CMD(explicit_merge, "explicit_merge", "" { database db(app); key_store keys(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); revision_id left, right; branch_name branch; if (args.size() != 3) throw usage(execid); - complete(app.opts, app.lua, projects, idx(args, 0)(), left); - complete(app.opts, app.lua, projects, idx(args, 1)(), right); + complete(app.opts, app.lua, project, idx(args, 0)(), left); + complete(app.opts, app.lua, project, idx(args, 1)(), right); branch = branch_name(idx(args, 2)()); N(!(left == right), @@ -823,7 +811,7 @@ CMD(explicit_merge, "explicit_merge", "" // avoid failure after lots of work cache_user_key(app.opts, app.lua, db, keys); - merge_two(app.opts, app.lua, projects.get_project_of_branch(branch), keys, + merge_two(app.opts, app.lua, project, keys, left, right, branch, string("explicit merge"), std::cout, false); } @@ -925,13 +913,13 @@ CMD(show_conflicts, "show_conflicts", "" options::opts::none) { database db(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); if (args.size() != 2) throw usage(execid); revision_id l_id, r_id; - complete(app.opts, app.lua, projects, idx(args,0)(), l_id); - complete(app.opts, app.lua, projects, idx(args,1)(), r_id); + complete(app.opts, app.lua, project, idx(args,0)(), l_id); + complete(app.opts, app.lua, project, idx(args,1)(), r_id); show_conflicts_core(db, l_id, r_id, false, std::cout); } @@ -959,7 +947,7 @@ CMD_AUTOMATE(show_conflicts, N_("[LEFT_R options::opts::branch) { database db(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); revision_id l_id, r_id; if (args.size() == 0) @@ -969,10 +957,8 @@ CMD_AUTOMATE(show_conflicts, N_("[LEFT_R F("please specify a branch, with --branch=BRANCH")); set heads; - projects - .get_project_of_branch(app.opts.branchname) - .get_branch_heads(app.opts.branchname, heads, - app.opts.ignore_suspend_certs); + project.get_branch_heads(app.opts.branchname, heads, + app.opts.ignore_suspend_certs); N(heads.size() >= 2, F("branch '%s' has %d heads; must be at least 2 for show_conflicts") % app.opts.branchname % heads.size()); @@ -994,8 +980,8 @@ CMD_AUTOMATE(show_conflicts, N_("[LEFT_R else if (args.size() == 2) { // get ids from args - complete(app.opts, app.lua, projects, idx(args,0)(), l_id); - complete(app.opts, app.lua, projects, idx(args,1)(), r_id); + complete(app.opts, app.lua, project, idx(args,0)(), l_id); + complete(app.opts, app.lua, project, idx(args,1)(), r_id); } else N(false, F("wrong argument count")); @@ -1018,13 +1004,13 @@ CMD(pluck, "pluck", "", CMD_REF(workspac { database db(app); workspace work(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); // Work out our arguments revision_id from_rid, to_rid; if (app.opts.revision_selectors.size() == 1) { - complete(app.opts, app.lua, projects, idx(app.opts.revision_selectors, 0)(), to_rid); + complete(app.opts, app.lua, project, idx(app.opts.revision_selectors, 0)(), to_rid); std::set parents; db.get_revision_parents(to_rid, parents); N(parents.size() == 1, @@ -1038,8 +1024,8 @@ CMD(pluck, "pluck", "", CMD_REF(workspac } else if (app.opts.revision_selectors.size() == 2) { - complete(app.opts, app.lua, projects, idx(app.opts.revision_selectors, 0)(), from_rid); - complete(app.opts, app.lua, projects, idx(app.opts.revision_selectors, 1)(), to_rid); + complete(app.opts, app.lua, project, idx(app.opts.revision_selectors, 0)(), from_rid); + complete(app.opts, app.lua, project, idx(app.opts.revision_selectors, 1)(), to_rid); } else throw usage(execid); @@ -1203,12 +1189,10 @@ CMD(heads, "heads", "", CMD_REF(tree), " F("please specify a branch, with --branch=BRANCH")); database db(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); - projects - .get_project_of_branch(app.opts.branchname) - .get_branch_heads(app.opts.branchname, heads, - app.opts.ignore_suspend_certs); + project.get_branch_heads(app.opts.branchname, heads, + app.opts.ignore_suspend_certs); if (heads.size() == 0) P(F("branch '%s' is empty") % app.opts.branchname); @@ -1219,7 +1203,7 @@ CMD(heads, "heads", "", CMD_REF(tree), " for (set::const_iterator i = heads.begin(); i != heads.end(); ++i) - cout << describe_revision(projects, *i) << '\n'; + cout << describe_revision(project, *i) << '\n'; } CMD(get_roster, "get_roster", "", CMD_REF(debug), N_("[REVID]"), @@ -1281,9 +1265,9 @@ CMD(get_roster, "get_roster", "", CMD_RE else if (args.size() == 1) { database db(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); revision_id rid; - complete(app.opts, app.lua, projects, idx(args, 0)(), rid); + complete(app.opts, app.lua, project, idx(args, 0)(), rid); I(!null_id(rid)); db.get_roster(rid, roster, mm); } ============================================================ --- cmd_netsync.cc db84756d8147257d0850b7a4c1a0b0d5e9fca25a +++ cmd_netsync.cc 7054046a7433ac46acfa4a4588b0002bcfa1ad54 @@ -228,12 +228,12 @@ CMD(push, "push", "", CMD_REF(network), { database db(app); key_store keys(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); netsync_connection_info info; extract_client_connection_info(app.opts, app.lua, db, keys, args, info); - run_netsync_protocol(app.opts, app.lua, projects, keys, + run_netsync_protocol(app.opts, app.lua, project, keys, client_voice, source_role, info); } @@ -246,7 +246,7 @@ CMD(pull, "pull", "", CMD_REF(network), { database db(app); key_store keys(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); netsync_connection_info info; extract_client_connection_info(app.opts, app.lua, db, keys, @@ -255,7 +255,7 @@ CMD(pull, "pull", "", CMD_REF(network), if (app.opts.signing_key() == "") P(F("doing anonymous pull; use -kKEYNAME if you need authentication")); - run_netsync_protocol(app.opts, app.lua, projects, keys, + run_netsync_protocol(app.opts, app.lua, project, keys, client_voice, sink_role, info); } @@ -269,7 +269,7 @@ CMD(sync, "sync", "", CMD_REF(network), { database db(app); key_store keys(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); netsync_connection_info info; extract_client_connection_info(app.opts, app.lua, db, keys, args, info); @@ -281,7 +281,7 @@ CMD(sync, "sync", "", CMD_REF(network), workspace work(app, true); } - run_netsync_protocol(app.opts, app.lua, projects, keys, + run_netsync_protocol(app.opts, app.lua, project, keys, client_voice, source_and_sink_role, info); } @@ -374,7 +374,7 @@ CMD(clone, "clone", "", CMD_REF(network) db.ensure_open(); key_store keys(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); info.client.include_pattern = globish(branchname()); info.client.exclude_pattern = globish(app.opts.exclude_patterns); @@ -388,7 +388,7 @@ CMD(clone, "clone", "", CMD_REF(network) // make sure we're back in the original dir so that file: URIs work change_current_working_dir(start_dir); - run_netsync_protocol(app.opts, app.lua, projects, keys, + run_netsync_protocol(app.opts, app.lua, project, keys, client_voice, sink_role, info); change_current_working_dir(workspace_dir); @@ -398,10 +398,8 @@ CMD(clone, "clone", "", CMD_REF(network) if (app.opts.revision_selectors.size() == 0) { set heads; - projects - .get_project_of_branch(app.opts.branchname) - .get_branch_heads(branchname, heads, - app.opts.ignore_suspend_certs); + project.get_branch_heads(branchname, heads, + app.opts.ignore_suspend_certs); N(heads.size() > 0, F("branch '%s' is empty") % branchname); if (heads.size() > 1) @@ -409,7 +407,7 @@ CMD(clone, "clone", "", CMD_REF(network) P(F("branch %s has multiple heads:") % branchname); for (set::const_iterator i = heads.begin(); i != heads.end(); ++i) P(i18n_format(" %s") - % describe_revision(projects, *i)); + % describe_revision(project, *i)); P(F("choose one with '%s clone -r SERVER BRANCH'") % ui.prog_name); E(false, F("branch %s has multiple heads") % branchname); } @@ -418,11 +416,9 @@ CMD(clone, "clone", "", CMD_REF(network) else if (app.opts.revision_selectors.size() == 1) { // use specified revision - complete(app.opts, app.lua, projects, idx(app.opts.revision_selectors, 0)(), ident); + complete(app.opts, app.lua, project, idx(app.opts.revision_selectors, 0)(), ident); - N(projects - .get_project_of_branch(branchname) - .revision_is_in_branch(ident, branchname), + N(project.revision_is_in_branch(ident, branchname), F("revision %s is not a member of branch %s") % ident % branchname); } @@ -493,7 +489,7 @@ CMD_NO_WORKSPACE(serve, "serve", "", CMD database db(app); key_store keys(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); pid_file pid(app.opts.pidfile); db.ensure_open(); @@ -517,7 +513,7 @@ CMD_NO_WORKSPACE(serve, "serve", "", CMD W(F("The --no-transport-auth option is usually only used " "in combination with --stdio")); - run_netsync_protocol(app.opts, app.lua, projects, keys, + run_netsync_protocol(app.opts, app.lua, project, keys, server_voice, source_and_sink_role, info); } ============================================================ --- cmd_othervcs.cc ba783daa7f499d9623d35d0a7de38adcf1c9cef8 +++ cmd_othervcs.cc cdd68594edb020c117661aa7eccc093eb66a6b33 @@ -40,7 +40,7 @@ CMD(cvs_import, "cvs_import", "", CMD_RE { database db(app); key_store keys(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); if (args.size() != 1) throw usage(execid); @@ -58,8 +58,7 @@ CMD(cvs_import, "cvs_import", "", CMD_RE // amount of work cache_user_key(app.opts, app.lua, db, keys); - import_cvs_repo(projects.get_project_of_branch(app.opts.branchname), - keys, cvsroot, app.opts.branchname); + import_cvs_repo(project, keys, cvsroot, app.opts.branchname); } ============================================================ --- cmd_policy.cc 6a10d05b0c08df3b0e8220acba639e19013a0d04 +++ cmd_policy.cc 68eafd64425fd1b26a6a1b03d1aebd9d83c9d4c5 @@ -190,14 +190,13 @@ CMD(create_subpolicy, "create_subpolicy" database db(app); key_store keys(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); branch_prefix prefix(idx(args, 0)()); branch_name name(prefix() + ".__policy__"); branch_policy policy_policy; branch_prefix parent_prefix; - E(projects.get_project_of_branch(name) - .get_policy_branch_policy_of(name, policy_policy, parent_prefix), + E(project.get_policy_branch_policy_of(name, policy_policy, parent_prefix), F("Cannot find parent policy for %s") % prefix); P(F("Parent policy: %s") % parent_prefix); @@ -307,14 +306,12 @@ CMD(create_branch, "create_branch", "", database db(app); key_store keys(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); branch_name branch(idx(args, 0)()); branch_policy parent_policy; branch_prefix parent_prefix; - project_t * const project = projects.maybe_get_project_of_branch(branch); - N(project != NULL, F("Cannot find project for %s") % branch); - E(project->get_policy_branch_policy_of(branch, parent_policy, parent_prefix), + E(project.get_policy_branch_policy_of(branch, parent_policy, parent_prefix), F("Cannot find a parent policy for %s") % branch); P(F("Parent policy: %s") % parent_prefix); @@ -430,15 +427,16 @@ CMD(policies, "policies", "", CMD_REF(li { database db(app); key_store keys(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); if (args.empty()) { - project_set::project_map const & project_list = projects.all_projects(); - for (project_set::project_map::const_iterator i = project_list.begin(); - i != project_list.end(); ++i) + std::set subpolicies; + project.get_subpolicies(branch_prefix(), subpolicies); + for (std::set::const_iterator i = subpolicies.begin(); + i != subpolicies.end(); ++i) { - list_policy(i->second, i->first, app.opts.recursive); + list_policy(project, *i, app.opts.recursive); } } else @@ -448,11 +446,9 @@ CMD(policies, "policies", "", CMD_REF(li { branch_name const bn((*i)()); branch_prefix const bp((*i)()); - project_t * const project = projects.maybe_get_project_of_branch(bn); - N(project != NULL, F("Cannot find a project for %s") % *i); - N(project->policy_exists(bp), + N(project.policy_exists(bp), F("Policy %s does not exist.") % *i); - list_policy(*project, bp, app.opts.recursive); + list_policy(project, bp, app.opts.recursive); } } } ============================================================ --- cmd_ws_commit.cc 26a27f9320351d0da69ecdbcc35465500f6ec712 +++ cmd_ws_commit.cc b6732ca44a2e1a76c6f15855aad79b26d763d3ef @@ -345,7 +345,7 @@ CMD(disapprove, "disapprove", "", CMD_RE { database db(app); key_store keys(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); if (args.size() != 1) throw usage(execid); @@ -355,14 +355,14 @@ CMD(disapprove, "disapprove", "", CMD_RE revision_id r; revision_t rev, rev_inverse; shared_ptr cs_inverse(new cset()); - complete(app.opts, app.lua, projects, idx(args, 0)(), r); + complete(app.opts, app.lua, project, idx(args, 0)(), r); db.get_revision(r, rev); N(rev.edges.size() == 1, F("revision %s has %d changesets, cannot invert") % r % rev.edges.size()); - guess_branch(app.opts, projects, r); + guess_branch(app.opts, project, r); N(app.opts.branchname() != "", F("need --branch argument for disapproval")); process_commit_message_args(app.opts, log_message_given, log_message, @@ -392,13 +392,11 @@ CMD(disapprove, "disapprove", "", CMD_RE calculate_ident(rdat, inv_id); db.put_revision(inv_id, rdat); - projects - .get_project_of_branch(app.opts.branchname) - .put_standard_certs_from_options(app.opts, app.lua, - keys, - inv_id, - app.opts.branchname, - log_message); + project.put_standard_certs_from_options(app.opts, app.lua, + keys, + inv_id, + app.opts.branchname, + log_message); guard.commit(); } } @@ -610,7 +608,7 @@ CMD(checkout, "checkout", "co", CMD_REF( system_path dir; database db(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); transaction_guard guard(db, false); if (args.size() > 1 || app.opts.revision_selectors.size() > 1) @@ -623,10 +621,8 @@ CMD(checkout, "checkout", "co", CMD_REF( F("use --revision or --branch to specify what to checkout")); set heads; - projects - .get_project_of_branch(app.opts.branchname) - .get_branch_heads(app.opts.branchname, heads, - app.opts.ignore_suspend_certs); + project.get_branch_heads(app.opts.branchname, heads, + app.opts.ignore_suspend_certs); N(heads.size() > 0, F("branch '%s' is empty") % app.opts.branchname); if (heads.size() > 1) @@ -634,7 +630,7 @@ CMD(checkout, "checkout", "co", CMD_REF( P(F("branch %s has multiple heads:") % app.opts.branchname); for (set::const_iterator i = heads.begin(); i != heads.end(); ++i) P(i18n_format(" %s") - % describe_revision(projects, *i)); + % describe_revision(project, *i)); P(F("choose one with '%s checkout -r'") % ui.prog_name); E(false, F("branch %s has multiple heads") % app.opts.branchname); } @@ -643,15 +639,13 @@ CMD(checkout, "checkout", "co", CMD_REF( else if (app.opts.revision_selectors.size() == 1) { // use specified revision - complete(app.opts, app.lua, projects, idx(app.opts.revision_selectors, 0)(), revid); + complete(app.opts, app.lua, project, idx(app.opts.revision_selectors, 0)(), revid); - guess_branch(app.opts, projects, revid); + guess_branch(app.opts, project, revid); I(!app.opts.branchname().empty()); - N(projects - .get_project_of_branch(app.opts.branchname) - .revision_is_in_branch(revid, app.opts.branchname), + N(project.revision_is_in_branch(revid, app.opts.branchname), F("revision %s is not a member of branch %s") % revid % app.opts.branchname); } @@ -1088,7 +1082,7 @@ CMD(commit, "commit", "ci", CMD_REF(work database db(app); key_store keys(app); workspace work(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); utf8 log_message(""); bool log_message_given; @@ -1125,7 +1119,7 @@ CMD(commit, "commit", "ci", CMD_REF(work i++) { // this will prefer --branch if it was set - guess_branch(app.opts, projects, edge_old_revision(i), + guess_branch(app.opts, project, edge_old_revision(i), bn_candidate); N(branchname() == "" || branchname == bn_candidate, F("parent revisions of this commit are in different branches:\n" @@ -1194,10 +1188,8 @@ CMD(commit, "commit", "ci", CMD_REF(work // for the divergence check, below set heads; - projects - .get_project_of_branch(app.opts.branchname) - .get_branch_heads(app.opts.branchname, heads, - app.opts.ignore_suspend_certs); + project.get_branch_heads(app.opts.branchname, heads, + app.opts.ignore_suspend_certs); unsigned int old_head_size = heads.size(); { @@ -1289,13 +1281,11 @@ CMD(commit, "commit", "ci", CMD_REF(work db.put_revision(restricted_rev_id, rdat); } - projects - .get_project_of_branch(app.opts.branchname) - .put_standard_certs_from_options(app.opts, app.lua, - keys, - restricted_rev_id, - app.opts.branchname, - log_message); + project.put_standard_certs_from_options(app.opts, app.lua, + keys, + restricted_rev_id, + app.opts.branchname, + log_message); guard.commit(); } @@ -1313,10 +1303,8 @@ CMD(commit, "commit", "ci", CMD_REF(work work.blank_user_log(); - projects - .get_project_of_branch(app.opts.branchname) - .get_branch_heads(app.opts.branchname, heads, - app.opts.ignore_suspend_certs); + project.get_branch_heads(app.opts.branchname, heads, + app.opts.ignore_suspend_certs); if (heads.size() > old_head_size && old_head_size > 0) { P(F("note: this revision creates divergence\n" "note: you may (or may not) wish to run '%s merge'") @@ -1334,7 +1322,7 @@ CMD(commit, "commit", "ci", CMD_REF(work // later. map certs; vector< revision > ctmp; - projects.get_revision_certs(restricted_rev_id, ctmp); + project.get_revision_certs(restricted_rev_id, ctmp); for (vector< revision >::const_iterator i = ctmp.begin(); i != ctmp.end(); ++i) certs.insert(make_pair(i->inner().name, i->inner().value)); @@ -1384,7 +1372,7 @@ CMD_NO_WORKSPACE(import, "import", "", C revision_id ident; system_path dir; database db(app); - project_set projects(db, app.lua, app.opts); + project_t project(db, app.lua, app.opts); N(args.size() == 1, F("you must specify a directory to import")); @@ -1392,15 +1380,13 @@ CMD_NO_WORKSPACE(import, "import", "", C if (app.opts.revision_selectors.size() == 1) { // use specified revision - complete(app.opts, app.lua, projects, idx(app.opts.revision_selectors, 0)(), ident); + complete(app.opts, app.lua, project, idx(app.opts.revision_selectors, 0)(), ident); - guess_branch(app.opts, projects, ident); + guess_branch(app.opts, project, ident); I(!app.opts.branchname().empty()); - N(projects - .get_project_of_branch(app.opts.branchname) - .revision_is_in_branch(ident, app.opts.branchname), + N(project.revision_is_in_branch(ident, app.opts.branchname), F("revision %s is not a member of branch %s") % ident % app.opts.branchname); } @@ -1411,16 +1397,14 @@ CMD_NO_WORKSPACE(import, "import", "", C F("use --revision or --branch to specify the parent revision for the import")); set heads; - projects - .get_project_of_branch(app.opts.branchname) - .get_branch_heads(app.opts.branchname, heads, - app.opts.ignore_suspend_certs); + project.get_branch_heads(app.opts.branchname, heads, + app.opts.ignore_suspend_certs); if (heads.size() > 1) { P(F("branch %s has multiple heads:") % app.opts.branchname); for (set::const_iterator i = heads.begin(); i != heads.end(); ++i) P(i18n_format(" %s") - % describe_revision(projects, *i)); + % describe_revision(project, *i)); P(F("choose one with '%s import -r'") % ui.prog_name); E(false, F("branch %s has multiple heads") % app.opts.branchname); } ============================================================ --- commands.cc f87e5793a4e0f2d68bf0bf21e6234b06fb18b01b +++ commands.cc 0cf90848baf2600e9f60d74d642af0202b8ae23b @@ -858,7 +858,7 @@ string } string -describe_revision(project_set & projects, revision_id const & id) +describe_revision(project_t & project, revision_id const & id) { cert_name author_name(author_cert_name); cert_name date_name(date_cert_name); @@ -869,14 +869,14 @@ describe_revision(project_set & projects // append authors and date of this revision vector< revision > tmp; - projects.get_revision_certs_by_name(id, author_name, tmp); + project.get_revision_certs_by_name(id, author_name, tmp); for (vector< revision >::const_iterator i = tmp.begin(); i != tmp.end(); ++i) { description += " "; description += i->inner().value(); } - projects.get_revision_certs_by_name(id, date_name, tmp); + project.get_revision_certs_by_name(id, date_name, tmp); for (vector< revision >::const_iterator i = tmp.begin(); i != tmp.end(); ++i) { ============================================================ --- netcmd.hh 615c02971da60cd1c1783d9dd80329ad84997971 +++ netcmd.hh 10527907b0ef2b48afc16182cc998211ba879d08 @@ -24,7 +24,7 @@ class database; struct globish; class database; -class project_set; +class project_t; class key_store; class lua_hooks; class options; @@ -196,7 +196,7 @@ void run_netsync_protocol(options & opts }; void run_netsync_protocol(options & opts, lua_hooks & lua, - project_set & projects, key_store & keys, + project_t & project, key_store & keys, protocol_voice voice, protocol_role role, netsync_connection_info const & info); ============================================================ --- netsync.cc 7f523fa35df92eb2ae1f04bc790731d8609b97f1 +++ netsync.cc c81c5cbd3b5d0c784f762019e3db267a4a101aff @@ -323,7 +323,7 @@ session: globish our_exclude_pattern; globish_matcher our_matcher; - project_set & projects; + project_t & project; key_store & keys; lua_hooks & lua; bool use_transport_auth; @@ -430,7 +430,7 @@ session: session(options & opts, lua_hooks & lua, - project_set & projects, + project_t & project, key_store & keys, protocol_role role, protocol_voice voice, @@ -547,7 +547,7 @@ session::session(options & opts, session::session(options & opts, lua_hooks & lua, - project_set & projects, + project_t & project, key_store & keys, protocol_role role, protocol_voice voice, @@ -561,7 +561,7 @@ session::session(options & opts, our_include_pattern(our_include_pattern), our_exclude_pattern(our_exclude_pattern), our_matcher(our_include_pattern, our_exclude_pattern), - projects(projects), + project(project), keys(keys), lua(lua), use_transport_auth(opts.use_transport_auth), @@ -601,7 +601,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.db, *this), + rev_enumerator(project.db, *this), initiated_by_server(initiated_by_server) {} @@ -654,7 +654,7 @@ session::~session() certs.insert(make_pair(j->key, make_pair(j->name, j->value))); revision_data rdat; - projects.db.get_revision(*i, rdat); + project.db.get_revision(*i, rdat); lua.hook_note_netsync_revision_received(*i, rdat, certs, session_id); } @@ -705,7 +705,7 @@ session::~session() certs.insert(make_pair(j->key, make_pair(j->name, j->value))); revision_data rdat; - projects.db.get_revision(*i, rdat); + project.db.get_revision(*i, rdat); lua.hook_note_netsync_revision_sent(*i, rdat, certs, session_id); } @@ -750,7 +750,7 @@ session::note_file_data(file_id const & if (role == sink_role) return; file_data fd; - projects.db.get_file_version(f, fd); + project.db.get_file_version(f, fd); queue_data_cmd(file_item, f.inner(), fd.inner()()); file_items_sent.insert(f); } @@ -761,7 +761,7 @@ session::note_file_delta(file_id const & if (role == sink_role) return; file_delta fdel; - projects.db.get_arbitrary_file_delta(src, dst, fdel); + project.db.get_arbitrary_file_delta(src, dst, fdel); queue_delta_cmd(file_item, src.inner(), dst.inner(), fdel.inner()); file_items_sent.insert(dst); } @@ -772,7 +772,7 @@ session::note_rev(revision_id const & re if (role == sink_role) return; revision_t rs; - projects.db.get_revision(rev, rs); + project.db.get_revision(rev, rs); data tmp; write_revision(rs, tmp); queue_data_cmd(revision_item, rev.inner(), tmp()); @@ -786,7 +786,7 @@ session::note_cert(id const & c) return; revision cert; string str; - projects.db.get_revision_cert(c, cert); + project.db.get_revision_cert(c, cert); write_cert(cert.inner(), str); queue_data_cmd(cert_item, c, str); sent_certs.push_back(cert.inner()); @@ -1204,7 +1204,7 @@ session::queue_anonymous_cmd(protocol_ro netcmd cmd; rsa_oaep_sha_data hmac_key_encrypted; if (use_transport_auth) - projects.db.encrypt_rsa(remote_peer_key_name, nonce2(), hmac_key_encrypted); + project.db.encrypt_rsa(remote_peer_key_name, nonce2(), hmac_key_encrypted); cmd.write_anonymous_cmd(role, include_pattern, exclude_pattern, hmac_key_encrypted); write_netcmd_and_try_flush(cmd); @@ -1223,7 +1223,7 @@ session::queue_auth_cmd(protocol_role ro netcmd cmd; rsa_oaep_sha_data hmac_key_encrypted; I(use_transport_auth); - projects.db.encrypt_rsa(remote_peer_key_name, nonce2(), hmac_key_encrypted); + project.db.encrypt_rsa(remote_peer_key_name, nonce2(), hmac_key_encrypted); cmd.write_auth_cmd(role, include_pattern, exclude_pattern, client, nonce1, hmac_key_encrypted, signature); write_netcmd_and_try_flush(cmd); @@ -1366,10 +1366,10 @@ session::process_hello_cmd(rsa_keypair_i L(FL("server key has name %s, hash %s") % their_keyname % printable_key_hash); var_key their_key_key(known_servers_domain, var_name(peer_id)); - if (projects.db.var_exists(their_key_key)) + if (project.db.var_exists(their_key_key)) { var_value expected_key_hash; - projects.db.get_var(their_key_key, expected_key_hash); + project.db.get_var(their_key_key, expected_key_hash); if (expected_key_hash != printable_key_hash) { P(F("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n" @@ -1393,12 +1393,12 @@ session::process_hello_cmd(rsa_keypair_i "their key's fingerprint: %s") % peer_id % printable_key_hash); - projects.db.set_var(their_key_key, printable_key_hash); + project.db.set_var(their_key_key, printable_key_hash); } - if (projects.db.public_key_exists(their_keyname)) + if (project.db.public_key_exists(their_keyname)) { rsa_pub_key tmp; - projects.db.get_key(their_keyname, tmp); + project.db.get_key(their_keyname, tmp); E(keys_match(their_keyname, tmp, their_keyname, their_key), F("the server sent a key with the key id '%s'\n" @@ -1413,7 +1413,7 @@ session::process_hello_cmd(rsa_keypair_i { // this should now always return true since we just checked // for the existence of this particular key - I(projects.db.put_key(their_keyname, their_key)); + I(project.db.put_key(their_keyname, their_key)); W(F("saving public key for %s to database") % their_keyname); } @@ -1424,7 +1424,7 @@ session::process_hello_cmd(rsa_keypair_i % printable_key_hash % hnonce); } - I(projects.db.public_key_exists(their_key_hash)); + I(project.db.public_key_exists(their_key_hash)); // save their identity this->received_remote_key = true; @@ -1434,7 +1434,7 @@ session::process_hello_cmd(rsa_keypair_i // clients always include in the synchronization set, every branch that the // user requested set all_branches, ok_branches; - projects.get_branch_list(all_branches); + project.get_branch_list(all_branches); for (set::const_iterator i = all_branches.begin(); i != all_branches.end(); i++) { @@ -1454,11 +1454,11 @@ session::process_hello_cmd(rsa_keypair_i // make a signature with it; // this also ensures our public key is in the database rsa_sha1_signature sig; - keys.make_signature(projects.db, signing_key, nonce(), sig); + keys.make_signature(project.db, signing_key, nonce(), sig); // get the hash identifier for our pubkey rsa_pub_key our_pub; - projects.db.get_key(signing_key, our_pub); + project.db.get_key(signing_key, our_pub); id our_key_hash_raw; key_hash_code(signing_key, our_pub, our_key_hash_raw); @@ -1523,7 +1523,7 @@ session::process_anonymous_cmd(protocol_ } set all_branches, ok_branches; - projects.get_branch_list(all_branches); + project.get_branch_list(all_branches); globish_matcher their_matcher(their_include_pattern, their_exclude_pattern); for (set::const_iterator i = all_branches.begin(); i != all_branches.end(); i++) @@ -1597,14 +1597,14 @@ session::process_auth_cmd(protocol_role globish_matcher their_matcher(their_include_pattern, their_exclude_pattern); - if (!projects.db.public_key_exists(client)) + if (!project.db.public_key_exists(client)) { // If it's not in the db, it still could be in the keystore if we // have the private key that goes with it. rsa_keypair_id their_key_id; keypair their_keypair; if (keys.maybe_get_key_pair(client, their_key_id, their_keypair)) - projects.db.put_key(their_key_id, their_keypair.pub); + project.db.put_key(their_key_id, their_keypair.pub); else { this->saved_nonce = id(""); @@ -1622,7 +1622,7 @@ session::process_auth_cmd(protocol_role // Get their public key. rsa_keypair_id their_id; rsa_pub_key their_key; - projects.db.get_pubkey(client, their_id, their_key); + project.db.get_pubkey(client, their_id, their_key); lua.hook_note_netsync_start(session_id, "server", their_role, peer_id, their_id, @@ -1661,7 +1661,7 @@ session::process_auth_cmd(protocol_role } set all_branches, ok_branches; - projects.get_branch_list(all_branches); + project.get_branch_list(all_branches); for (set::const_iterator i = all_branches.begin(); i != all_branches.end(); i++) { @@ -1712,7 +1712,7 @@ session::process_auth_cmd(protocol_role this->received_remote_key = true; // Check the signature. - if (projects.db.check_signature(their_id, nonce1(), signature) == cert_ok) + if (project.db.check_signature(their_id, nonce1(), signature) == cert_ok) { // Get our private key and sign back. L(FL("client signature OK, accepting authentication")); @@ -1895,18 +1895,18 @@ session::data_exists(netcmd_item_type ty { case key_item: return key_refiner.local_item_exists(item) - || projects.db.public_key_exists(item); + || project.db.public_key_exists(item); case file_item: - return projects.db.file_version_exists(file_id(item)); + return project.db.file_version_exists(file_id(item)); case revision_item: return rev_refiner.local_item_exists(item) - || projects.db.revision_exists(revision_id(item)); + || project.db.revision_exists(revision_id(item)); case cert_item: return cert_refiner.local_item_exists(item) - || projects.db.revision_cert_exists(revision_id(item)); + || project.db.revision_cert_exists(revision_id(item)); case epoch_item: return epoch_refiner.local_item_exists(item) - || projects.db.epoch_exists(epoch_id(item)); + || project.db.epoch_exists(epoch_id(item)); } return false; } @@ -1931,7 +1931,7 @@ session::load_data(netcmd_item_type type { branch_uid branch; epoch_data epoch; - projects.db.get_epoch(epoch_id(item), branch, epoch); + project.db.get_epoch(epoch_id(item), branch, epoch); write_epoch(branch, epoch, out); } break; @@ -1939,7 +1939,7 @@ session::load_data(netcmd_item_type type { rsa_keypair_id keyid; rsa_pub_key pub; - projects.db.get_pubkey(item, keyid, pub); + project.db.get_pubkey(item, keyid, pub); L(FL("public key '%s' is also called '%s'") % hitem() % keyid); write_pubkey(keyid, pub, out); sent_keys.push_back(keyid); @@ -1950,7 +1950,7 @@ session::load_data(netcmd_item_type type { revision_data mdat; data dat; - projects.db.get_revision(revision_id(item), mdat); + project.db.get_revision(revision_id(item), mdat); out = mdat.inner()(); } break; @@ -1959,7 +1959,7 @@ session::load_data(netcmd_item_type type { file_data fdat; data dat; - projects.db.get_file_version(file_id(item), fdat); + project.db.get_file_version(file_id(item), fdat); out = fdat.inner()(); } break; @@ -1967,7 +1967,7 @@ session::load_data(netcmd_item_type type case cert_item: { revision c; - projects.db.get_revision_cert(item, c); + project.db.get_revision_cert(item, c); string tmp; write_cert(c.inner(), out); } @@ -2005,14 +2005,14 @@ session::process_data_cmd(netcmd_item_ty L(FL("received epoch %s for branch %s") % encode_hexenc(epoch.inner()()) % branch); map epochs; - projects.db.get_epochs(epochs); + project.db.get_epochs(epochs); map::const_iterator i; i = epochs.find(branch); if (i == epochs.end()) { L(FL("branch %s has no epoch; setting epoch to %s") % branch % encode_hexenc(epoch.inner()())); - projects.db.set_epoch(branch, epoch); + project.db.set_epoch(branch, epoch); } else { @@ -2055,7 +2055,7 @@ session::process_data_cmd(netcmd_item_ty % hitem() % keyid % hitem() % encode_hexenc(tmp())); } - if (projects.db.put_key(keyid, pub)) + if (project.db.put_key(keyid, pub)) written_keys.push_back(keyid); else error(partial_transfer, @@ -2071,7 +2071,7 @@ session::process_data_cmd(netcmd_item_ty cert_hash_code(c, tmp); if (! (tmp == item)) throw bad_decode(F("hash check failed for revision cert '%s'") % hitem()); - if (projects.db.put_revision_cert(revision(c))) + if (project.db.put_revision_cert(revision(c))) written_certs.push_back(c); } break; @@ -2079,7 +2079,7 @@ session::process_data_cmd(netcmd_item_ty case revision_item: { L(FL("received revision '%s'") % hitem()); - if (projects.db.put_revision(revision_id(item), revision_data(dat))) + if (project.db.put_revision(revision_id(item), revision_data(dat))) written_revisions.push_back(revision_id(item)); } break; @@ -2087,7 +2087,7 @@ session::process_data_cmd(netcmd_item_ty case file_item: { L(FL("received file '%s'") % hitem()); - projects.db.put_file(file_id(item), file_data(dat)); + project.db.put_file(file_id(item), file_data(dat)); } break; } @@ -2112,7 +2112,7 @@ session::process_delta_cmd(netcmd_item_t case file_item: { file_id src_file(base), dst_file(ident); - projects.db.put_file_version(src_file, dst_file, file_delta(del)); + project.db.put_file_version(src_file, dst_file, file_delta(del)); } break; @@ -2465,7 +2465,7 @@ call_server(options & opts, static void call_server(options & opts, lua_hooks & lua, - project_set & projects, + project_t & project, key_store & keys, protocol_role role, netsync_connection_info const & info, @@ -2473,7 +2473,7 @@ call_server(options & opts, unsigned long timeout_seconds) { Netxx::PipeCompatibleProbe probe; - transaction_guard guard(projects.db); + transaction_guard guard(project.db); Netxx::Timeout timeout(static_cast(timeout_seconds)), instant(0,1); @@ -2490,7 +2490,7 @@ call_server(options & opts, Netxx::SockOpt socket_options(server->get_socketfd(), false); socket_options.set_non_blocking(); - session sess(opts, lua, projects, keys, + session sess(opts, lua, project, keys, role, client_voice, info.client.include_pattern, info.client.exclude_pattern, @@ -2654,7 +2654,7 @@ handle_new_connection(options & opts, static void handle_new_connection(options & opts, lua_hooks & lua, - project_set & projects, + project_t & project, key_store & keys, Netxx::Address & addr, Netxx::StreamServer & server, @@ -2684,7 +2684,7 @@ handle_new_connection(options & opts, shared_ptr (new Netxx::Stream(client.get_socketfd(), timeout)); - shared_ptr sess(new session(opts, lua, projects, keys, + shared_ptr sess(new session(opts, lua, project, keys, role, server_voice, globish("*"), globish(""), lexical_cast(client), str)); @@ -2827,7 +2827,7 @@ serve_connections(options & opts, static void serve_connections(options & opts, lua_hooks & lua, - project_set & projects, + project_t & project, key_store & keys, protocol_role role, std::list const & addresses, @@ -2922,7 +2922,7 @@ serve_connections(options & opts, if (!guard) guard = shared_ptr - (new transaction_guard(projects.db)); + (new transaction_guard(project.db)); I(guard); @@ -2961,7 +2961,7 @@ serve_connections(options & opts, role = sink_role; shared_ptr sess(new session(opts, lua, - projects, keys, + project, keys, role, client_voice, info.client.include_pattern, info.client.exclude_pattern, @@ -3004,7 +3004,7 @@ serve_connections(options & opts, // we either got a new connection else if (fd == server) - handle_new_connection(opts, lua, projects, keys, + handle_new_connection(opts, lua, project, keys, addr, server, timeout, role, sessions); @@ -3104,7 +3104,7 @@ serve_single_connection(shared_ptrbegin_service(); - transaction_guard guard(sess->projects.db); + transaction_guard guard(sess->project.db); map > sessions; set armed_sessions; @@ -3229,9 +3229,7 @@ session::rebuild_merkle_trees(set > certs; - projects - .get_project_of_branch(*i) - .get_branch_certs(*i, certs); + project.get_branch_certs(*i, certs); for (vector< revision >::const_iterator j = certs.begin(); j != certs.end(); j++) { @@ -3251,13 +3249,13 @@ session::rebuild_merkle_trees(set epochs; - projects.db.get_epochs(epochs); + project.db.get_epochs(epochs); epoch_data epoch_zero(string(constants::epochlen_bytes, '\x00')); for (set::const_iterator i = branchnames.begin(); i != branchnames.end(); ++i) { - branch_uid branch = projects.translate_branch(*i); + branch_uid branch = project.translate_branch(*i); map::const_iterator j; j = epochs.find(branch); @@ -3266,7 +3264,7 @@ session::rebuild_merkle_trees(set > > cert_idx; cert_idx idx; - projects.db.get_revision_cert_nobranch_index(idx); + project.db.get_revision_cert_nobranch_index(idx); // Insert all non-branch certs reachable via these revisions // (branch certs were inserted earlier). @@ -3313,11 +3311,11 @@ session::rebuild_merkle_trees(set::const_iterator key = inserted_keys.begin(); key != inserted_keys.end(); key++) { - if (projects.db.public_key_exists(*key)) + if (project.db.public_key_exists(*key)) { rsa_pub_key pub; - projects.db.get_key(*key, pub); + project.db.get_key(*key, pub); id keyhash; key_hash_code(*key, pub, keyhash); @@ -3354,7 +3352,7 @@ run_netsync_protocol(options & opts, lua void run_netsync_protocol(options & opts, lua_hooks & lua, - project_set & projects, key_store & keys, + project_t & project, key_store & keys, protocol_voice voice, protocol_role role, netsync_connection_info const & info) @@ -3381,14 +3379,14 @@ run_netsync_protocol(options & opts, lua if (opts.bind_stdio) { shared_ptr str(new Netxx::PipeStream(0,1)); - shared_ptr sess(new session(opts, lua, projects, keys, + shared_ptr sess(new session(opts, lua, project, keys, role, server_voice, globish("*"), globish(""), "stdio", str)); serve_single_connection(sess,constants::netsync_timeout_seconds); } else - serve_connections(opts, lua, projects, keys, + serve_connections(opts, lua, project, keys, role, info.server.addrs, static_cast(constants::netsync_default_port), @@ -3398,7 +3396,7 @@ run_netsync_protocol(options & opts, lua else { I(voice == client_voice); - call_server(opts, lua, projects, keys, + call_server(opts, lua, project, keys, role, info, static_cast(constants::netsync_default_port), static_cast(constants::netsync_timeout_seconds)); ============================================================ --- project.cc ed85ed558b26c5d9e0e63359c59bec7ba3f600f4 +++ project.cc c9a149747281d686e02992e3de35cdd5f1925bba @@ -624,201 +624,6 @@ project_t::put_cert(key_store & keys, put_simple_revision_cert(db, keys, id, name, value); } -//////////////////////////////////////////////////////////////////////// - -project_set::project_set(database & db, - lua_hooks & lua, - options & opts) - : db(db) -{ - map project_definitions; - lua.hook_get_projects(project_definitions); - for (map::const_iterator i = project_definitions.begin(); - i != project_definitions.end(); ++i) - { - if (opts.policy_revisions.find(branch_prefix(i->first)) - == opts.policy_revisions.end()) - { - projects.insert(make_pair(branch_prefix(i->first), - project_t(branch_prefix(i->first), - i->second, - db))); - } - } - for (map >::const_iterator - i = opts.policy_revisions.begin(); - i != opts.policy_revisions.end(); ++i) - { - id rid; - decode_hexenc(i->second, rid); - projects.insert(make_pair(i->first, - project_t(i->first, - revision_id(rid), - db))); - } - if (projects.empty()) - { - projects.insert(std::make_pair("", project_t(db))); - } -} - -project_set::project_map const & -project_set::all_projects() const -{ - return projects; -} - -project_t & -project_set::get_project_of_branch(branch_name const & branch) -{ - MM(branch); - project_t * const project = maybe_get_project_of_branch(branch); - I(project != NULL); - return *project; -} - -project_t * -project_set::maybe_get_project_of_branch(branch_name const & branch) -{ - for (map::iterator i = projects.begin(); - i != projects.end(); ++i) - { - if (i->first() == "") - return &i->second; - std::string pre = i->first() + "."; - if (branch().substr(0, pre.size()) == pre || branch() == i->first()) - return &i->second; - } - return NULL; -} - -void -project_set::get_branch_list(std::set & names, - bool check_heads) -{ - names.clear(); - for (project_map::iterator i = projects.begin(); - i != projects.end(); ++i) - { - std::set some_names; - i->second.get_branch_list(some_names, check_heads); - std::copy(some_names.begin(), some_names.end(), - std::inserter(names, names.end())); - } -} - -void -project_set::get_branch_list(globish const & glob, - std::set & names, - bool check_heads) -{ - names.clear(); - for (project_map::iterator i = projects.begin(); - i != projects.end(); ++i) - { - std::set some_names; - i->second.get_branch_list(glob, some_names, check_heads); - std::copy(some_names.begin(), some_names.end(), - std::inserter(names, names.end())); - } -} - -void -project_set::get_branch_uids(std::set & uids) -{ - uids.clear(); - for (project_map::iterator i = projects.begin(); - i != projects.end(); ++i) - { - std::set some_uids; - i->second.get_branch_list(some_uids); - std::copy(some_uids.begin(), some_uids.end(), - std::inserter(uids, uids.end())); - } -} - -branch_uid -project_set::translate_branch(branch_name const & branch) -{ - return get_project_of_branch(branch).translate_branch(branch); -} - -branch_name -project_set::translate_branch(branch_uid const & branch) -{ - for (project_map::iterator i = projects.begin(); - i != projects.end(); ++i) - { - std::set uids; - i->second.get_branch_list(uids); - if (uids.find(branch) != uids.end()) - { - return i->second.translate_branch(branch); - } - } - E(false, F("Cannot find a name for the branch with uid '%s'") % branch); -} - -outdated_indicator -project_set::get_tags(std::set & tags) -{ - I(!projects.empty()); - return projects.begin()->second.get_tags(tags); -} - -void -project_set::put_tag(key_store & keys, - revision_id const & id, - string const & name) -{ - cert_revision_tag(db, keys, id, name); -} - -outdated_indicator -project_set::get_revision_branches(revision_id const & id, - std::set & branches) -{ - std::vector > certs; - outdated_indicator i = get_revision_certs_by_name(id, branch_cert_name, certs); - branches.clear(); - for (std::vector >::const_iterator i = certs.begin(); - i != certs.end(); ++i) - { - branch_uid uid(i->inner().value()); - - for (project_map::iterator i = projects.begin(); - i != projects.end(); ++i) - { - std::set branchids; - i->second.get_branch_list(branchids); - if (branchids.find(uid) != branchids.end()) - { - branches.insert(i->second.translate_branch(uid)); - break; - } - } - } - return i; -} - -outdated_indicator -project_set::get_revision_certs_by_name(revision_id const & id, - cert_name const & name, - std::vector > & certs) -{ - outdated_indicator i = db.get_revision_certs(id, name, certs); - erase_bogus_certs(db, certs); - return i; -} - -outdated_indicator -project_set::get_revision_certs(revision_id const & id, - std::vector > & certs) -{ - return db.get_revision_certs(id, certs); -} - - // Local Variables: // mode: C++ // fill-column: 76 ============================================================ --- project.hh 3c2a769f1897d909d9e18d6708aff10607b395ac +++ project.hh 3f2cb4af25501bef9d91c87b4318b9ac3e5be11a @@ -134,56 +134,6 @@ public: cert_value const & value); }; -class project_set -{ -public: - database & db; - typedef std::map project_map; - -private: - project_map projects; - -public: - project_set(database & db, - lua_hooks & lua, - options & opts); - - project_map const & all_projects() const; - - // Get the project containing a named branch. - project_t & get_project_of_branch(branch_name const & branch); - project_t * maybe_get_project_of_branch(branch_name const & branch); - - // All branches in all projects. - void get_branch_list(std::set & names, - bool check_heads = false); - // Subset of branches from all projects. - void get_branch_list(globish const & glob, - std::set & names, - bool check_heads = false); - - // used by epoch handling - void get_branch_uids(std::set & ids); - branch_uid translate_branch(branch_name const & branch); - branch_name translate_branch(branch_uid const & branch); - - // What tags exist across all projects? - outdated_indicator get_tags(std::set & tags); - // Because tags aren't yet per-project. - void put_tag(key_store & keys, revision_id const & id, std::string const & name); - - // What branches in *any* project does the given revision belong to? - outdated_indicator get_revision_branches(revision_id const & id, - std::set & branches); - - outdated_indicator get_revision_certs_by_name(revision_id const & id, - cert_name const & name, - std::vector > & certs); - - outdated_indicator get_revision_certs(revision_id const & id, - std::vector > & certs); -}; - #endif ============================================================ --- rcs_import.cc 94d70c02806a0ea2447281e60abb8561bce31f91 +++ rcs_import.cc a7f8196795b4e5a45d74be47cf4df22e995f4659 @@ -625,7 +625,7 @@ process_branch(database & db, { string branch; data branch_data; - file_id branch_uid; + file_id branch_id; vector< piece > branch_lines; bool priv = false; map::const_iterator be = cvs.branch_first_entries.find(*i); @@ -639,10 +639,10 @@ process_branch(database & db, construct_version(*curr_lines, *i, branch_lines, r); insert_into_db(db, curr_data, curr_id, - branch_lines, branch_data, branch_uid); + branch_lines, branch_data, branch_id); cvs.push_branch(branch, priv); - process_branch(db, *i, branch_lines, branch_data, branch_uid, r, cvs); + process_branch(db, *i, branch_lines, branch_data, branch_id, r, cvs); cvs.pop_branch(); L(FL("finished RCS branch %s = '%s'") % (*i) % branch); ============================================================ --- selectors.cc 248b4df6a7de6b4582234ca930da381cc462218c +++ selectors.cc 535e4916da7d47f6ff8d82db0df576635c38d126 @@ -49,7 +49,7 @@ static void typedef vector > selector_list; static void -decode_selector(project_set & projects, +decode_selector(project_t & project, options const & opts, lua_hooks & lua, string const & orig_sel, @@ -181,7 +181,7 @@ decode_selector(project_set & projects, parent_map parents; set parent_ids; - work.get_parent_rosters(projects.db, parents); + work.get_parent_rosters(project.db, parents); for (parent_map::const_iterator i = parents.begin(); i != parents.end(); ++i) @@ -189,7 +189,7 @@ decode_selector(project_set & projects, parent_ids.insert(i->first); } - diagnose_ambiguous_expansion(projects, "p:", parent_ids); + diagnose_ambiguous_expansion(project, "p:", parent_ids); sel = (* parent_ids.begin()).inner()(); } else @@ -201,7 +201,7 @@ static void } static void -parse_selector(project_set & projects, +parse_selector(project_t & project, options const & opts, lua_hooks & lua, string const & str, selector_list & sels) @@ -230,46 +230,46 @@ parse_selector(project_set & projects, string sel; selector_type type = sel_unknown; - decode_selector(projects, opts, lua, *i, type, sel); + decode_selector(project, opts, lua, *i, type, sel); sels.push_back(make_pair(type, sel)); } } } static void -complete_one_selector(project_set & projects, +complete_one_selector(project_t & project, selector_type ty, string const & value, set & completions) { switch (ty) { case sel_ident: - projects.db.complete(value, completions); + project.db.complete(value, completions); break; case sel_parent: I(!value.empty()); - projects.db.select_parent(value, completions); + project.db.select_parent(value, completions); break; case sel_author: - projects.db.select_cert(author_cert_name(), value, completions); + project.db.select_cert(author_cert_name(), value, completions); break; case sel_tag: - projects.db.select_cert(tag_cert_name(), value, completions); + project.db.select_cert(tag_cert_name(), value, completions); break; case sel_branch: I(!value.empty()); { set branches; - projects.get_branch_list(globish(value), branches); + project.get_branch_list(globish(value), branches); for (set::const_iterator i = branches.begin(); i != branches.end(); ++i) { set in_this_branch; - projects.db.select_cert(branch_cert_name(), (*i)(), in_this_branch); + project.db.select_cert(branch_cert_name(), (*i)(), in_this_branch); std::copy(in_this_branch.begin(), in_this_branch.end(), std::inserter(completions, completions.end())); @@ -278,19 +278,19 @@ complete_one_selector(project_set & proj break; case sel_unknown: - projects.db.select_author_tag_or_branch(value, completions); + project.db.select_author_tag_or_branch(value, completions); break; case sel_date: - projects.db.select_date(value, "GLOB", completions); + project.db.select_date(value, "GLOB", completions); break; case sel_earlier: - projects.db.select_date(value, "<=", completions); + project.db.select_date(value, "<=", completions); break; case sel_later: - projects.db.select_date(value, ">", completions); + project.db.select_date(value, ">", completions); break; case sel_cert: @@ -307,10 +307,10 @@ complete_one_selector(project_set & proj spot++; certvalue = value.substr(spot); - projects.db.select_cert(certname, certvalue, completions); + project.db.select_cert(certname, certvalue, completions); } else - projects.db.select_cert(value, completions); + project.db.select_cert(value, completions); } break; @@ -320,7 +320,7 @@ complete_one_selector(project_set & proj // get branch names set branch_names; I(!value.empty()); - projects.get_branch_list(globish(value), branch_names); + project.get_branch_list(globish(value), branch_names); L(FL("found %d matching branches") % branch_names.size()); @@ -329,9 +329,7 @@ complete_one_selector(project_set & proj bn != branch_names.end(); bn++) { set branch_heads; - projects - .get_project_of_branch(*bn) - .get_branch_heads(*bn, branch_heads, ty == sel_any_head); + project.get_branch_heads(*bn, branch_heads, ty == sel_any_head); completions.insert(branch_heads.begin(), branch_heads.end()); L(FL("after get_branch_heads for %s, heads has %d entries") % (*bn) % completions.size()); @@ -342,25 +340,25 @@ static void } static void -complete_selector(project_set & projects, +complete_selector(project_t & project, selector_list const & limit, set & completions) { if (limit.empty()) // all the ids in the database { - projects.db.complete("", completions); + project.db.complete("", completions); return; } selector_list::const_iterator i = limit.begin(); - complete_one_selector(projects, i->first, i->second, completions); + complete_one_selector(project, i->first, i->second, completions); i++; while (i != limit.end()) { set candidates; set intersection; - complete_one_selector(projects, i->first, i->second, candidates); + complete_one_selector(project, i->first, i->second, candidates); intersection.clear(); set_intersection(completions.begin(), completions.end(), @@ -374,12 +372,12 @@ complete(options const & opts, lua_hooks void complete(options const & opts, lua_hooks & lua, - project_set & projects, + project_t & project, string const & str, set & completions) { selector_list sels; - parse_selector(projects, opts, lua, str, sels); + parse_selector(project, opts, lua, str, sels); // avoid logging if there's no expansion to be done if (sels.size() == 1 @@ -387,13 +385,13 @@ complete(options const & opts, lua_hooks && sels[0].second.size() == constants::idlen) { completions.insert(revision_id(decode_hexenc(sels[0].second))); - N(projects.db.revision_exists(*completions.begin()), + N(project.db.revision_exists(*completions.begin()), F("no such revision '%s'") % *completions.begin()); return; } P(F("expanding selection '%s'") % str); - complete_selector(projects, sels, completions); + complete_selector(project, sels, completions); N(completions.size() != 0, F("no match for selection '%s'") % str); @@ -405,23 +403,23 @@ complete(options const & opts, lua_hooks // This may be impossible, but let's make sure. // All the callers used to do it. - N(projects.db.revision_exists(*i), + N(project.db.revision_exists(*i), F("no such revision '%s'") % *i); } } void complete(options const & opts, lua_hooks & lua, - project_set & projects, + project_t & project, string const & str, revision_id & completion) { set completions; - complete(opts, lua, projects, str, completions); + complete(opts, lua, project, str, completions); I(completions.size() > 0); - diagnose_ambiguous_expansion(projects, str, completions); + diagnose_ambiguous_expansion(project, str, completions); completion = *completions.begin(); } @@ -429,12 +427,12 @@ expand_selector(options const & opts, lu void expand_selector(options const & opts, lua_hooks & lua, - project_set & projects, + project_t & project, string const & str, set & completions) { selector_list sels; - parse_selector(projects, opts, lua, str, sels); + parse_selector(project, opts, lua, str, sels); // avoid logging if there's no expansion to be done if (sels.size() == 1 @@ -445,11 +443,11 @@ expand_selector(options const & opts, lu return; } - complete_selector(projects, sels, completions); + complete_selector(project, sels, completions); } void -diagnose_ambiguous_expansion(project_set & projects, +diagnose_ambiguous_expansion(project_t & project, string const & str, set const & completions) { @@ -460,7 +458,7 @@ diagnose_ambiguous_expansion(project_set % str).str(); for (set::const_iterator i = completions.begin(); i != completions.end(); ++i) - err += ("\n" + describe_revision(projects, *i)); + err += ("\n" + describe_revision(project, *i)); N(false, i18n_format(err)); } ============================================================ --- selectors.hh 2bdba72afbc3aaba45595d11d07db790ce53db14 +++ selectors.hh 19cc6377e9afbf63e494d7bcfde3eb4754d2b510 @@ -15,7 +15,7 @@ class lua_hooks; class options; class lua_hooks; -class project_set; +class project_t; // In the normal case, to expand a selector on the command line, use one of // these functions: the former if the selector can legitimately expand to @@ -24,11 +24,11 @@ void complete(options const & opts, lua_ // usage error, and generate progress messages when expanding selectors. void complete(options const & opts, lua_hooks & lua, - project_set & project, std::string const & str, + project_t & project, std::string const & str, std::set & completions); void complete(options const & opts, lua_hooks & lua, - project_set & project, std::string const & str, + project_t & project, std::string const & str, revision_id & completion); // For extra control, use these functions. expand_selector is just like the @@ -37,11 +37,10 @@ void expand_selector(options const & opt // usage error if the set it is handed has more than one element. void expand_selector(options const & opts, lua_hooks & lua, - project_set & project, std::string const & str, + project_t & project, std::string const & str, std::set & completions); -void diagnose_ambiguous_expansion(project_set & projects, - std::string const & str, +void diagnose_ambiguous_expansion(project_t & project, std::string const & str, std::set const & completions); ============================================================ --- update.cc 5f6dc8f3dbe233939f6f9d588d6fbdc2365e1031 +++ update.cc 04ca1a313bbd21e3fb4654074b36a791246052af @@ -53,12 +53,12 @@ static void using boost::lexical_cast; static void -get_test_results_for_revision(project_set & projects, +get_test_results_for_revision(project_t & project, revision_id const & id, map & results) { vector< revision > certs; - projects.get_revision_certs_by_name(id, cert_name(testresult_cert_name), + project.get_revision_certs_by_name(id, cert_name(testresult_cert_name), certs); for (vector< revision >::const_iterator i = certs.begin(); i != certs.end(); ++i) @@ -78,7 +78,7 @@ acceptable_descendent(lua_hooks & lua, static bool acceptable_descendent(lua_hooks & lua, - project_set & projects, + project_t & project, branch_name const & branch, revision_id const & base, map & base_results, @@ -87,9 +87,7 @@ acceptable_descendent(lua_hooks & lua, L(FL("Considering update target %s") % target); // step 1: check the branch - if (!projects - .get_project_of_branch(branch) - .revision_is_in_branch(target, branch)) + if (!project.revision_is_in_branch(target, branch)) { L(FL("%s not in branch %s") % target % branch); return false; @@ -97,7 +95,7 @@ acceptable_descendent(lua_hooks & lua, // step 2: check the testresults map target_results; - get_test_results_for_revision(projects, target, target_results); + get_test_results_for_revision(project, target, target_results); if (lua.hook_accept_testresult_change(base_results, target_results)) { L(FL("%s is acceptable update candidate") % target); @@ -112,7 +110,7 @@ pick_update_candidates(lua_hooks & lua, void pick_update_candidates(lua_hooks & lua, - project_set & projects, + project_t & project, set & candidates, revision_id const & base, branch_name const & branch, @@ -122,13 +120,13 @@ pick_update_candidates(lua_hooks & lua, I(!branch().empty()); map base_results; - get_test_results_for_revision(projects, base, base_results); + get_test_results_for_revision(project, 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, projects, branch, base, base_results, base)) + if (acceptable_descendent(lua, project, branch, base, base_results, base)) candidates.insert(base); // keep a visited set to avoid repeating work @@ -136,7 +134,7 @@ pick_update_candidates(lua_hooks & lua, set children; vector to_traverse; - projects.db.get_revision_children(base, children); + project.db.get_revision_children(base, children); copy(children.begin(), children.end(), back_inserter(to_traverse)); while (!to_traverse.empty()) @@ -150,16 +148,16 @@ pick_update_candidates(lua_hooks & lua, visited.insert(target); // then, possibly insert this revision as a candidate - if (acceptable_descendent(lua, projects, branch, base, base_results, + if (acceptable_descendent(lua, project, branch, base, base_results, target)) candidates.insert(target); // and traverse its children as well - projects.db.get_revision_children(target, children); + project.db.get_revision_children(target, children); copy(children.begin(), children.end(), back_inserter(to_traverse)); } - erase_ancestors(projects.db, candidates); + erase_ancestors(project.db, candidates); if (ignore_suspend_certs) return; @@ -167,9 +165,7 @@ pick_update_candidates(lua_hooks & lua, set active_candidates; for (set::const_iterator i = candidates.begin(); i != candidates.end(); i++) - if (!projects - .get_project_of_branch(branch) - .revision_is_suspended_in_branch(*i, branch)) + if (!project.revision_is_suspended_in_branch(*i, branch)) safe_insert(active_candidates, *i); if (!active_candidates.empty()) ============================================================ --- update.hh e1824334065fdaae0e7c51f52f1ded89a8de51c8 +++ update.hh 182e0764bd0c84327c2b1f073fc3eaf3642ad4d2 @@ -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_set & projects, + project_t & project, std::set & candidates, revision_id const & base_ident, branch_name const & branchname,