tikhomirov@566: /* tikhomirov@566: * Copyright (c) 2013 TMate Software Ltd tikhomirov@566: * tikhomirov@566: * This program is free software; you can redistribute it and/or modify tikhomirov@566: * it under the terms of the GNU General Public License as published by tikhomirov@566: * the Free Software Foundation; version 2 of the License. tikhomirov@566: * tikhomirov@566: * This program is distributed in the hope that it will be useful, tikhomirov@566: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@566: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@566: * GNU General Public License for more details. tikhomirov@566: * tikhomirov@566: * For information on how to redistribute this software under tikhomirov@566: * the terms of a license other than GNU General Public License tikhomirov@566: * contact TMate Software at support@hg4j.com tikhomirov@566: */ tikhomirov@566: package org.tmatesoft.hg.console; tikhomirov@566: tikhomirov@566: import static org.tmatesoft.hg.repo.HgRepository.TIP; tikhomirov@566: tikhomirov@566: import java.util.Collections; tikhomirov@566: tikhomirov@566: import org.tmatesoft.hg.core.HgAnnotateCommand; tikhomirov@566: import org.tmatesoft.hg.core.HgAnnotateCommand.LineInfo; tikhomirov@566: import org.tmatesoft.hg.core.HgRepoFacade; tikhomirov@566: import org.tmatesoft.hg.repo.HgDataFile; tikhomirov@566: tikhomirov@566: /** tikhomirov@566: * tikhomirov@566: * @author Artem Tikhomirov tikhomirov@566: * @author TMate Software Ltd. tikhomirov@566: */ tikhomirov@566: public class Annotate { tikhomirov@566: tikhomirov@566: public static void main(String[] args) throws Exception { tikhomirov@566: Options cmdLineOpts = Options.parse(args, Collections.emptySet()); tikhomirov@566: HgRepoFacade repo = new HgRepoFacade(); tikhomirov@566: if (!repo.init(cmdLineOpts.findRepository())) { tikhomirov@566: System.err.printf("Can't find repository in: %s\n", repo.getRepository().getLocation()); tikhomirov@566: return; tikhomirov@566: } tikhomirov@566: int rev = cmdLineOpts.getSingleInt(TIP, "-r", "--rev"); tikhomirov@566: HgAnnotateCommand cmd = repo.createAnnotateCommand(); tikhomirov@566: AnnotateDumpInspector insp = new AnnotateDumpInspector(cmdLineOpts.getBoolean(false, "-l", "--line-number")); tikhomirov@566: cmd.changeset(rev); tikhomirov@566: for (String fname : cmdLineOpts.getList("")) { tikhomirov@566: HgDataFile fn = repo.getRepository().getFileNode(fname); tikhomirov@566: cmd.file(fn); tikhomirov@566: cmd.execute(insp); tikhomirov@566: } tikhomirov@566: } tikhomirov@566: tikhomirov@566: private static class AnnotateDumpInspector implements HgAnnotateCommand.Inspector { tikhomirov@566: private final boolean lineNumbers; tikhomirov@566: tikhomirov@566: public AnnotateDumpInspector(boolean printLineNumbers) { tikhomirov@566: lineNumbers = printLineNumbers; tikhomirov@566: } tikhomirov@566: tikhomirov@566: public void next(LineInfo lineInfo) { tikhomirov@566: if (lineNumbers) { tikhomirov@566: System.out.printf("%3d:%3d:%s", lineInfo.getChangesetIndex(), lineInfo.getLineNumber(), new String(lineInfo.getContent())); tikhomirov@566: } else { tikhomirov@566: System.out.printf("%3d:%s", lineInfo.getChangesetIndex(), new String(lineInfo.getContent())); tikhomirov@566: } tikhomirov@566: } tikhomirov@566: } tikhomirov@566: }