# # # patch "automate.cc" # from [373cfdd41349d7cbbdfebb4ab799240e70f7f0fc] # to [70e539a80dd102f396e776f1a06760da5606b165] # # patch "database.cc" # from [b37f89c9d264b674728fda144360e30d5d3b6397] # to [331c15584601bfa5585b5169af3bc597196a0c47] # # patch "database.hh" # from [7eb9a59905d0c790a5f76cb6fd1c35b538b7af60] # to [bafc56fd9db04d8402215082e4d549dcd0c1f520] # ============================================================ --- automate.cc 373cfdd41349d7cbbdfebb4ab799240e70f7f0fc +++ automate.cc 70e539a80dd102f396e776f1a06760da5606b165 @@ -312,14 +312,8 @@ CMD_AUTOMATE(leaves, "", N(args.size() == 0, F("no arguments needed")); - // this might be more efficient in SQL, but for now who cares. set leaves; - app.db.get_revision_ids(leaves); - multimap graph; - app.db.get_revision_ancestry(graph); - for (multimap::const_iterator - i = graph.begin(); i != graph.end(); ++i) - leaves.erase(i->first); + app.db.get_leaves(leaves); for (set::const_iterator i = leaves.begin(); i != leaves.end(); ++i) output << (*i).inner()() << '\n'; ============================================================ --- database.cc b37f89c9d264b674728fda144360e30d5d3b6397 +++ database.cc 331c15584601bfa5585b5169af3bc597196a0c47 @@ -1860,6 +1860,21 @@ void } void +database::get_leaves(set & leaves) +{ + results res; + leaves.clear(); + fetch(res, one_col, any_rows, + query("SELECT revisions.id FROM revisions " + "LEFT JOIN revision_ancestry " + "ON revisions.id = revision_ancestry.parent " + "WHERE revision_ancestry.child IS null")); + for (size_t i = 0; i < res.size(); ++i) + leaves.insert(revision_id(res[i][0])); +} + + +void database::get_revision_manifest(revision_id const & rid, manifest_id & mid) { ============================================================ --- database.hh 7eb9a59905d0c790a5f76cb6fd1c35b538b7af60 +++ database.hh bafc56fd9db04d8402215082e4d549dcd0c1f520 @@ -301,6 +301,8 @@ public: void get_revision_children(revision_id const & ident, std::set & children); + void get_leaves(std::set & leaves); + void get_revision_manifest(revision_id const & cid, manifest_id & mid); private: