Mercurial > hg4j
comparison cmdline/org/tmatesoft/hg/console/Main.java @ 514:5dcb4581c8ef
Report renames when following file history tree with HgFileRenameHandlerMixin
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Mon, 17 Dec 2012 19:06:07 +0100 |
parents | 122e0600799f |
children | e6c8b9b654b2 |
comparison
equal
deleted
inserted
replaced
513:a41d955dc360 | 514:5dcb4581c8ef |
---|---|
28 import java.util.Map; | 28 import java.util.Map; |
29 | 29 |
30 import org.tmatesoft.hg.core.HgChangeset; | 30 import org.tmatesoft.hg.core.HgChangeset; |
31 import org.tmatesoft.hg.core.HgChangesetTreeHandler; | 31 import org.tmatesoft.hg.core.HgChangesetTreeHandler; |
32 import org.tmatesoft.hg.core.HgException; | 32 import org.tmatesoft.hg.core.HgException; |
33 import org.tmatesoft.hg.core.HgFileRenameHandlerMixin; | |
33 import org.tmatesoft.hg.core.HgFileRevision; | 34 import org.tmatesoft.hg.core.HgFileRevision; |
34 import org.tmatesoft.hg.core.HgLogCommand; | 35 import org.tmatesoft.hg.core.HgLogCommand; |
35 import org.tmatesoft.hg.core.HgManifestCommand; | 36 import org.tmatesoft.hg.core.HgManifestCommand; |
36 import org.tmatesoft.hg.core.HgManifestHandler; | 37 import org.tmatesoft.hg.core.HgManifestHandler; |
37 import org.tmatesoft.hg.core.Nodeid; | 38 import org.tmatesoft.hg.core.Nodeid; |
64 import org.tmatesoft.hg.repo.HgSubrepoLocation.Kind; | 65 import org.tmatesoft.hg.repo.HgSubrepoLocation.Kind; |
65 import org.tmatesoft.hg.repo.HgWorkingCopyStatusCollector; | 66 import org.tmatesoft.hg.repo.HgWorkingCopyStatusCollector; |
66 import org.tmatesoft.hg.repo.ext.HgExtensionsManager; | 67 import org.tmatesoft.hg.repo.ext.HgExtensionsManager; |
67 import org.tmatesoft.hg.repo.ext.HgExtensionsManager.HgExt; | 68 import org.tmatesoft.hg.repo.ext.HgExtensionsManager.HgExt; |
68 import org.tmatesoft.hg.repo.ext.Rebase; | 69 import org.tmatesoft.hg.repo.ext.Rebase; |
70 import org.tmatesoft.hg.util.Adaptable; | |
69 import org.tmatesoft.hg.util.FileWalker; | 71 import org.tmatesoft.hg.util.FileWalker; |
70 import org.tmatesoft.hg.util.LogFacility; | 72 import org.tmatesoft.hg.util.LogFacility; |
71 import org.tmatesoft.hg.util.Pair; | 73 import org.tmatesoft.hg.util.Pair; |
72 import org.tmatesoft.hg.util.Path; | 74 import org.tmatesoft.hg.util.Path; |
73 import org.tmatesoft.hg.util.PathRewrite; | 75 import org.tmatesoft.hg.util.PathRewrite; |
172 private void buildFileLog() throws Exception { | 174 private void buildFileLog() throws Exception { |
173 final long start = System.nanoTime(); | 175 final long start = System.nanoTime(); |
174 HgLogCommand cmd = new HgLogCommand(hgRepo); | 176 HgLogCommand cmd = new HgLogCommand(hgRepo); |
175 cmd.file("file1b.txt", true); | 177 cmd.file("file1b.txt", true); |
176 final int[] count = new int[] { 0 }; | 178 final int[] count = new int[] { 0 }; |
177 cmd.execute(new HgChangesetTreeHandler() { | 179 class MyHandler implements HgChangesetTreeHandler, Adaptable { |
178 public void treeElement(HgChangesetTreeHandler.TreeElement entry) { | 180 public void treeElement(HgChangesetTreeHandler.TreeElement entry) { |
179 StringBuilder sb = new StringBuilder(); | 181 StringBuilder sb = new StringBuilder(); |
180 HashSet<Nodeid> test = new HashSet<Nodeid>(entry.childRevisions()); | 182 HashSet<Nodeid> test = new HashSet<Nodeid>(entry.childRevisions()); |
181 for (HgChangeset cc : entry.children()) { | 183 for (HgChangeset cc : entry.children()) { |
182 sb.append(cc.getRevisionIndex()); | 184 sb.append(cc.getRevisionIndex()); |
209 if (isJoin || isFork) { | 211 if (isJoin || isFork) { |
210 System.out.println(); | 212 System.out.println(); |
211 } | 213 } |
212 count[0]++; | 214 count[0]++; |
213 } | 215 } |
214 }); | 216 |
217 public <T> T getAdapter(Class<T> adapterClass) { | |
218 if (adapterClass == HgFileRenameHandlerMixin.class) { | |
219 // in fact, new instance is not very nice, however | |
220 // getAdapter callers are supposed to understand the risk of new instance | |
221 // and cache returned value | |
222 // besides, stateless implementation of RenameDumpHandler | |
223 // doesn't really care about few instances | |
224 return adapterClass.cast(new Log.RenameDumpHandler()); | |
225 } | |
226 return null; | |
227 } | |
228 }; | |
229 cmd.execute(new MyHandler()); | |
215 System.out.println(count[0]); | 230 System.out.println(count[0]); |
216 final long end = System.nanoTime(); | 231 final long end = System.nanoTime(); |
217 System.out.printf("buildFileLog: %,d ms\n", (end-start)/1000); | 232 System.out.printf("buildFileLog: %,d ms\n", (end-start)/1000); |
218 } | 233 } |
219 | 234 |