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: 'database.cc'
#
#
# patch "database.cc"
# from [7d05335695a344d562e1c81daed3f0bf525259d8]
# to [9e10e5d55233691379b3c4855ff77de8aced5ada]
#
============================================================
--- database.cc 7d05335695a344d562e1c81daed3f0bf525259d8
+++ database.cc 9e10e5d55233691379b3c4855ff77de8aced5ada
@@ -2157,6 +2157,59 @@ void
}
void
+database::get_common_ancestors(std::set<revision_id> const & revs,
+ std::set<revision_id> & common_ancestors)
+{
+ set<revision_id> ancestors, all_common_ancestors;
+ vector<revision_id> frontier;
+ for (set<revision_id>::const_iterator i = revs.begin();
+ i != revs.end(); ++i)
+ {
+ I(revision_exists(*i));
+ ancestors.clear();
+ ancestors.insert(*i);
+ frontier.push_back(*i);
+ while (!frontier.empty())
+ {
+ revision_id rid = frontier.back();
+ frontier.pop_back();
+ if(!null_id(rid))
+ {
+ set<revision_id> parents;
+ 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 (all_common_ancestors.empty())
+ all_common_ancestors = ancestors;
+ else
+ {
+ set<revision_id> common;
+ set_intersection(ancestors.begin(), ancestors.end(),
+ all_common_ancestors.begin(), all_common_ancestors.end(),
+ inserter(common, common.begin()));
+ all_common_ancestors = common;
+ }
+ }
+
+ for (set<revision_id>::const_iterator i = all_common_ancestors.begin();
+ i != all_common_ancestors.end(); ++i)
+ {
+ // FIXME: where do these null'ed IDs come from?
+ if (null_id(*i)) continue;
+ common_ancestors.insert(*i);
+ }
+}
+
+void
database::get_revision(revision_id const & id,
revision_t & rev)
{