# HG changeset patch # User Artem Tikhomirov # Date 1302830892 -7200 # Node ID 37f3d4a596e4dddd57079a9d2bf8fa0c21d44c36 # Parent e5407b5a586a5d5a0e44acd83498603d37dcc4ab Use common low to hi-level changeset api transformer diff -r e5407b5a586a -r 37f3d4a596e4 src/org/tmatesoft/hg/core/ChangesetTransformer.java --- a/src/org/tmatesoft/hg/core/ChangesetTransformer.java Fri Apr 15 03:17:03 2011 +0200 +++ b/src/org/tmatesoft/hg/core/ChangesetTransformer.java Fri Apr 15 03:28:12 2011 +0200 @@ -16,6 +16,8 @@ */ package org.tmatesoft.hg.core; +import java.util.Set; + import org.tmatesoft.hg.repo.HgChangelog; import org.tmatesoft.hg.repo.HgRepository; import org.tmatesoft.hg.repo.HgStatusCollector; @@ -32,12 +34,14 @@ /*package-local*/ class ChangesetTransformer implements HgChangelog.Inspector { private final HgLogCommand.Handler handler; private final HgChangeset changeset; + private Set branches; public ChangesetTransformer(HgRepository hgRepo, HgLogCommand.Handler delegate) { if (hgRepo == null || delegate == null) { throw new IllegalArgumentException(); } HgStatusCollector statusCollector = new HgStatusCollector(hgRepo); + // files listed in a changeset don't need their names to be rewritten (they are normalized already) PathPool pp = new PathPool(new PathRewrite.Empty()); statusCollector.setPathPool(pp); changeset = new HgChangeset(statusCollector, pp); @@ -45,7 +49,15 @@ } public void next(int revisionNumber, Nodeid nodeid, RawChangeset cset) { + if (branches != null && !branches.contains(cset.branch())) { + return; + } + changeset.init(revisionNumber, nodeid, cset); handler.next(changeset); } + + public void limitBranches(Set branches) { + this.branches = branches; + } } \ No newline at end of file diff -r e5407b5a586a -r 37f3d4a596e4 src/org/tmatesoft/hg/core/HgLogCommand.java --- a/src/org/tmatesoft/hg/core/HgLogCommand.java Fri Apr 15 03:17:03 2011 +0200 +++ b/src/org/tmatesoft/hg/core/HgLogCommand.java Fri Apr 15 03:28:12 2011 +0200 @@ -31,12 +31,9 @@ import org.tmatesoft.hg.repo.HgChangelog; import org.tmatesoft.hg.repo.HgDataFile; import org.tmatesoft.hg.repo.HgRepository; -import org.tmatesoft.hg.repo.HgStatusCollector; import org.tmatesoft.hg.util.ByteChannel; import org.tmatesoft.hg.util.CancelledException; import org.tmatesoft.hg.util.Path; -import org.tmatesoft.hg.util.PathPool; -import org.tmatesoft.hg.util.PathRewrite; /** @@ -58,11 +55,10 @@ private Set branches; private int limit = 0, count = 0; private int startRev = 0, endRev = TIP; - private Handler delegate; private Calendar date; private Path file; private boolean followHistory; // makes sense only when file != null - private HgChangeset changeset; + private ChangesetTransformer csetTransform; public HgLogCommand(HgRepository hgRepo) { repo = hgRepo; @@ -183,18 +179,14 @@ if (handler == null) { throw new IllegalArgumentException(); } - if (delegate != null) { + if (csetTransform != null) { throw new ConcurrentModificationException(); } try { - delegate = handler; count = 0; - HgStatusCollector statusCollector = new HgStatusCollector(repo); - // files listed in a changeset don't need their names to be rewritten (they are normalized already) - PathPool pp = new PathPool(new PathRewrite.Empty()); - // #file(String, boolean) above may utilize PathPool as well. CommandContext? - statusCollector.setPathPool(pp); - changeset = new HgChangeset(statusCollector, pp); + // ChangesetTransfrom creates a blank PathPool, and #file(String, boolean) above + // may utilize it as well. CommandContext? How about StatusCollector there as well? + csetTransform = new ChangesetTransformer(repo, handler); if (file == null) { repo.getChangelog().range(startRev, endRev, this); } else { @@ -220,8 +212,7 @@ } } } finally { - delegate = null; - changeset = null; + csetTransform = null; } } @@ -251,8 +242,7 @@ // FIXME } count++; - changeset.init(revisionNumber, nodeid, cset); - delegate.next(changeset); + csetTransform.next(revisionNumber, nodeid, cset); } public interface Handler {