tikhomirov@192: /* tikhomirov@192: * Copyright (c) 2011 TMate Software Ltd tikhomirov@192: * tikhomirov@192: * This program is free software; you can redistribute it and/or modify tikhomirov@192: * it under the terms of the GNU General Public License as published by tikhomirov@192: * the Free Software Foundation; version 2 of the License. tikhomirov@192: * tikhomirov@192: * This program is distributed in the hope that it will be useful, tikhomirov@192: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@192: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@192: * GNU General Public License for more details. tikhomirov@192: * tikhomirov@192: * For information on how to redistribute this software under tikhomirov@192: * the terms of a license other than GNU General Public License tikhomirov@192: * contact TMate Software at support@hg4j.com tikhomirov@192: */ tikhomirov@192: package org.tmatesoft.hg.core; tikhomirov@192: tikhomirov@193: import java.util.Set; tikhomirov@193: tikhomirov@192: import org.tmatesoft.hg.repo.HgChangelog; tikhomirov@192: import org.tmatesoft.hg.repo.HgRepository; tikhomirov@192: import org.tmatesoft.hg.repo.HgStatusCollector; tikhomirov@192: import org.tmatesoft.hg.repo.HgChangelog.RawChangeset; tikhomirov@192: import org.tmatesoft.hg.util.PathPool; tikhomirov@192: import org.tmatesoft.hg.util.PathRewrite; tikhomirov@192: tikhomirov@192: /** tikhomirov@192: * Bridges {@link HgChangelog.RawChangeset} with high-level {@link HgChangeset} API tikhomirov@192: * tikhomirov@192: * @author Artem Tikhomirov tikhomirov@192: * @author TMate Software Ltd. tikhomirov@192: */ tikhomirov@192: /*package-local*/ class ChangesetTransformer implements HgChangelog.Inspector { tikhomirov@192: private final HgLogCommand.Handler handler; tikhomirov@192: private final HgChangeset changeset; tikhomirov@193: private Set branches; tikhomirov@192: tikhomirov@195: // repo and delegate can't be null, parent walker can tikhomirov@195: public ChangesetTransformer(HgRepository hgRepo, HgLogCommand.Handler delegate, HgChangelog.ParentWalker pw) { tikhomirov@192: if (hgRepo == null || delegate == null) { tikhomirov@192: throw new IllegalArgumentException(); tikhomirov@192: } tikhomirov@192: HgStatusCollector statusCollector = new HgStatusCollector(hgRepo); tikhomirov@193: // files listed in a changeset don't need their names to be rewritten (they are normalized already) tikhomirov@192: PathPool pp = new PathPool(new PathRewrite.Empty()); tikhomirov@192: statusCollector.setPathPool(pp); tikhomirov@192: changeset = new HgChangeset(statusCollector, pp); tikhomirov@195: changeset.setParentHelper(pw); tikhomirov@192: handler = delegate; tikhomirov@192: } tikhomirov@192: tikhomirov@192: public void next(int revisionNumber, Nodeid nodeid, RawChangeset cset) { tikhomirov@193: if (branches != null && !branches.contains(cset.branch())) { tikhomirov@193: return; tikhomirov@193: } tikhomirov@193: tikhomirov@192: changeset.init(revisionNumber, nodeid, cset); tikhomirov@192: handler.next(changeset); tikhomirov@192: } tikhomirov@193: tikhomirov@193: public void limitBranches(Set branches) { tikhomirov@193: this.branches = branches; tikhomirov@193: } tikhomirov@192: }