The unified diff between revisions [24fb0b25..] and [8032bf83..] is displayed below. It can also be downloaded as a raw diff.
This diff has been restricted to the following files: 'automate.cc'
#
#
# patch "automate.cc"
# from [c6e067dec1263e430f22e39fc63e30932d1c02d1]
# to [b23eced8b6c237fd768369cf7d32ba6119f19fe4]
#
============================================================
--- automate.cc c6e067dec1263e430f22e39fc63e30932d1c02d1
+++ automate.cc b23eced8b6c237fd768369cf7d32ba6119f19fe4
@@ -1555,50 +1555,19 @@ CMD_AUTOMATE(common_ancestors, N_("REV1
database db(app);
- set<revision_id> ancestors, common_ancestors;
- vector<revision_id> frontier;
+ set<revision_id> revs, common_ancestors;
for (args_vector::const_iterator i = args.begin(); i != args.end(); ++i)
{
revision_id rid(decode_hexenc((*i)()));
- N(db.revision_exists(rid), F("no such revision '%s'") % rid);
- ancestors.clear();
- ancestors.insert(rid);
- frontier.push_back(rid);
- while (!frontier.empty())
- {
- revision_id rid = frontier.back();
- frontier.pop_back();
- if(!null_id(rid))
- {
- set<revision_id> parents;
- db.get_revision_parents(rid, parents);
- for (set<revision_id>::const_iterator i = parents.begin();
- i != parents.end(); ++i)
- {
- if (ancestors.find(*i) == ancestors.end())
- {
- frontier.push_back(*i);
- ancestors.insert(*i);
- }
- }
- }
- }
- if (common_ancestors.empty())
- common_ancestors = ancestors;
- else
- {
- set<revision_id> common;
- set_intersection(ancestors.begin(), ancestors.end(),
- common_ancestors.begin(), common_ancestors.end(),
- inserter(common, common.begin()));
- common_ancestors = common;
- }
+ N(db.revision_exists(rid), F("No such revision %s") % rid);
+ revs.insert(rid);
}
+ db.get_common_ancestors(revs, common_ancestors);
+
for (set<revision_id>::const_iterator i = common_ancestors.begin();
i != common_ancestors.end(); ++i)
- if (!null_id(*i))
- output << *i << '\n';
+ output << *i << "\n";
}
// Name: branches