tikhomirov@234: /* tikhomirov@234: * Copyright (c) 2011 TMate Software Ltd tikhomirov@234: * tikhomirov@234: * This program is free software; you can redistribute it and/or modify tikhomirov@234: * it under the terms of the GNU General Public License as published by tikhomirov@234: * the Free Software Foundation; version 2 of the License. tikhomirov@234: * tikhomirov@234: * This program is distributed in the hope that it will be useful, tikhomirov@234: * but WITHOUT ANY WARRANTY; without even the implied warranty of tikhomirov@234: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the tikhomirov@234: * GNU General Public License for more details. tikhomirov@234: * tikhomirov@234: * For information on how to redistribute this software under tikhomirov@234: * the terms of a license other than GNU General Public License tikhomirov@234: * contact TMate Software at support@hg4j.com tikhomirov@234: */ tikhomirov@234: package org.tmatesoft.hg.console; tikhomirov@234: tikhomirov@299: import java.util.Collections; tikhomirov@234: import java.util.Comparator; tikhomirov@234: import java.util.HashMap; tikhomirov@234: import java.util.Map; tikhomirov@234: import java.util.TreeSet; tikhomirov@234: tikhomirov@234: import org.tmatesoft.hg.repo.HgChangelog; tikhomirov@234: import org.tmatesoft.hg.repo.HgRepository; tikhomirov@234: import org.tmatesoft.hg.repo.HgTags; tikhomirov@234: import org.tmatesoft.hg.repo.HgTags.TagInfo; tikhomirov@234: tikhomirov@234: /** tikhomirov@234: * tikhomirov@234: * @author Artem Tikhomirov tikhomirov@234: * @author TMate Software Ltd. tikhomirov@234: */ tikhomirov@234: public class Tags { tikhomirov@234: tikhomirov@234: public static void main(String[] args) throws Exception { tikhomirov@299: Options cmdLineOpts = Options.parse(args, Collections.emptySet()); tikhomirov@234: HgRepository hgRepo = cmdLineOpts.findRepository(); tikhomirov@234: if (hgRepo.isInvalid()) { tikhomirov@234: System.err.printf("Can't find repository in: %s\n", hgRepo.getLocation()); tikhomirov@234: return; tikhomirov@234: } tikhomirov@234: HgTags tags = hgRepo.getTags(); tikhomirov@234: final HgChangelog clog = hgRepo.getChangelog(); tikhomirov@234: final Map ti2index = new HashMap(); tikhomirov@234: final TreeSet sorted = new TreeSet(new Comparator() { tikhomirov@234: tikhomirov@234: public int compare(TagInfo o1, TagInfo o2) { tikhomirov@234: // reverse, from newer to older (bigger indexes first); tikhomirov@234: // never ==, tags from same revision in any order, just next to each other tikhomirov@234: int x1 = ti2index.get(o1); tikhomirov@234: int x2 = ti2index.get(o2); tikhomirov@234: return x1 < x2 ? 1 : -1; tikhomirov@234: } tikhomirov@234: }); tikhomirov@234: for (TagInfo ti : tags.getTags().values()) { tikhomirov@234: int x = clog.getLocalRevision(ti.revision()); // XXX in fact, performance hog. Need batch localRevision or another improvement tikhomirov@234: ti2index.put(ti, x); tikhomirov@234: sorted.add(ti); tikhomirov@234: } tikhomirov@234: for (TagInfo ti : sorted) { tikhomirov@234: int x = ti2index.get(ti); tikhomirov@234: System.out.printf("%-30s%8d:%s\n", ti.name(), x, ti.revision().shortNotation()); tikhomirov@234: } tikhomirov@234: } tikhomirov@234: }