# # # patch "app_state.cc" # from [71ea30d66db2bed19870d893a62d0877da5fa47d] # to [1a3683fee7f41a225552d935d94bb3e44129c543] # # patch "app_state.hh" # from [f6b0c75954bddf82e8d11f52890d8f92454fd4e5] # to [945451bb366a61c4c9d3c695f4f3e3a996673c8c] # # patch "asciik.cc" # from [48e1e8f7b0fb36535ccf5b043b34d43c0f284bfc] # to [c157610bace18fea29f8dbbe7d512bd19602b3da] # # patch "automate.cc" # from [f9eddee901d5397245a4d0abf939480f21eef921] # to [480545e3140ac4da1ca27ad071a684e46e5d79e2] # # patch "cmd_db.cc" # from [7ceee2f71ab48ffa65673926cae7114704865a74] # to [e0893cfa0cf5bf856722956ea154fcb678f65a16] # # patch "cmd_diff_log.cc" # from [edadb0edb91f959484f2b26bf17f17dfa9625d52] # to [e3fa32d312e90a217489ef4120d7c6bbf9b6d6db] # # patch "cmd_files.cc" # from [c8196d8cd2834fdb9d12b3d8af67c974ab8d9ca9] # to [3404218cc2bfff8bc2412a8e8daffe8eb9b48d19] # # patch "cmd_key_cert.cc" # from [d9308385717461799aa8cfa2169d18a6195ef01f] # to [4e15ff933ef41f9d2cb91952b5144146dacefbd3] # # patch "cmd_list.cc" # from [f55c8bf597dc2d1d322d6f732fa33d95db9f4e36] # to [176691bfbd10c80b1d4a01065ecd7a89dc0787eb] # # patch "cmd_merging.cc" # from [fefb77c472378f180e3a058764f1500275de8b77] # to [1db7f16660aefcd6a4dd2ad93b0e540bf84d631b] # # patch "cmd_netsync.cc" # from [7b29bc0d4731b4b47e9ae4477ebc66497bcf4a49] # to [f2ab559b848eab5918d86d51caee6c692e4e6103] # # patch "cmd_othervcs.cc" # from [84bc63131d13266fd4f2e42f112bda2ffb604dd9] # to [114f91ee0eb0332d08462ff626f3b043b7e91ab6] # # patch "cmd_ws_commit.cc" # from [8ab8073260349f30971953475e5ff7e60316910b] # to [836008718a1ddf79196eeb9c865e4506abe1fa7b] # # patch "project.cc" # from [270d69f5891c8949ca0bd5149d1a2acc6d236b5a] # to [71aa4cdc805742ac190c609da1bd0c56a63a12fd] # # patch "project.hh" # from [c2e794b47c13c23822e7edbf92250e4b5358f532] # to [94babe3c0c3533abdced8bd5f297d279719a20d6] # # patch "selectors.cc" # from [7eab26fe08b77ce75fd31dd490b0ff3f1091a94c] # to [2e4fef83aa28b80731e1916bd9bccf64ed141b42] # # patch "selectors.hh" # from [3d84d9b5249cf2cc0ca120a38671f3a3fd7df54b] # to [326011fa261e6e37b9d40a4abca51f118340854d] # ============================================================ --- app_state.cc 71ea30d66db2bed19870d893a62d0877da5fa47d +++ app_state.cc 1a3683fee7f41a225552d935d94bb3e44129c543 @@ -30,7 +30,6 @@ app_state::app_state() app_state::app_state() : lua(this), keys(*this), db(lua), work(lua), - projects(db), branch_is_sticky(false), mtn_automate_allowed(false) {} @@ -54,8 +53,6 @@ app_state::allow_workspace() global_sanity.set_dump_path(system_path(dump_path, false).as_external()); } lua.load_rcfiles(opts); - - projects.initialize(lua, opts); } void ============================================================ --- app_state.hh f6b0c75954bddf82e8d11f52890d8f92454fd4e5 +++ app_state.hh 945451bb366a61c4c9d3c695f4f3e3a996673c8c @@ -31,7 +31,6 @@ public: key_store keys; database db; workspace work; - project_set projects; bool found_workspace; bool branch_is_sticky; ============================================================ --- asciik.cc 48e1e8f7b0fb36535ccf5b043b34d43c0f284bfc +++ asciik.cc c157610bace18fea29f8dbbe7d512bd19602b3da @@ -376,8 +376,8 @@ CMD(asciik, "asciik", "", CMD_REF(debug) F("wrong argument count")); set revs; - project_t project(app.db); - complete(app, project, idx(args, 0)(), revs); + project_set projects(app.db, app.lua, app.opts); + complete(app, projects, idx(args, 0)(), revs); vector sorted; toposort(revs, sorted, app.db); ============================================================ --- automate.cc f9eddee901d5397245a4d0abf939480f21eef921 +++ automate.cc 480545e3140ac4da1ca27ad071a684e46e5d79e2 @@ -75,7 +75,7 @@ CMD_AUTOMATE(heads, N_("[BRANCH]"), F("wrong argument count")); CMD_REQUIRES_DATABASE(app); - project_t project(db); + project_set projects(app.db, app.lua, app.opts); branch_name branch; if (args.size() == 1) @@ -88,10 +88,9 @@ CMD_AUTOMATE(heads, N_("[BRANCH]"), } set heads; - project.get_branch_heads(branch, heads, app.opts.ignore_suspend_certs); - app.projects - .get_project_of_branch(branch_option) - .get_branch_heads(branch_option, heads, + projects + .get_project_of_branch(branch) + .get_branch_heads(branch, heads, app.opts.ignore_suspend_certs); for (set::const_iterator i = heads.begin(); i != heads.end(); ++i) @@ -506,9 +505,9 @@ CMD_AUTOMATE(select, N_("SELECTOR"), F("wrong argument count")); CMD_REQUIRES_DATABASE(app); - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); set completions; - expand_selector(app, project, idx(args, 0)(), completions); + expand_selector(app, projects, idx(args, 0)(), completions); for (set::const_iterator i = completions.begin(); i != completions.end(); ++i) @@ -1418,7 +1417,7 @@ CMD_AUTOMATE(packets_for_certs, N_("REVI F("wrong argument count")); CMD_REQUIRES_DATABASE(app); - project_t project(db); + project_set projects(app.db, app.lua, app.opts); packet_writer pw(output); revision_id r_id(idx(args, 0)()); @@ -1426,7 +1425,7 @@ CMD_AUTOMATE(packets_for_certs, N_("REVI N(db.revision_exists(r_id), F("no such revision '%s'") % r_id); - project.get_revision_certs(r_id, certs); + projects.get_revision_certs(r_id, certs); for (size_t i = 0; i < certs.size(); ++i) pw.consume_revision_cert(idx(certs,i)); } @@ -1590,10 +1589,10 @@ CMD_AUTOMATE(branches, "", F("no arguments needed")); CMD_REQUIRES_DATABASE(app); - project_t project(db); + project_set projects(app.db, app.lua, app.opts); set names; - project.get_branch_list(names, !app.opts.ignore_suspend_certs); + projects.get_branch_list(names, !app.opts.ignore_suspend_certs); for (set::const_iterator i = names.begin(); i != names.end(); ++i) @@ -1642,7 +1641,7 @@ CMD_AUTOMATE(tags, N_("[BRANCH_PATTERN]" F("wrong argument count")); CMD_REQUIRES_DATABASE(app); - project_t project(db); + project_set projects(app.db, app.lua, app.opts); globish incl("*"); bool filtering(false); @@ -1657,13 +1656,13 @@ CMD_AUTOMATE(tags, N_("[BRANCH_PATTERN]" prt.print_stanza(stz); set tags; - project.get_tags(tags); + projects.get_tags(tags); for (set::const_iterator tag = tags.begin(); tag != tags.end(); ++tag) { set branches; - project.get_revision_branches(tag->ident, branches); + projects.get_revision_branches(tag->ident, branches); bool show(!filtering); vector branch_names; ============================================================ --- cmd_db.cc 7ceee2f71ab48ffa65673926cae7114704865a74 +++ cmd_db.cc e0893cfa0cf5bf856722956ea154fcb678f65a16 @@ -123,8 +123,8 @@ CMD(db_kill_rev_locally, "kill_rev_local revision_id revid; - project_t project(app.db); - complete(app, project, idx(args, 0)(), revid); + project_set projects(app.db, app.lua, app.opts); + complete(app, projects, idx(args, 0)(), revid); // Check that the revision does not have any children std::set children; @@ -271,8 +271,9 @@ CMD_HIDDEN(clear_epoch, "clear_epoch", " throw usage(execid); branch_name name(idx(args, 0)()); - branch_uid branch = app.projects.translate_branch(name); - app.db.clear_epoch(branch); + project_set projects(app.db, app.lua, app.opts); + branch_uid branch = projects.translate_branch(name); + projects.db.clear_epoch(branch); } CMD(db_set_epoch, "set_epoch", "", CMD_REF(db), "BRANCH EPOCH", @@ -287,8 +288,9 @@ CMD(db_set_epoch, "set_epoch", "", CMD_R N(ed.inner()().size() == constants::epochlen, F("The epoch must be %s characters") % constants::epochlen); branch_name name(idx(args, 0)()); - branch_uid branch = app.projects.translate_branch(name); - app.db.set_epoch(branch, ed); + project_set projects(app.db, app.lua, app.opts); + branch_uid branch = projects.translate_branch(name); + projects.db.set_epoch(branch, ed); } CMD(set, "set", "", CMD_REF(variables), N_("DOMAIN NAME VALUE"), @@ -338,7 +340,7 @@ CMD(complete, "complete", "", CMD_REF(in if (args.size() != 2) throw usage(execid); - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); bool verbose = app.opts.verbose; @@ -353,7 +355,7 @@ CMD(complete, "complete", "", CMD_REF(in i != completions.end(); ++i) { if (!verbose) cout << i->inner()() << '\n'; - else cout << describe_revision(project, *i) << '\n'; + else cout << describe_revision(projects, *i) << '\n'; } } else if (idx(args, 0)() == "file") ============================================================ --- cmd_diff_log.cc edadb0edb91f959484f2b26bf17f17dfa9625d52 +++ cmd_diff_log.cc e3fa32d312e90a217489ef4120d7c6bbf9b6d6db @@ -356,7 +356,7 @@ prepare_diff(cset & included, else if (app.opts.revision_selectors.size() == 1) app.require_workspace(); - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); N(app.opts.revision_selectors.size() <= 2, F("more than two revisions given")); @@ -399,7 +399,7 @@ prepare_diff(cset & included, roster_t old_roster, restricted_roster, new_roster; revision_id r_old_id; - complete(app, project, idx(app.opts.revision_selectors, 0)(), r_old_id); + complete(app, projects, idx(app.opts.revision_selectors, 0)(), r_old_id); app.db.get_roster(r_old_id, old_roster); app.work.get_current_roster_shape(new_roster, app.db, nis); @@ -425,8 +425,8 @@ prepare_diff(cset & included, roster_t old_roster, restricted_roster, new_roster; revision_id r_old_id, r_new_id; - complete(app, project, idx(app.opts.revision_selectors, 0)(), r_old_id); - complete(app, project, idx(app.opts.revision_selectors, 1)(), r_new_id); + complete(app, projects, idx(app.opts.revision_selectors, 0)(), r_old_id); + complete(app, projects, idx(app.opts.revision_selectors, 1)(), r_new_id); app.db.get_roster(r_old_id, old_roster); app.db.get_roster(r_new_id, new_roster); @@ -555,7 +555,7 @@ static void static void -log_certs(ostream & os, project_t & project, revision_id id, cert_name name, +log_certs(ostream & os, project_set & projects, revision_id id, cert_name name, string label, string separator, bool multiline, bool newline) { vector< revision > certs; @@ -564,7 +564,7 @@ log_certs(ostream & os, project_t & proj if (multiline) newline = true; - project.get_revision_certs_by_name(id, name, certs); + projects.get_revision_certs_by_name(id, name, certs); for (vector< revision >::const_iterator i = certs.begin(); i != certs.end(); ++i) { @@ -587,16 +587,16 @@ static void } static void -log_certs(ostream & os, project_t & project, revision_id id, cert_name name, +log_certs(ostream & os, project_set & projects, revision_id id, cert_name name, string label, bool multiline) { - log_certs(os, project, id, name, label, label, multiline, true); + log_certs(os, projects, id, name, label, label, multiline, true); } static void -log_certs(ostream & os, project_t & project, revision_id id, cert_name name) +log_certs(ostream & os, project_set & projects, revision_id id, cert_name name) { - log_certs(os, project, id, name, " ", ",", false, false); + log_certs(os, projects, id, name, " ", ",", false, false); } @@ -626,7 +626,7 @@ CMD(log, "log", "", CMD_REF(informative) | options::opts::no_merges | options::opts::no_files | options::opts::no_graph) { - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); if (app.opts.from.size() == 0) app.require_workspace("try passing a --from revision to start at"); @@ -658,7 +658,7 @@ CMD(log, "log", "", CMD_REF(informative) i != app.opts.from.end(); i++) { set rids; - complete(app, project, (*i)(), rids); + complete(app, projects, (*i)(), rids); for (set::const_iterator j = rids.begin(); j != rids.end(); ++j) { @@ -714,7 +714,7 @@ CMD(log, "log", "", CMD_REF(informative) { MM(*i); set rids; - complete(app, project, (*i)(), rids); + complete(app, projects, (*i)(), rids); for (set::const_iterator j = rids.begin(); j != rids.end(); ++j) { @@ -868,16 +868,16 @@ CMD(log, "log", "", CMD_REF(informative) if (app.opts.brief) { out << rid; - log_certs(out, project, rid, author_name); + log_certs(out, projects, rid, author_name); if (app.opts.no_graph) - log_certs(out, project, rid, date_name); + log_certs(out, projects, rid, date_name); else { out << '\n'; - log_certs(out, project, rid, date_name, + log_certs(out, projects, rid, date_name, string(), string(), false, false); } - log_certs(out, project, rid, branch_name); + log_certs(out, projects, rid, branch_name); out << '\n'; } else @@ -900,10 +900,10 @@ CMD(log, "log", "", CMD_REF(informative) anc != ancestors.end(); ++anc) out << "Ancestor: " << *anc << '\n'; - log_certs(out, project, rid, author_name, "Author: ", false); - log_certs(out, project, rid, date_name, "Date: ", false); - log_certs(out, project, rid, branch_name, "Branch: ", false); - log_certs(out, project, rid, tag_name, "Tag: ", false); + log_certs(out, projects, rid, author_name, "Author: ", false); + log_certs(out, projects, rid, date_name, "Date: ", false); + log_certs(out, projects, rid, branch_name, "Branch: ", false); + log_certs(out, projects, rid, tag_name, "Tag: ", false); if (!app.opts.no_files && !csum.cs.empty()) { @@ -912,8 +912,8 @@ CMD(log, "log", "", CMD_REF(informative) out << '\n'; } - log_certs(out, project, rid, changelog_name, "ChangeLog: ", true); - log_certs(out, project, rid, comment_name, "Comments: ", true); + log_certs(out, projects, rid, changelog_name, "ChangeLog: ", true); + log_certs(out, projects, rid, comment_name, "Comments: ", true); } if (app.opts.diffs) ============================================================ --- cmd_files.cc c8196d8cd2834fdb9d12b3d8af67c974ab8d9ca9 +++ cmd_files.cc 3404218cc2bfff8bc2412a8e8daffe8eb9b48d19 @@ -129,7 +129,7 @@ CMD(annotate, "annotate", "", CMD_REF(in options::opts::revision | options::opts::revs_only) { revision_id rid; - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); if (app.opts.revision_selectors.size() == 0) app.require_workspace(); @@ -170,7 +170,7 @@ CMD(annotate, "annotate", "", CMD_REF(in } else { - complete(app, project, idx(app.opts.revision_selectors, 0)(), rid); + complete(app, projects, idx(app.opts.revision_selectors, 0)(), rid); app.db.get_roster(rid, roster); } @@ -183,7 +183,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(project, file_node, rid, app.opts.revs_only); + do_annotate(projects, file_node, rid, app.opts.revs_only); } CMD(identify, "identify", "", CMD_REF(debug), N_("[PATH]"), @@ -302,8 +302,8 @@ CMD(cat, "cat", "", CMD_REF(informative) } else { - project_t project(app.db); - complete(app, project, idx(app.opts.revision_selectors, 0)(), rid); + project_set projects(app.db, app.lua, app.opts); + complete(app, projects, idx(app.opts.revision_selectors, 0)(), rid); } dump_file(cout, app.db, rid, idx(args, 0)); @@ -368,8 +368,8 @@ CMD_AUTOMATE(get_file_of, N_("FILENAME") } else { - project_t project(app.db); - complete(app, project, idx(app.opts.revision_selectors, 0)(), rid); + project_set projects(app.db, app.lua, app.opts); + complete(app, projects, idx(app.opts.revision_selectors, 0)(), rid); } dump_file(output, db, rid, idx(args, 0)); ============================================================ --- cmd_key_cert.cc d9308385717461799aa8cfa2169d18a6195ef01f +++ cmd_key_cert.cc 4e15ff933ef41f9d2cb91952b5144146dacefbd3 @@ -141,11 +141,11 @@ CMD(cert, "cert", "", CMD_REF(key_and_ce if ((args.size() != 3) && (args.size() != 2)) throw usage(execid); - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); transaction_guard guard(app.db); revision_id rid; - complete(app, project, idx(args, 0)(), rid); + complete(app, projects, idx(args, 0)(), rid); cert_name cname; internalize_cert_name(idx(args, 1), cname); @@ -175,11 +175,11 @@ CMD(trusted, "trusted", "", CMD_REF(key_ if (args.size() < 4) throw usage(execid); - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); set rids; - expand_selector(app, project, idx(args, 0)(), rids); - diagnose_ambiguous_expansion(project, idx(args, 0)(), rids); + expand_selector(app, projects, idx(args, 0)(), rids); + diagnose_ambiguous_expansion(projects, idx(args, 0)(), rids); hexenc ident; if (!rids.empty()) @@ -228,9 +228,9 @@ CMD(tag, "tag", "", CMD_REF(review), N_( if (args.size() != 2) throw usage(execid); - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); revision_id r; - complete(app, project, idx(args, 0)(), r); + complete(app, projects, idx(args, 0)(), r); cache_user_key(app.opts, app.lua, app.keys, app.db); projects.put_tag(app.keys, r, idx(args, 1)()); @@ -246,9 +246,9 @@ CMD(testresult, "testresult", "", CMD_RE if (args.size() != 2) throw usage(execid); - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); revision_id r; - complete(app, project, idx(args, 0)(), r); + complete(app, projects, idx(args, 0)(), r); cache_user_key(app.opts, app.lua, app.keys, app.db); cert_revision_testresult(r, idx(args, 1)(), app.db, app.keys); @@ -263,10 +263,10 @@ CMD(approve, "approve", "", CMD_REF(revi if (args.size() != 1) throw usage(execid); - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); revision_id r; - complete(app, project, idx(args, 0)(), r); - guess_branch(r, app.opts, project); + complete(app, projects, idx(args, 0)(), r); + guess_branch(r, app.opts, projects); N(app.opts.branchname() != "", F("need --branch argument for approval")); cache_user_key(app.opts, app.lua, app.keys, app.db); @@ -283,9 +283,9 @@ CMD(suspend, "suspend", "", CMD_REF(revi if (args.size() != 1) throw usage(execid); - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); revision_id r; - complete(app, project, idx(args, 0)(), r); + complete(app, projects, idx(args, 0)(), r); guess_branch(r, app.opts, projects); N(app.opts.branchname() != "", F("need --branch argument to suspend")); cache_user_key(app.opts, app.lua, app.keys, app.db); @@ -299,7 +299,7 @@ CMD(comment, "comment", "", CMD_REF(revi "", options::opts::none) { - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); if (args.size() != 1 && args.size() != 2) throw usage(execid); @@ -318,7 +318,7 @@ CMD(comment, "comment", "", CMD_REF(revi F("empty comment")); revision_id r; - complete(app, project, idx(args, 0)(), r); + complete(app, projects, idx(args, 0)(), r); cache_user_key(app.opts, app.lua, app.keys, app.db); cert_revision_comment(r, comment, app.db, app.keys); ============================================================ --- cmd_list.cc f55c8bf597dc2d1d322d6f732fa33d95db9f4e36 +++ cmd_list.cc 176691bfbd10c80b1d4a01065ecd7a89dc0787eb @@ -58,13 +58,13 @@ CMD(certs, "certs", "", CMD_REF(list), " if (args.size() != 1) throw usage(execid); - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); vector certs; transaction_guard guard(app.db, false); revision_id ident; - complete(app, project, idx(args, 0)(), ident); + complete(app, projects, idx(args, 0)(), ident); vector< revision > ts; // FIXME_PROJECTS: after projects are implemented, // use the app.db version instead if no project is specified. @@ -281,7 +281,7 @@ CMD(branches, "branches", "", CMD_REF(li else if (args.size() > 1) throw usage(execid); - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); globish exc(app.opts.exclude_patterns); set names; projects.get_branch_list(inc, names, @@ -300,11 +300,12 @@ CMD(epochs, "epochs", "", CMD_REF(list), { map epochs; app.db.get_epochs(epochs); + project_set projects(app.db, app.lua, app.opts); if (args.size() == 0) { std::set branches; - app.projects.get_branch_uids(branches); + projects.get_branch_uids(branches); for (map::const_iterator i = epochs.begin(); i != epochs.end(); ++i) @@ -315,7 +316,7 @@ CMD(epochs, "epochs", "", CMD_REF(list), } else { - branch_name branch = app.projects.translate_branch(i->first); + branch_name branch = projects.translate_branch(i->first); cout << i->second << ' ' << branch << '\n'; } } @@ -323,7 +324,7 @@ CMD(epochs, "epochs", "", CMD_REF(list), else { std::set branches; - app.projects.get_branch_list(branches, false); + projects.get_branch_list(branches, false); for (args_vector::const_iterator i = args.begin(); i != args.end(); ++i) @@ -331,7 +332,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 = app.projects.translate_branch(branch); + branch_uid b = projects.translate_branch(branch); map::const_iterator j = epochs.find(b); N(j != epochs.end(), F("no epoch for branch %s") % *i); cout << j->second << ' ' << j->first << '\n'; @@ -345,8 +346,8 @@ CMD(tags, "tags", "", CMD_REF(list), "", options::opts::depth | options::opts::exclude) { set tags; - project_t project(app.db); - project.get_tags(tags); + project_set projects(app.db, app.lua, app.opts); + projects.get_tags(tags); for (set::const_iterator i = tags.begin(); i != tags.end(); ++i) { @@ -691,7 +692,7 @@ CMD_AUTOMATE(certs, N_("REV"), F("wrong argument count")); CMD_REQUIRES_DATABASE(app); - project_t project(db); + project_set projects(app.db, app.lua, app.opts); vector certs; ============================================================ --- cmd_merging.cc fefb77c472378f180e3a058764f1500275de8b77 +++ cmd_merging.cc 1db7f16660aefcd6a4dd2ad93b0e540bf84d631b @@ -91,7 +91,8 @@ pick_branch_for_update(revision_id chose // figure out which branches the target is in set< branch_name > branches; - app.projects.get_revision_branches(chosen_rid, branches); + project_set projects(app.db, app.lua, app.opts); + projects.get_revision_branches(chosen_rid, branches); if (branches.find(app.opts.branchname) != branches.end()) { @@ -142,7 +143,7 @@ CMD(update, "update", "", CMD_REF(worksp throw usage(execid); app.require_workspace(); - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); // Figure out where we are parent_map parents; @@ -186,7 +187,7 @@ CMD(update, "update", "", CMD_REF(worksp } else { - complete(app, project, app.opts.revision_selectors[0](), chosen_rid); + complete(app, projects, app.opts.revision_selectors[0](), chosen_rid); } I(!null_id(chosen_rid)); @@ -306,7 +307,7 @@ merge_two(revision_id const & left, revi merge_two(revision_id const & left, revision_id const & right, branch_name const & branch, string const & caller, std::ostream & output, bool automate, - project_t & project, options & opts, lua_hooks & lua, + project_set & projects, options & opts, lua_hooks & lua, key_store & keys) { // The following mess constructs a neatly formatted log message that looks @@ -345,13 +346,13 @@ merge_two(revision_id const & left, revi } revision_id merged; - transaction_guard guard(project.db); - interactive_merge_and_store(left, right, merged, project.db, lua); + transaction_guard guard(projects.db); + interactive_merge_and_store(left, right, merged, projects.db, lua); projects .get_project_of_branch(branch) - .put_standard_certs_from_options(app.opts, app.lua, - app.keys, + .put_standard_certs_from_options(opts, lua, + keys, merged, branch, utf8(log.str())); @@ -380,7 +381,7 @@ CMD(merge, "merge", "", CMD_REF(tree), " N(app.opts.branchname() != "", F("please specify a branch, with --branch=BRANCH")); - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); set heads; projects .get_project_of_branch(app.opts.branchname) @@ -454,7 +455,7 @@ CMD(merge, "merge", "", CMD_REF(tree), " merge_two(p.first, p.second, app.opts.branchname, string("merge"), std::cout, false, - project, app.opts, app.lua, app.keys); + projects, app.opts, app.lua, app.keys); ancestors.clear(); heads_for_ancestor.clear(); @@ -476,7 +477,7 @@ CMD(merge, "merge", "", CMD_REF(tree), " I(i == heads.end()); merge_two(left, right, app.opts.branchname, string("merge"), - std::cout, false, project, app.opts, app.lua, app.keys); + std::cout, false, projects, app.opts, app.lua, app.keys); P(F("note: your workspaces have not been updated")); } @@ -526,7 +527,7 @@ CMD(merge_into_dir, "merge_into_dir", "" // 'dir' in the merged tree. (ie, it has name "basename(dir)", and its // parent node is "N2.get_node(dirname(dir))") - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); set src_heads, dst_heads; if (args.size() != 3) @@ -679,7 +680,7 @@ CMD(merge_into_workspace, "merge_into_wo if (args.size() != 1) throw usage(execid); - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); app.require_workspace(); // Get the current state of the workspace. @@ -710,7 +711,7 @@ CMD(merge_into_workspace, "merge_into_wo calculate_ident(working_rev, working_rid); } - complete(app, project, idx(args, 0)(), right_id); + complete(app, projects, idx(args, 0)(), right_id); app.db.get_roster(right_id, right); N(!(left_id == right_id), F("workspace is already at revision %s") % left_id); @@ -778,13 +779,13 @@ CMD(explicit_merge, "explicit_merge", "" { revision_id left, right; branch_name branch; - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); if (args.size() != 3) throw usage(execid); - complete(app, project, idx(args, 0)(), left); - complete(app, project, idx(args, 1)(), right); + complete(app, projects, idx(args, 0)(), left); + complete(app, projects, idx(args, 1)(), right); branch = branch_name(idx(args, 2)()); N(!(left == right), @@ -797,7 +798,7 @@ CMD(explicit_merge, "explicit_merge", "" // avoid failure after lots of work cache_user_key(app.opts, app.lua, app.keys, app.db); merge_two(left, right, branch, string("explicit merge"), - std::cout, false, project, app.opts, app.lua, app.keys); + std::cout, false, projects, app.opts, app.lua, app.keys); } CMD(show_conflicts, "show_conflicts", "", CMD_REF(informative), N_("REV REV"), @@ -806,13 +807,13 @@ CMD(show_conflicts, "show_conflicts", "" "the REV parameters."), options::opts::branch | options::opts::date | options::opts::author) { - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); if (args.size() != 2) throw usage(execid); revision_id l_id, r_id; - complete(app, project, idx(args,0)(), l_id); - complete(app, project, idx(args,1)(), r_id); + complete(app, projects, idx(args,0)(), l_id); + complete(app, projects, idx(args,1)(), r_id); N(!is_ancestor(l_id, r_id, app.db), F("%s is an ancestor of %s; no merge is needed.") % l_id % r_id); N(!is_ancestor(r_id, l_id, app.db), @@ -875,11 +876,11 @@ CMD(pluck, "pluck", "", CMD_REF(workspac { // Work out our arguments revision_id from_rid, to_rid; - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); if (app.opts.revision_selectors.size() == 1) { - complete(app, project, idx(app.opts.revision_selectors, 0)(), to_rid); + complete(app, projects, idx(app.opts.revision_selectors, 0)(), to_rid); std::set parents; app.db.get_revision_parents(to_rid, parents); N(parents.size() == 1, @@ -892,8 +893,8 @@ CMD(pluck, "pluck", "", CMD_REF(workspac } else if (app.opts.revision_selectors.size() == 2) { - complete(app, project, idx(app.opts.revision_selectors, 0)(), from_rid); - complete(app, project, idx(app.opts.revision_selectors, 1)(), to_rid); + complete(app, projects, idx(app.opts.revision_selectors, 0)(), from_rid); + complete(app, projects, idx(app.opts.revision_selectors, 1)(), to_rid); } else throw usage(execid); @@ -1056,7 +1057,9 @@ CMD(heads, "heads", "", CMD_REF(tree), " N(app.opts.branchname() != "", F("please specify a branch, with --branch=BRANCH")); - app.projects + project_set projects(app.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); @@ -1130,9 +1133,9 @@ CMD(get_roster, "get_roster", "", CMD_RE } else if (args.size() == 1) { - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); revision_id rid; - complete(app, project, idx(args, 0)(), rid); + complete(app, projects, idx(args, 0)(), rid); I(!null_id(rid)); app.db.get_roster(rid, roster, mm); } ============================================================ --- cmd_netsync.cc 7b29bc0d4731b4b47e9ae4477ebc66497bcf4a49 +++ cmd_netsync.cc f2ab559b848eab5918d86d51caee6c692e4e6103 @@ -159,7 +159,7 @@ CMD(push, "push", "", CMD_REF(network), std::list uris; uris.push_back(addr); - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); run_netsync_protocol(client_voice, source_role, uris, include_pattern, exclude_pattern, projects, app.keys, app.lua, app.opts); @@ -184,7 +184,7 @@ CMD(pull, "pull", "", CMD_REF(network), std::list uris; uris.push_back(addr); - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); run_netsync_protocol(client_voice, sink_role, uris, include_pattern, exclude_pattern, projects, app.keys, app.lua, app.opts); @@ -207,7 +207,7 @@ CMD(sync, "sync", "", CMD_REF(network), std::list uris; uris.push_back(addr); - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); run_netsync_protocol(client_voice, source_and_sink_role, uris, include_pattern, exclude_pattern, projects, app.keys, app.lua, app.opts); @@ -328,7 +328,7 @@ CMD(clone, "clone", "", CMD_REF(network) std::list uris; uris.push_back(addr); - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); run_netsync_protocol(client_voice, sink_role, uris, include_pattern, exclude_pattern, projects, app.keys, app.lua, app.opts); @@ -364,7 +364,7 @@ CMD(clone, "clone", "", CMD_REF(network) else if (app.opts.revision_selectors.size() == 1) { // use specified revision - complete(app, project, idx(app.opts.revision_selectors, 0)(), ident); + complete(app, projects, idx(app.opts.revision_selectors, 0)(), ident); guess_branch(ident, app.opts, projects); I(!app.opts.branchname().empty()); @@ -458,7 +458,7 @@ CMD_NO_WORKSPACE(serve, "serve", "", CMD W(F("The --no-transport-auth option is usually only used " "in combination with --stdio")); - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); run_netsync_protocol(server_voice, source_and_sink_role, app.opts.bind_uris, globish("*"), globish(""), projects, app.keys, app.lua, app.opts); ============================================================ --- cmd_othervcs.cc 84bc63131d13266fd4f2e42f112bda2ffb604dd9 +++ cmd_othervcs.cc 114f91ee0eb0332d08462ff626f3b043b7e91ab6 @@ -49,7 +49,7 @@ CMD(cvs_import, "cvs_import", "", CMD_RE F("path %s does not exist") % cvsroot, F("'%s' is not a directory") % cvsroot); - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); // make sure we can sign certs using the selected key; also requests // the password (if necessary) up front rather than after some arbitrary ============================================================ --- cmd_ws_commit.cc 8ab8073260349f30971953475e5ff7e60316910b +++ cmd_ws_commit.cc 836008718a1ddf79196eeb9c865e4506abe1fa7b @@ -338,14 +338,14 @@ CMD(disapprove, "disapprove", "", CMD_RE if (args.size() != 1) throw usage(execid); - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); utf8 log_message(""); bool log_message_given; revision_id r; revision_t rev, rev_inverse; shared_ptr cs_inverse(new cset()); - complete(app, project, idx(args, 0)(), r); + complete(app, projects, idx(args, 0)(), r); app.db.get_revision(r, rev); N(rev.edges.size() == 1, @@ -590,7 +590,7 @@ CMD(checkout, "checkout", "co", CMD_REF( revision_id revid; system_path dir; - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); transaction_guard guard(app.db, false); if (args.size() > 1 || app.opts.revision_selectors.size() > 1) @@ -623,7 +623,7 @@ CMD(checkout, "checkout", "co", CMD_REF( else if (app.opts.revision_selectors.size() == 1) { // use specified revision - complete(app, project, idx(app.opts.revision_selectors, 0)(), revid); + complete(app, projects, idx(app.opts.revision_selectors, 0)(), revid); guess_branch(revid, app.opts, projects); @@ -1066,7 +1066,7 @@ CMD(commit, "commit", "ci", CMD_REF(work temp_node_id_source nis; cset excluded; - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); app.require_workspace(); app.make_branch_sticky(); @@ -1342,7 +1342,7 @@ CMD_NO_WORKSPACE(import, "import", "", C { revision_id ident; system_path dir; - project_t project(app.db); + project_set projects(app.db, app.lua, app.opts); N(args.size() == 1, F("you must specify a directory to import")); @@ -1350,7 +1350,7 @@ CMD_NO_WORKSPACE(import, "import", "", C if (app.opts.revision_selectors.size() == 1) { // use specified revision - complete(app, project, idx(app.opts.revision_selectors, 0)(), ident); + complete(app, projects, idx(app.opts.revision_selectors, 0)(), ident); guess_branch(ident, app.opts, projects); ============================================================ --- project.cc 270d69f5891c8949ca0bd5149d1a2acc6d236b5a +++ project.cc 71aa4cdc805742ac190c609da1bd0c56a63a12fd @@ -956,14 +956,11 @@ project_t::put_cert(key_store & keys, //////////////////////////////////////////////////////////////////////// -project_set::project_set(database & db) +project_set::project_set(database & db, + lua_hooks & lua, + options & opts) : db(db) { -} - -void -project_set::initialize(lua_hooks & lua, options & opts) -{ map project_definitions; lua.hook_get_projects(project_definitions); for (map::const_iterator i = project_definitions.begin(); ============================================================ --- project.hh c2e794b47c13c23822e7edbf92250e4b5358f532 +++ project.hh 94babe3c0c3533abdced8bd5f297d279719a20d6 @@ -30,6 +30,8 @@ class policy_info; class policy_info; +class project_set; + class project_t { // In the hypothetical future situation where one monotone process is @@ -49,6 +51,8 @@ private: std::set branches; outdated_indicator indicator; + explicit project_t(database & db); + friend class project_set; public: project_t(branch_prefix const & project_name, data const & project_spec, @@ -56,7 +60,6 @@ public: project_t(branch_prefix const & project_name, revision_id const & policy_rev, database & db); - explicit project_t(database & db); void get_branch_list(std::set & names, bool check_heads = false); @@ -131,8 +134,9 @@ public: project_map projects; public: - explicit project_set(database & db); - void initialize(lua_hooks & lua, options & opts); + project_set(database & db, + lua_hooks & lua, + options & opts); // Get a named project. project_t & get_project(branch_prefix const & name); ============================================================ --- selectors.cc 7eab26fe08b77ce75fd31dd490b0ff3f1091a94c +++ selectors.cc 2e4fef83aa28b80731e1916bd9bccf64ed141b42 @@ -345,7 +345,7 @@ complete(app_state & app, void complete(app_state & app, - project_t & project, + project_set & projects, string const & str, set & completions) { @@ -358,7 +358,7 @@ complete(app_state & app, && sels[0].second.size() == constants::idlen) { completions.insert(revision_id(sels[0].second)); - N(project.db.revision_exists(*completions.begin()), + N(projects.db.revision_exists(*completions.begin()), F("no such revision '%s'") % *completions.begin()); return; } @@ -376,23 +376,23 @@ complete(app_state & app, // This may be impossible, but let's make sure. // All the callers used to do it. - N(project.db.revision_exists(*i), + N(projects.db.revision_exists(*i), F("no such revision '%s'") % *i); } } void complete(app_state & app, - project_t & project, + project_set & projects, string const & str, revision_id & completion) { set completions; - complete(app, project, str, completions); + complete(app, projects, str, completions); I(completions.size() > 0); - diagnose_ambiguous_expansion(project, str, completions); + diagnose_ambiguous_expansion(projects, str, completions); completion = *completions.begin(); } @@ -400,7 +400,7 @@ expand_selector(app_state & app, void expand_selector(app_state & app, - project_t & project, + project_set & projects, string const & str, set & completions) { @@ -416,11 +416,11 @@ expand_selector(app_state & app, return; } - complete_selector(sels, completions, project); + complete_selector(sels, completions, projects); } void -diagnose_ambiguous_expansion(project_t & project, +diagnose_ambiguous_expansion(project_set & projects, string const & str, set const & completions) { @@ -431,7 +431,7 @@ diagnose_ambiguous_expansion(project_t & % str).str(); for (set::const_iterator i = completions.begin(); i != completions.end(); ++i) - err += ("\n" + describe_revision(project, *i)); + err += ("\n" + describe_revision(projects, *i)); N(false, i18n_format(err)); } ============================================================ --- selectors.hh 3d84d9b5249cf2cc0ca120a38671f3a3fd7df54b +++ selectors.hh 326011fa261e6e37b9d40a4abca51f118340854d @@ -14,7 +14,7 @@ class app_state; #include class app_state; -class project_t; +class project_set; // 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 @@ -22,10 +22,10 @@ class project_t; // selector that expands to zero revisions, or a nonexistent revision, as an // usage error, and generate progress messages when expanding selectors. -void complete(app_state & app, project_t & project, std::string const & str, +void complete(app_state & app, project_set & projects, std::string const & str, std::set & completions); -void complete(app_state & app, project_t & project, std::string const & str, +void complete(app_state & app, project_set & projects, std::string const & str, revision_id & completion); // For extra control, use these functions. expand_selector is just like the @@ -33,11 +33,12 @@ void complete(app_state & app, project_t // or usage errors. diagnose_ambiguous_expansion generates the canonical // usage error if the set it is handed has more than one element. -void expand_selector(app_state & app, project_t & project, +void expand_selector(app_state & app, project_set & projects, std::string const & str, std::set & completions); -void diagnose_ambiguous_expansion(project_t & project, std::string const & str, +void diagnose_ambiguous_expansion(project_set & projects, + std::string const & str, std::set const & completions);