tikhomirov@17: /* tikhomirov@72: * Copyright (c) 2010-2011 TMate Software Ltd tikhomirov@72: * tikhomirov@72: * This program is free software; you can redistribute it and/or modify tikhomirov@72: * it under the terms of the GNU General Public License as published by tikhomirov@72: * the Free Software Foundation; version 2 of the License. tikhomirov@72: * tikhomirov@72: * This program is distributed in the hope that it will be useful, tikhomirov@72: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@72: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@72: * GNU General Public License for more details. tikhomirov@72: * tikhomirov@72: * For information on how to redistribute this software under tikhomirov@72: * the terms of a license other than GNU General Public License tikhomirov@102: * contact TMate Software at support@hg4j.com tikhomirov@1: */ tikhomirov@72: package org.tmatesoft.hg.console; tikhomirov@1: tikhomirov@143: import static org.tmatesoft.hg.repo.HgRepository.TIP; tikhomirov@143: tikhomirov@143: import java.io.OutputStream; tikhomirov@143: import java.nio.ByteBuffer; tikhomirov@143: tikhomirov@74: import org.tmatesoft.hg.repo.HgDataFile; tikhomirov@74: import org.tmatesoft.hg.repo.HgRepository; tikhomirov@143: import org.tmatesoft.hg.util.ByteChannel; tikhomirov@74: tikhomirov@1: tikhomirov@1: /** tikhomirov@72: * @author Artem Tikhomirov tikhomirov@72: * @author TMate Software Ltd. tikhomirov@1: */ tikhomirov@1: public class Cat { tikhomirov@1: tikhomirov@1: public static void main(String[] args) throws Exception { tikhomirov@74: Options cmdLineOpts = Options.parse(args); tikhomirov@74: HgRepository hgRepo = cmdLineOpts.findRepository(); tikhomirov@1: if (hgRepo.isInvalid()) { tikhomirov@1: System.err.printf("Can't find repository in: %s\n", hgRepo.getLocation()); tikhomirov@1: return; tikhomirov@1: } tikhomirov@143: int rev = cmdLineOpts.getSingleInt(TIP, "-r", "--rev"); tikhomirov@143: OutputStreamChannel out = new OutputStreamChannel(System.out); tikhomirov@143: for (String fname : cmdLineOpts.getList("")) { tikhomirov@5: System.out.println(fname); tikhomirov@5: HgDataFile fn = hgRepo.getFileNode(fname); tikhomirov@5: if (fn.exists()) { tikhomirov@143: fn.content(rev, out, true); tikhomirov@143: System.out.println(); tikhomirov@5: } else { tikhomirov@143: System.out.printf("%s not found!\n", fname); tikhomirov@5: } tikhomirov@5: } tikhomirov@1: } tikhomirov@143: tikhomirov@143: private static class OutputStreamChannel implements ByteChannel { tikhomirov@143: tikhomirov@143: private final OutputStream stream; tikhomirov@143: tikhomirov@143: public OutputStreamChannel(OutputStream out) { tikhomirov@143: stream = out; tikhomirov@143: } tikhomirov@143: tikhomirov@143: public int write(ByteBuffer buffer) throws Exception { tikhomirov@143: int count = buffer.remaining(); tikhomirov@143: while(buffer.hasRemaining()) { tikhomirov@143: stream.write(buffer.get()); tikhomirov@143: } tikhomirov@143: return count; tikhomirov@143: } tikhomirov@143: } tikhomirov@1: }