LinkedHashSet<Nodeid> result = new LinkedHashSet<Nodeid>();
RepositoryComparator repoCompare = getComparator();
for (BranchChain bc : getMissingBranches()) {
List<Nodeid> missing = repoCompare.visitBranches(bc);
HashSet<Nodeid> common = new HashSet<Nodeid>(); // ordering is irrelevant
repoCompare.collectKnownRoots(bc, common);
// missing could only start with common elements. Once non-common, rest is just distinct branch revision trails.
for (Iterator<Nodeid> it = missing.iterator(); it.hasNext() && common.contains(it.next()); it.remove()) ;
result.addAll(missing);
}
ArrayList<Nodeid> rv = new ArrayList<Nodeid>(result);