#
#
# 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