# # # patch "ChangeLog" # from [a5de3e992f84c9fa9830ffc87bce6cecb5f37eb7] # to [f5e9516c58454df164d3410d96e619d8aa23c179] # # patch "automate.cc" # from [463daa3a2ca617b20765d737b26345d20fa81b26] # to [b857485541867650081368e781728c471b71863c] # # patch "commands.cc" # from [3726144b9fc8b5e9642b67bbb53700d22d4b5588] # to [58bcbf1f82b6971f455c41f78fae53d0a27b1941] # # patch "restrictions.cc" # from [4ab5354b84577d7fb51608719cce00c243e98f39] # to [fbf51b808af38783db608b772ea644d5e8409382] # # patch "restrictions.hh" # from [b73366c297d5fc949d873b0449d8cb1448f53bb1] # to [90f92189154b660bfa8a5dd180d827f642852895] # # patch "roster.cc" # from [226dbdd384e482e23f7e835e8042a8543efa3158] # to [b9454f9f181d981ea2154209f2bd50ffcf759cb1] # # patch "roster.hh" # from [1a84d8d2c3ef6ee7f97f90b4ff0459a59b9c6c6b] # to [06d636445795608feb6a03f008fb52c665afe1b1] # ============================================================ --- ChangeLog a5de3e992f84c9fa9830ffc87bce6cecb5f37eb7 +++ ChangeLog f5e9516c58454df164d3410d96e619d8aa23c179 @@ -1,5 +1,13 @@ 2006-04-09 Nathaniel Smith + * restrictions.{cc,hh}: Audit use of node id sources, and make a + number of functions take an explicit node_id_source argument. + * roster.cc (make_roster_for_base_plus_cset): Also take an + explicit node_id_source. + * commands.cc, automate.cc: Update to match new calling conventions. + +2006-04-09 Nathaniel Smith + * std_hooks.lua (accept_testresult_change): s/MT/_MTN/, thanks to Alex Queiroz for the catch... ============================================================ --- automate.cc 463daa3a2ca617b20765d737b26345d20fa81b26 +++ automate.cc b857485541867650081368e781728c471b71863c @@ -960,6 +960,7 @@ if (args.size() > 1) throw usage(help_name); + temp_node_id_source nis; revision_data dat; revision_id ident; @@ -971,7 +972,8 @@ app.require_workspace(); get_unrestricted_working_revision_and_rosters(app, rev, old_roster, - new_roster); + new_roster, + nis); calculate_ident(rev, ident); write_revision_set(rev, dat); } @@ -1039,12 +1041,13 @@ data dat; manifest_id mid; roster_t old_roster, new_roster; + temp_node_id_source nis; if (args.size() == 0) { revision_set rs; app.require_workspace(); - get_unrestricted_working_revision_and_rosters(app, rs, old_roster, new_roster); + get_unrestricted_working_revision_and_rosters(app, rs, old_roster, new_roster, nis); } else { ============================================================ --- commands.cc 3726144b9fc8b5e9642b67bbb53700d22d4b5588 +++ commands.cc 58bcbf1f82b6971f455c41f78fae53d0a27b1941 @@ -367,9 +367,9 @@ inodeprint_map ipm_new; revision_set rev; roster_t old_roster, new_roster; - get_unrestricted_working_revision_and_rosters(app, rev, - old_roster, - new_roster); + temp_node_id_source nis; + get_unrestricted_working_revision_and_rosters(app, rev, + old_roster, new_roster, nis); node_map const & new_nodes = new_roster.all_nodes(); for (node_map::const_iterator i = new_nodes.begin(); i != new_nodes.end(); ++i) @@ -1362,9 +1362,10 @@ revision_set rs; roster_t old_roster, new_roster; data tmp; + temp_node_id_source nis; app.require_workspace(); - get_working_revision_and_rosters(app, args, rs, old_roster, new_roster); + get_working_revision_and_rosters(app, args, rs, old_roster, new_roster, nis); if (global_sanity.brief) { @@ -1723,11 +1724,12 @@ revision_set rs; roster_t old_roster, new_roster; data tmp; + temp_node_id_source nis; app.require_workspace(); path_set paths; - get_working_revision_and_rosters(app, args, rs, old_roster, new_roster); + get_working_revision_and_rosters(app, args, rs, old_roster, new_roster, nis); new_roster.extract_path_set(paths); for (path_set::const_iterator p = paths.begin(); p != paths.end(); ++p) @@ -1745,8 +1747,9 @@ revision_set rev; roster_t old_roster, new_roster; path_set known; + temp_node_id_source nis; - get_working_revision_and_rosters(app, args, rev, old_roster, new_roster); + get_working_revision_and_rosters(app, args, rev, old_roster, new_roster, nis); new_roster.extract_path_set(known); file_itemizer u(app, known, unknown, ignored); @@ -1819,9 +1822,10 @@ roster_t old_roster, new_roster; data tmp; std::set files; + temp_node_id_source nis; app.require_workspace(); - get_working_revision_and_rosters(app, args, rs, old_roster, new_roster); + get_working_revision_and_rosters(app, args, rs, old_roster, new_roster, nis); I(rs.edges.size() == 1); cset const & cs = edge_changes(rs.edges.begin()); @@ -2221,7 +2225,8 @@ roster_t old_roster, new_roster; app.require_workspace(); - get_unrestricted_working_revision_and_rosters(app, rs, old_roster, new_roster); + temp_node_id_source nis; + get_unrestricted_working_revision_and_rosters(app, rs, old_roster, new_roster, nis); file_path path = file_path_external(idx(args,1)); split_path sp; @@ -2338,13 +2343,14 @@ revision_set rs; revision_id rid; roster_t old_roster, new_roster; + temp_node_id_source nis; app.make_branch_sticky(); app.require_workspace(); // preserve excluded work for future commmits cset excluded_work; - get_working_revision_and_rosters(app, args, rs, old_roster, new_roster, excluded_work); + get_working_revision_and_rosters(app, args, rs, old_roster, new_roster, excluded_work, nis); calculate_ident(rs, rid); N(rs.is_nontrivial(), F("no changes to commit\n")); @@ -2723,6 +2729,7 @@ bool new_is_archived; diff_type type = app.diff_format; ostringstream header; + temp_node_id_source nis; if (app.diff_args_provided) N(app.diff_format == external_diff, @@ -2744,7 +2751,8 @@ get_working_revision_and_rosters(app, args, r_new, old_roster, new_roster, - excluded); + excluded, + nis); I(r_new.edges.size() == 1 || r_new.edges.size() == 0); if (r_new.edges.size() == 1) @@ -2763,7 +2771,8 @@ get_working_revision_and_rosters(app, args, r_new, old_roster, new_roster, - excluded); + excluded, + nis); // Clobber old_roster with the one specified app.db.get_revision(r_old_id, r_old); app.db.get_roster(r_old_id, old_roster); @@ -2875,6 +2884,7 @@ boost::shared_ptr old_roster = boost::shared_ptr(new roster_t()); marking_map working_mm, chosen_mm, merged_mm, target_mm; revision_id r_old_id, r_working_id, r_chosen_id, r_target_id; + temp_node_id_source nis; if (args.size() > 0) throw usage(name); @@ -2891,14 +2901,14 @@ get_unrestricted_working_revision_and_rosters(app, r_working, *old_roster, - working_roster); + working_roster, nis); calculate_ident(r_working, r_working_id); I(r_working.edges.size() == 1); r_old_id = edge_old_revision(r_working.edges.begin()); make_roster_for_base_plus_cset(r_old_id, edge_changes(r_working.edges.begin()), r_working_id, - working_roster, working_mm, app); + working_roster, working_mm, nis, app); N(!null_id(r_old_id), F("this workspace is a new project; cannot update")); @@ -3015,7 +3025,7 @@ make_roster_for_base_plus_cset(r_old_id, transplant, r_target_id, - target_roster, target_mm, app); + target_roster, target_mm, nis, app); chosen_uncommon_ancestors.insert(r_target_id); } @@ -3645,8 +3655,10 @@ if (app.revision_selectors.size() == 0) app.require_workspace("try passing a --revision to start at"); + temp_node_id_source nis; + set nodes; - + set frontier; revision_id first_rid; @@ -3675,7 +3687,7 @@ revision_set rev; if (app.revision_selectors.size() == 0) - get_unrestricted_working_revision_and_rosters(app, rev, old_roster, new_roster); + get_unrestricted_working_revision_and_rosters(app, rev, old_roster, new_roster, nis); else app.db.get_roster(first_rid, new_roster); ============================================================ --- restrictions.cc 4ab5354b84577d7fb51608719cce00c243e98f39 +++ restrictions.cc fbf51b808af38783db608b772ea644d5e8409382 @@ -178,6 +178,10 @@ path_set & new_paths) { new_paths.clear(); + // FIXME: This use of temp_node_id_source is dubious. So long as r_old + // contains no temp nids, it is safe. ATM, this is always the case. Even + // if it stops being the case, the worst that will happen is that things + // crash horribly when we try to add a node that already exists... temp_node_id_source nis; roster_t r_tmp = r_old; editable_roster_base er(r_tmp, nis); @@ -242,7 +246,8 @@ revision_set & rev, roster_t & old_roster, roster_t & new_roster, - cset & excluded) + cset & excluded, + node_id_source & nis) { revision_id old_revision_id; boost::shared_ptr cs(new cset()); @@ -256,7 +261,6 @@ new_paths, *cs, excluded); - temp_node_id_source nis; new_roster = old_roster; editable_roster_base er(new_roster, nis); cs->apply_to(er); @@ -300,23 +304,25 @@ std::vector const & args, revision_set & rev, roster_t & old_roster, - roster_t & new_roster) + roster_t & new_roster, + node_id_source & nis) { cset excluded; get_working_revision_and_rosters(app, args, rev, - old_roster, new_roster, excluded); + old_roster, new_roster, excluded, nis); } void get_unrestricted_working_revision_and_rosters(app_state & app, revision_set & rev, roster_t & old_roster, - roster_t & new_roster) + roster_t & new_roster, + node_id_source & nis) { std::vector empty_args; std::set saved_exclude_patterns(app.exclude_patterns); app.exclude_patterns.clear(); - get_working_revision_and_rosters(app, empty_args, rev, old_roster, new_roster); + get_working_revision_and_rosters(app, empty_args, rev, old_roster, new_roster, nis); app.exclude_patterns = saved_exclude_patterns; } ============================================================ --- restrictions.hh b73366c297d5fc949d873b0449d8cb1448f53bb1 +++ restrictions.hh 90f92189154b660bfa8a5dd180d827f642852895 @@ -57,7 +57,8 @@ revision_set & rev, roster_t & old_roster, roster_t & new_roster, - cset & excluded); + cset & excluded, + node_id_source & nis); // Same as above, only without the "excluded" out-parameter. void @@ -65,13 +66,15 @@ std::vector const & args, revision_set & rev, roster_t & old_roster, - roster_t & new_roster); + roster_t & new_roster, + node_id_source & nis); void get_unrestricted_working_revision_and_rosters(app_state & app, revision_set & rev, roster_t & old_roster, - roster_t & new_roster); + roster_t & new_roster, + node_id_source & nis); void calculate_restricted_cset(app_state & app, ============================================================ --- roster.cc 226dbdd384e482e23f7e835e8042a8543efa3158 +++ roster.cc b9454f9f181d981ea2154209f2bd50ffcf759cb1 @@ -1684,12 +1684,12 @@ make_roster_for_base_plus_cset(revision_id const & base, cset const & cs, revision_id const & new_rid, roster_t & new_roster, marking_map & new_markings, + node_id_source & nis, app_state & app) { MM(base); MM(cs); app.db.get_roster(base, new_roster, new_markings); - temp_node_id_source nis; editable_roster_for_nonmerge er(new_roster, nis, new_rid, new_markings); cs.apply_to(er); } ============================================================ --- roster.hh 1a84d8d2c3ef6ee7f97f90b4ff0459a59b9c6c6b +++ roster.hh 06d636445795608feb6a03f008fb52c665afe1b1 @@ -359,6 +359,7 @@ revision_id const & new_rid, roster_t & result, marking_map & marking, + node_id_source & nis, app_state & app); void