tikhomirov@231: /* tikhomirov@231: * Copyright (c) 2011 TMate Software Ltd tikhomirov@231: * tikhomirov@231: * This program is free software; you can redistribute it and/or modify tikhomirov@231: * it under the terms of the GNU General Public License as published by tikhomirov@231: * the Free Software Foundation; version 2 of the License. tikhomirov@231: * tikhomirov@231: * This program is distributed in the hope that it will be useful, tikhomirov@231: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@231: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@231: * GNU General Public License for more details. tikhomirov@231: * tikhomirov@231: * For information on how to redistribute this software under tikhomirov@231: * the terms of a license other than GNU General Public License tikhomirov@231: * contact TMate Software at support@hg4j.com tikhomirov@231: */ tikhomirov@231: package org.tmatesoft.hg.core; tikhomirov@231: tikhomirov@231: import java.io.IOException; tikhomirov@231: tikhomirov@231: import org.tmatesoft.hg.repo.HgDataFile; tikhomirov@231: import org.tmatesoft.hg.repo.HgRepository; tikhomirov@231: import org.tmatesoft.hg.util.ByteChannel; tikhomirov@231: import org.tmatesoft.hg.util.CancelledException; tikhomirov@231: import org.tmatesoft.hg.util.Path; tikhomirov@231: tikhomirov@231: /** tikhomirov@231: * Keeps together information about specific file revision tikhomirov@231: * tikhomirov@231: * @author Artem Tikhomirov tikhomirov@231: * @author TMate Software Ltd. tikhomirov@231: */ tikhomirov@231: public final class HgFileRevision implements HgLogCommand.FileRevision { tikhomirov@231: private final HgRepository repo; tikhomirov@231: private final Nodeid revision; tikhomirov@231: private final Path path; tikhomirov@231: tikhomirov@231: public HgFileRevision(HgRepository hgRepo, Nodeid rev, Path p) { tikhomirov@231: if (hgRepo == null || rev == null || p == null) { tikhomirov@231: // since it's package local, it is our code to blame for non validated arguments tikhomirov@231: throw new HgBadStateException(); tikhomirov@231: } tikhomirov@231: repo = hgRepo; tikhomirov@231: revision = rev; tikhomirov@231: path = p; tikhomirov@231: } tikhomirov@231: tikhomirov@231: public Path getPath() { tikhomirov@231: return path; tikhomirov@231: } tikhomirov@231: public Nodeid getRevision() { tikhomirov@231: return revision; tikhomirov@231: } tikhomirov@231: public void putContentTo(ByteChannel sink) throws HgDataStreamException, IOException, CancelledException { tikhomirov@231: HgDataFile fn = repo.getFileNode(path); tikhomirov@231: int localRevision = fn.getLocalRevision(revision); tikhomirov@231: fn.contentWithFilters(localRevision, sink); tikhomirov@231: } tikhomirov@231: tikhomirov@231: }