Mercurial > hg4j
diff src/org/tmatesoft/hg/core/HgIncomingCommand.java @ 202:706bcc7cfee4
Basic test for HgIncomingCommand. Fix RepositoryComparator for cases when whole repository is unknown. Respect freshly initialized (empty) repositories in general.
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Tue, 26 Apr 2011 02:50:06 +0200 |
parents | c9b305df0b89 |
children | ffc5f6d59f7e |
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/core/HgIncomingCommand.java Thu Apr 21 19:16:45 2011 +0200 +++ b/src/org/tmatesoft/hg/core/HgIncomingCommand.java Tue Apr 26 02:50:06 2011 +0200 @@ -18,6 +18,8 @@ import java.io.IOException; import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; @@ -43,6 +45,7 @@ private final HgRepository localRepo; private HgRemoteRepository remoteRepo; + @SuppressWarnings("unused") private boolean includeSubrepo; private RepositoryComparator comparator; private List<BranchChain> missingBranches; @@ -105,8 +108,10 @@ RepositoryComparator repoCompare = getComparator(context); for (BranchChain bc : getMissingBranches(context)) { List<Nodeid> missing = repoCompare.visitBranches(bc); - assert bc.branchRoot.equals(missing.get(0)); - missing.remove(0); + 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); @@ -124,10 +129,10 @@ throw new IllegalArgumentException("Delegate can't be null"); } final List<Nodeid> common = getCommon(handler); - HgBundle changegroup = remoteRepo.getChanges(new LinkedList<Nodeid>(common)); + HgBundle changegroup = remoteRepo.getChanges(common); try { changegroup.changes(localRepo, new HgChangelog.Inspector() { - private int localIndex; + private int localIndex = -1; // in case we start with empty repo and localIndex would not get initialized in regular way private final HgChangelog.ParentWalker parentHelper; private final ChangesetTransformer transformer; private final HgChangelog changelog; @@ -161,7 +166,7 @@ } if (comparator == null) { comparator = new RepositoryComparator(getParentHelper(), remoteRepo); - comparator.compare(context); +// comparator.compare(context); // XXX meanwhile we use distinct path to calculate common } return comparator; } @@ -182,11 +187,13 @@ } private List<Nodeid> getCommon(Object context) throws HgException, CancelledException { +// return getComparator(context).getCommon(); final LinkedHashSet<Nodeid> common = new LinkedHashSet<Nodeid>(); // XXX common can be obtained from repoCompare, but at the moment it would almost duplicate work of calculateMissingBranches // once I refactor latter, common shall be taken from repoCompare. + RepositoryComparator repoCompare = getComparator(context); for (BranchChain bc : getMissingBranches(context)) { - common.add(bc.branchRoot); + repoCompare.collectKnownRoots(bc, common); } return new LinkedList<Nodeid>(common); }