Mercurial > jhg
annotate cmdline/org/tmatesoft/hg/console/Main.java @ 452:7dcc920e2d57
Moving towards gradle build
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Tue, 12 Jun 2012 23:32:12 +0200 | 
| parents | 6865eb742883 | 
| children | 909306e412e2 | 
| rev | line source | 
|---|---|
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 1 /* | 
| 415 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
367diff
changeset | 2 * Copyright (c) 2011-2012 TMate Software Ltd | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 3 * | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 4 * This program is free software; you can redistribute it and/or modify | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 5 * it under the terms of the GNU General Public License as published by | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 6 * the Free Software Foundation; version 2 of the License. | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 7 * | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 8 * This program is distributed in the hope that it will be useful, | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 11 * GNU General Public License for more details. | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 12 * | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 13 * For information on how to redistribute this software under | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 14 * the terms of a license other than GNU General Public License | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 15 * contact TMate Software at support@hg4j.com | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 16 */ | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 17 package org.tmatesoft.hg.console; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 18 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 19 import static org.tmatesoft.hg.repo.HgRepository.TIP; | 
| 429 
cd658b24a620
FIXMEs: javadoc, proper use of constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
427diff
changeset | 20 import static org.tmatesoft.hg.repo.HgRepository.WORKING_COPY; | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 21 | 
| 254 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 22 import java.io.File; | 
| 350 
33eaed1ad130
Allow FileIterator report any errors from the underlaying file system up to the client
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
348diff
changeset | 23 import java.io.IOException; | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 24 import java.util.ArrayList; | 
| 305 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 25 import java.util.Collection; | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 26 import java.util.Collections; | 
| 328 
a674b8590362
Move file tree history to upper API level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
317diff
changeset | 27 import java.util.HashSet; | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 28 import java.util.List; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 29 import java.util.Map; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 30 | 
| 248 
3fbfce107f94
Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
244diff
changeset | 31 import org.junit.Assert; | 
| 427 
31a89587eb04
FIXMEs: consistent names, throws for commands and their handlers. Use of checked exceptions in hi-level api
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
426diff
changeset | 32 import org.tmatesoft.hg.core.HgManifestHandler; | 
| 354 
5f9073eabf06
Propagate errors with exceptions up to a end client
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
350diff
changeset | 33 import org.tmatesoft.hg.core.HgCallbackTargetException; | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 34 import org.tmatesoft.hg.core.HgCatCommand; | 
| 328 
a674b8590362
Move file tree history to upper API level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
317diff
changeset | 35 import org.tmatesoft.hg.core.HgChangeset; | 
| 417 
ccd7d25e5aea
New and better name for HgFileInformer - HgChangesetFileSneaker. Explain (comments) ties between HgManifest, HgDataFile, HgChangesetFileSneaker and reasons for method placement
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
416diff
changeset | 36 import org.tmatesoft.hg.core.HgChangesetFileSneaker; | 
| 328 
a674b8590362
Move file tree history to upper API level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
317diff
changeset | 37 import org.tmatesoft.hg.core.HgChangesetTreeHandler; | 
| 354 
5f9073eabf06
Propagate errors with exceptions up to a end client
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
350diff
changeset | 38 import org.tmatesoft.hg.core.HgException; | 
| 231 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 39 import org.tmatesoft.hg.core.HgFileRevision; | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 40 import org.tmatesoft.hg.core.HgLogCommand; | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 41 import org.tmatesoft.hg.core.HgManifestCommand; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 42 import org.tmatesoft.hg.core.Nodeid; | 
| 425 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 43 import org.tmatesoft.hg.internal.BasicSessionContext; | 
| 157 
d5268ca7715b
Merged branch wrap-data-access into default for resource-friendly data access. Updated API to promote that friendliness to clients (channels, not byte[]). More exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
143diff
changeset | 44 import org.tmatesoft.hg.internal.ByteArrayChannel; | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 45 import org.tmatesoft.hg.internal.DigestHelper; | 
| 229 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
226diff
changeset | 46 import org.tmatesoft.hg.internal.PathGlobMatcher; | 
| 254 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 47 import org.tmatesoft.hg.internal.RelativePathRewrite; | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 48 import org.tmatesoft.hg.internal.StreamLogFacility; | 
| 220 
8de327242aa0
Basic information about branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
197diff
changeset | 49 import org.tmatesoft.hg.repo.HgBranches; | 
| 233 
1d389c0cb0a5
Optimize file history walk not to iterat over whole changelog for sparse and distant revisions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
232diff
changeset | 50 import org.tmatesoft.hg.repo.HgChangelog; | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 51 import org.tmatesoft.hg.repo.HgChangelog.RawChangeset; | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 52 import org.tmatesoft.hg.repo.HgDataFile; | 
| 290 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
285diff
changeset | 53 import org.tmatesoft.hg.repo.HgDirstate; | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 54 import org.tmatesoft.hg.repo.HgDirstate.EntryKind; | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 55 import org.tmatesoft.hg.repo.HgDirstate.Record; | 
| 339 
863356c2847e
Issue 16: respect glob patterns in HgIgnore for sub-directories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
328diff
changeset | 56 import org.tmatesoft.hg.repo.HgIgnore; | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 57 import org.tmatesoft.hg.repo.HgInternals; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 58 import org.tmatesoft.hg.repo.HgManifest; | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 59 import org.tmatesoft.hg.repo.HgManifest.Flags; | 
| 231 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 60 import org.tmatesoft.hg.repo.HgMergeState; | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 61 import org.tmatesoft.hg.repo.HgRepository; | 
| 423 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 62 import org.tmatesoft.hg.repo.HgRuntimeException; | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 63 import org.tmatesoft.hg.repo.HgStatusCollector; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 64 import org.tmatesoft.hg.repo.HgStatusInspector; | 
| 239 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 65 import org.tmatesoft.hg.repo.HgSubrepoLocation; | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 66 import org.tmatesoft.hg.repo.HgSubrepoLocation.Kind; | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 67 import org.tmatesoft.hg.repo.HgWorkingCopyStatusCollector; | 
| 433 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
431diff
changeset | 68 import org.tmatesoft.hg.repo.HgRevisionMap; | 
| 254 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 69 import org.tmatesoft.hg.util.FileWalker; | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 70 import org.tmatesoft.hg.util.LogFacility; | 
| 235 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 71 import org.tmatesoft.hg.util.Pair; | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 72 import org.tmatesoft.hg.util.Path; | 
| 254 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 73 import org.tmatesoft.hg.util.PathRewrite; | 
| 425 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 74 import org.tmatesoft.hg.util.ProgressSupport; | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 75 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 76 /** | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 77 * Various debug dumps. | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 78 * | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 79 * @author Artem Tikhomirov | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 80 * @author TMate Software Ltd. | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 81 */ | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 82 @SuppressWarnings("unused") | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 83 public class Main { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 84 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 85 private Options cmdLineOpts; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 86 private HgRepository hgRepo; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 87 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 88 public Main(String[] args) throws Exception { | 
| 299 
45dc79e545f5
Recognize flag options (options with no arguments) in command line sample apps
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
295diff
changeset | 89 cmdLineOpts = Options.parse(args, Collections.<String>emptySet()); | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 90 hgRepo = cmdLineOpts.findRepository(); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 91 if (hgRepo.isInvalid()) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 92 System.err.printf("Can't find repository in: %s\n", hgRepo.getLocation()); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 93 return; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 94 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 95 System.out.println("REPO:" + hgRepo.getLocation()); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 96 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 97 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 98 public static void main(String[] args) throws Exception { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 99 Main m = new Main(args); | 
| 442 
6865eb742883
Tests for subrepo API, refactor status tests for reuse, better subrepos API
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
433diff
changeset | 100 // m.checkWalkFileRevisions(); | 
| 426 
063b0663495a
HgManifest#getFileRevisions refactored into #walkFileRevisions to match pattern throught rest of the library
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
425diff
changeset | 101 // m.checkSubProgress(); | 
| 425 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 102 // m.checkFileFlags(); | 
| 339 
863356c2847e
Issue 16: respect glob patterns in HgIgnore for sub-directories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
328diff
changeset | 103 // m.buildFileLog(); | 
| 305 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 104 // m.testConsoleLog(); | 
| 270 
c6450b0b1fd5
Avoid IAE:nullid when looking into stale merge/state file
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
254diff
changeset | 105 // m.testTreeTraversal(); | 
| 244 
4b661efb9374
Use updated location of cache files (cache/ folder instead of .cache filename extension). Provide means to update (write down) cache for subsequent uses
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
243diff
changeset | 106 // m.testRevisionMap(); | 
| 442 
6865eb742883
Tests for subrepo API, refactor status tests for reuse, better subrepos API
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
433diff
changeset | 107 m.testSubrepos(); | 
| 239 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 108 // m.testReadWorkingCopy(); | 
| 254 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 109 // m.testParents(); | 
| 243 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 110 // m.testEffectiveFileLog(); | 
| 252 
a6d19adc2636
HgRepository.getWorkingCopyBranchName() to retrieve branch associated with working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
249diff
changeset | 111 // m.testCatAtCsetRevision(); | 
| 345 
58725dd511b3
Provide access to revision's origins
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
341diff
changeset | 112 // m.testMergeState(); | 
| 231 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 113 // m.testFileStatus(); | 
| 341 
75c452fdd76a
Merging state not detected when there's no conflicts to resolve (no merge/state file)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
340diff
changeset | 114 // m.dumpBranches(); | 
| 220 
8de327242aa0
Basic information about branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
197diff
changeset | 115 // m.inflaterLengthException(); | 
| 157 
d5268ca7715b
Merged branch wrap-data-access into default for resource-friendly data access. Updated API to promote that friendliness to clients (channels, not byte[]). More exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
143diff
changeset | 116 // m.dumpIgnored(); | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 117 // m.dumpDirstate(); | 
| 157 
d5268ca7715b
Merged branch wrap-data-access into default for resource-friendly data access. Updated API to promote that friendliness to clients (channels, not byte[]). More exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
143diff
changeset | 118 // m.testStatusInternals(); | 
| 
d5268ca7715b
Merged branch wrap-data-access into default for resource-friendly data access. Updated API to promote that friendliness to clients (channels, not byte[]). More exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
143diff
changeset | 119 // m.catCompleteHistory(); | 
| 
d5268ca7715b
Merged branch wrap-data-access into default for resource-friendly data access. Updated API to promote that friendliness to clients (channels, not byte[]). More exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
143diff
changeset | 120 // m.dumpCompleteManifestLow(); | 
| 415 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
367diff
changeset | 121 // m.dumpCompleteManifestHigh(); | 
| 157 
d5268ca7715b
Merged branch wrap-data-access into default for resource-friendly data access. Updated API to promote that friendliness to clients (channels, not byte[]). More exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
143diff
changeset | 122 // m.bunchOfTests(); | 
| 
d5268ca7715b
Merged branch wrap-data-access into default for resource-friendly data access. Updated API to promote that friendliness to clients (channels, not byte[]). More exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
143diff
changeset | 123 } | 
| 425 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 124 | 
| 426 
063b0663495a
HgManifest#getFileRevisions refactored into #walkFileRevisions to match pattern throught rest of the library
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
425diff
changeset | 125 // hg4j repo | 
| 
063b0663495a
HgManifest#getFileRevisions refactored into #walkFileRevisions to match pattern throught rest of the library
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
425diff
changeset | 126 public void checkWalkFileRevisions() throws Exception { | 
| 
063b0663495a
HgManifest#getFileRevisions refactored into #walkFileRevisions to match pattern throught rest of the library
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
425diff
changeset | 127 // hg --debug manifest --rev 150 | grep cmdline/org/tmatesoft/hg/console/Main.java | 
| 
063b0663495a
HgManifest#getFileRevisions refactored into #walkFileRevisions to match pattern throught rest of the library
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
425diff
changeset | 128 hgRepo.getManifest().walkFileRevisions(Path.create("cmdline/org/tmatesoft/hg/console/Main.java"), new ManifestDump(), 100, 150, 200, 210, 300); | 
| 
063b0663495a
HgManifest#getFileRevisions refactored into #walkFileRevisions to match pattern throught rest of the library
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
425diff
changeset | 129 } | 
| 
063b0663495a
HgManifest#getFileRevisions refactored into #walkFileRevisions to match pattern throught rest of the library
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
425diff
changeset | 130 | 
| 425 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 131 // no repo | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 132 private void checkSubProgress() { | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 133 ProgressSupport ps = new ProgressSupport() { | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 134 private int units; | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 135 | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 136 public void start(int totalUnits) { | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 137 units = totalUnits; | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 138 System.out.printf("%d:", totalUnits); | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 139 | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 140 } | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 141 public void worked(int wu) { | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 142 for (int i = 0; i < wu; i++) { | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 143 System.out.print(units-- == 0 ? '!' : '.'); | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 144 } | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 145 } | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 146 public void done() { | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 147 System.out.println("DONE"); | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 148 } | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 149 }; | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 150 ps.start(10); | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 151 ProgressSupport.Sub s1 = new ProgressSupport.Sub(ps, 3); | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 152 ProgressSupport.Sub s2 = new ProgressSupport.Sub(ps, 7); | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 153 s1.start(10); | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 154 s1.worked(1); | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 155 s1.worked(2); | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 156 s1.worked(3); | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 157 s1.worked(4); | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 158 s1.done(); | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 159 // | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 160 s2.start(5); | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 161 s2.worked(3); | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 162 s2.worked(2); | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 163 s2.done(); | 
| 
48f993aa2f41
FIXMEs: exceptions, javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
424diff
changeset | 164 } | 
| 305 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 165 | 
| 415 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
367diff
changeset | 166 private void checkFileFlags() throws Exception { | 
| 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
367diff
changeset | 167 // ~/hg/test-flags repo | 
| 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
367diff
changeset | 168 // TODO transform to a test once I keep test-flags in test-repos.jar | 
| 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
367diff
changeset | 169 HgDataFile link = hgRepo.getFileNode("file-link"); | 
| 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
367diff
changeset | 170 HgDataFile exec = hgRepo.getFileNode("file-exec"); | 
| 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
367diff
changeset | 171 HgDataFile file = hgRepo.getFileNode("regular-file"); | 
| 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
367diff
changeset | 172 System.out.println("Link: " + link.getFlags(TIP)); | 
| 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
367diff
changeset | 173 System.out.println("Exec: " + exec.getFlags(TIP)); | 
| 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
367diff
changeset | 174 System.out.println("File: " + file.getFlags(TIP)); | 
| 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
367diff
changeset | 175 } | 
| 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
367diff
changeset | 176 | 
| 328 
a674b8590362
Move file tree history to upper API level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
317diff
changeset | 177 private void buildFileLog() throws Exception { | 
| 
a674b8590362
Move file tree history to upper API level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
317diff
changeset | 178 HgLogCommand cmd = new HgLogCommand(hgRepo); | 
| 
a674b8590362
Move file tree history to upper API level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
317diff
changeset | 179 cmd.file("file1", false); | 
| 
a674b8590362
Move file tree history to upper API level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
317diff
changeset | 180 cmd.execute(new HgChangesetTreeHandler() { | 
| 427 
31a89587eb04
FIXMEs: consistent names, throws for commands and their handlers. Use of checked exceptions in hi-level api
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
426diff
changeset | 181 public void treeElement(HgChangesetTreeHandler.TreeElement entry) { | 
| 423 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 182 StringBuilder sb = new StringBuilder(); | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 183 HashSet<Nodeid> test = new HashSet<Nodeid>(entry.childRevisions()); | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 184 for (HgChangeset cc : entry.children()) { | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 185 sb.append(cc.getRevisionIndex()); | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 186 sb.append(':'); | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 187 sb.append(cc.getNodeid().shortNotation()); | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 188 sb.append(", "); | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 189 } | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 190 final Pair<Nodeid, Nodeid> parents = entry.parentRevisions(); | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 191 final boolean isJoin = !parents.first().isNull() && !parents.second().isNull(); | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 192 final boolean isFork = entry.children().size() > 1; | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 193 final HgChangeset cset = entry.changeset(); | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 194 System.out.printf("%d:%s - %s\n", cset.getRevisionIndex(), cset.getNodeid().shortNotation(), cset.getComment()); | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 195 if (!isJoin && !isFork && !entry.children().isEmpty()) { | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 196 System.out.printf("\t=> %s\n", sb); | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 197 } | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 198 if (isJoin) { | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 199 HgChangeset p1 = entry.parents().first(); | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 200 HgChangeset p2 = entry.parents().second(); | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 201 System.out.printf("\tjoin <= (%d:%s, %d:%s)", p1.getRevisionIndex(), p1.getNodeid().shortNotation(), p2.getRevisionIndex(), p2.getNodeid().shortNotation()); | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 202 if (isFork) { | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 203 System.out.print(", "); | 
| 366 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 204 } | 
| 423 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 205 } | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 206 if (isFork) { | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 207 if (!isJoin) { | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 208 System.out.print('\t'); | 
| 366 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 209 } | 
| 423 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 210 System.out.printf("fork => [%s]", sb); | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 211 } | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 212 if (isJoin || isFork) { | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 213 System.out.println(); | 
| 317 
09628675bcee
Rework file history build approach to match rest of the API
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
308diff
changeset | 214 } | 
| 305 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 215 } | 
| 328 
a674b8590362
Move file tree history to upper API level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
317diff
changeset | 216 }); | 
| 305 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 217 } | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 218 | 
| 366 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 219 private void buildFileLogOld() throws Exception { | 
| 305 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 220 final HgDataFile fn = hgRepo.getFileNode("file1"); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 221 final int[] fileChangesetRevisions = new int[fn.getRevisionCount()]; | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 222 fn.history(new HgChangelog.Inspector() { | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 223 private int fileLocalRevisions = 0; | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 224 private int[] parentRevisions = new int[2]; | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 225 | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 226 public void next(int revisionNumber, Nodeid nodeid, RawChangeset cset) { | 
| 366 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 227 try { | 
| 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 228 fileChangesetRevisions[fileLocalRevisions] = revisionNumber; | 
| 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 229 fn.parents(fileLocalRevisions, parentRevisions, null, null); | 
| 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 230 boolean join = parentRevisions[0] != -1 && parentRevisions[1] != -1; | 
| 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 231 if (join) { | 
| 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 232 System.out.print("join["); | 
| 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 233 } | 
| 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 234 if (parentRevisions[0] != -1) { | 
| 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 235 System.out.printf("%2d->%2d, ", fileChangesetRevisions[parentRevisions[0]], revisionNumber); | 
| 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 236 } | 
| 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 237 if (parentRevisions[1] != -1) { | 
| 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 238 System.out.printf("%2d->%2d, ", fileChangesetRevisions[parentRevisions[1]], revisionNumber); | 
| 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 239 } | 
| 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 240 if (join) { | 
| 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 241 System.out.print("]"); | 
| 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 242 } | 
| 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 243 fileLocalRevisions++; | 
| 423 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 244 } catch (HgRuntimeException ex) { | 
| 366 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 245 ex.printStackTrace(); | 
| 305 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 246 } | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 247 } | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 248 }); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 249 System.out.println(); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 250 } | 
| 243 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 251 | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 252 private void testConsoleLog() { | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 253 LogFacility fc = new StreamLogFacility(true, true, true, System.out); | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 254 System.out.printf("isDebug: %s, isInfo:%s\n", fc.isDebug(), fc.isInfo()); | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 255 fc.debug(getClass(), "%d", 1); | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 256 fc.info(getClass(), "%d\n", 2); | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 257 fc.warn(getClass(), "%d\n", 3); | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 258 fc.error(getClass(), "%d", 4); | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 259 Exception ex = new Exception(); | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 260 fc.debug(getClass(), ex, "message"); | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 261 fc.info(getClass(), ex, null); | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 262 fc.warn(getClass(), ex, null); | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 263 fc.error(getClass(), ex, "message"); | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 264 } | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 265 | 
| 254 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 266 private void testTreeTraversal() throws Exception { | 
| 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 267 File repoRoot = hgRepo.getWorkingDir(); | 
| 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 268 Path.Source pathSrc = new Path.SimpleSource(new PathRewrite.Composite(new RelativePathRewrite(repoRoot), hgRepo.getToRepoPathHelper())); | 
| 431 
12f668401613
FIXMEs: awkward API refactored, what need to be internal got hidden; public aspects got captured in slim interfaces
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
429diff
changeset | 269 FileWalker w = new FileWalker(new BasicSessionContext(null), repoRoot, pathSrc); | 
| 254 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 270 int count = 0; | 
| 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 271 final long start = System.currentTimeMillis(); | 
| 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 272 while (w.hasNext()) { | 
| 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 273 count++; | 
| 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 274 w.next(); | 
| 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 275 } | 
| 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 276 System.out.printf("Traversal of %d files took %d ms", count, System.currentTimeMillis() - start); | 
| 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 277 } | 
| 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 278 | 
| 243 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 279 /* | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 280 * cpython repo with 70715 revisions. | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 281 3 revisions - 80 ms vs 250 ms (250ms init) | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 282 4 revisions - 110 ms vs 265 ms (265 ms init) | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 283 5 revisions - 94 vs 266. | 
| 367 
2fadf8695f8a
Use 'revision index' instead of the vague 'local revision number' concept in the API
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
366diff
changeset | 284 complete iteration in changelog.getRevisionIndex(tipNodeid) takes 47 ms | 
| 243 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 285 compared to complete iteration inside RevisionMap.init() of 171 ms. | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 286 The only difference is latter instantiates Nodeids, while former compares binary content as is. | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 287 Hence, with 20-30 ms per regular getLocalRevision, it pays off to use RevisionMap with at least 15-20 | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 288 queries | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 289 */ | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 290 private void testRevisionMap() throws Exception { | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 291 HgChangelog changelog = hgRepo.getChangelog(); | 
| 433 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
431diff
changeset | 292 HgRevisionMap<HgChangelog> rmap = new HgRevisionMap<HgChangelog>(changelog).init(); // warm-up, ensure complete file read | 
| 243 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 293 int tip = changelog.getLastRevision(); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 294 // take 5 arbitrary revisions at 0, 1/4, 2/4, 3/4 and 4/4 | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 295 final Nodeid[] revs = new Nodeid[5]; | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 296 revs[4] = changelog.getRevision(0); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 297 revs[3] = changelog.getRevision(tip / 4); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 298 revs[2] = changelog.getRevision(tip / 2); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 299 revs[1] = changelog.getRevision(tip / 4 + tip / 2); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 300 revs[0] = changelog.getRevision(tip); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 301 long start = System.currentTimeMillis(); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 302 for (int i = 0; i < revs.length; i++) { | 
| 367 
2fadf8695f8a
Use 'revision index' instead of the vague 'local revision number' concept in the API
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
366diff
changeset | 303 final int localRev = changelog.getRevisionIndex(revs[i]); | 
| 243 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 304 System.out.printf("%d:%s\n", localRev, revs[i]); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 305 } | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 306 System.out.println(System.currentTimeMillis() - start); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 307 System.out.println(); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 308 // | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 309 start = System.currentTimeMillis(); | 
| 433 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
431diff
changeset | 310 rmap = new HgRevisionMap<HgChangelog>(changelog).init(); | 
| 243 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 311 long s2 = System.currentTimeMillis(); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 312 for (int i = 0; i < revs.length; i++) { | 
| 367 
2fadf8695f8a
Use 'revision index' instead of the vague 'local revision number' concept in the API
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
366diff
changeset | 313 final int localRev = rmap.revisionIndex(revs[i]); | 
| 243 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 314 System.out.printf("%d:%s\n", localRev, revs[i]); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 315 } | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 316 System.out.println(System.currentTimeMillis() - start); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 317 System.out.printf("\t from that, init took %d ms\n", s2 - start); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 318 | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 319 } | 
| 239 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 320 | 
| 442 
6865eb742883
Tests for subrepo API, refactor status tests for reuse, better subrepos API
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
433diff
changeset | 321 // any repository with subrepositories | 
| 239 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 322 private void testSubrepos() throws Exception { | 
| 442 
6865eb742883
Tests for subrepo API, refactor status tests for reuse, better subrepos API
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
433diff
changeset | 323 // @see TestSubrepo#testAccessAPI | 
| 239 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 324 for (HgSubrepoLocation l : hgRepo.getSubrepositories()) { | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 325 System.out.println(l.getLocation()); | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 326 System.out.println(l.getSource()); | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 327 System.out.println(l.getType()); | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 328 System.out.println(l.isCommitted() ? l.getRevision() : "not yet committed"); | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 329 if (l.getType() == Kind.Hg) { | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 330 HgRepository r = l.getRepo(); | 
| 442 
6865eb742883
Tests for subrepo API, refactor status tests for reuse, better subrepos API
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
433diff
changeset | 331 System.out.printf("%s (%s) has %d revisions\n", l.getLocation(), r.getLocation(), r.getChangelog().getLastRevision() + 1); | 
| 239 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 332 if (r.getChangelog().getLastRevision() >= 0) { | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 333 final RawChangeset c = r.getChangelog().range(TIP, TIP).get(0); | 
| 442 
6865eb742883
Tests for subrepo API, refactor status tests for reuse, better subrepos API
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
433diff
changeset | 334 System.out.printf("TIP: %s %s '%s'\n", c.user(), c.dateString(), c.comment()); | 
| 239 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 335 } | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 336 } | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 337 } | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 338 } | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 339 | 
| 237 
6e1373b54e9b
Allow access to working copy content through HgDataFile. Give access to repository's working dir
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
236diff
changeset | 340 private void testReadWorkingCopy() throws Exception { | 
| 
6e1373b54e9b
Allow access to working copy content through HgDataFile. Give access to repository's working dir
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
236diff
changeset | 341 for (String fname : cmdLineOpts.getList("")) { | 
| 
6e1373b54e9b
Allow access to working copy content through HgDataFile. Give access to repository's working dir
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
236diff
changeset | 342 HgDataFile fn = hgRepo.getFileNode(fname); | 
| 
6e1373b54e9b
Allow access to working copy content through HgDataFile. Give access to repository's working dir
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
236diff
changeset | 343 ByteArrayChannel sink = new ByteArrayChannel(); | 
| 
6e1373b54e9b
Allow access to working copy content through HgDataFile. Give access to repository's working dir
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
236diff
changeset | 344 fn.workingCopy(sink); | 
| 
6e1373b54e9b
Allow access to working copy content through HgDataFile. Give access to repository's working dir
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
236diff
changeset | 345 System.out.printf("%s: read %d bytes of working copy", fname, sink.toArray().length); | 
| 
6e1373b54e9b
Allow access to working copy content through HgDataFile. Give access to repository's working dir
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
236diff
changeset | 346 } | 
| 
6e1373b54e9b
Allow access to working copy content through HgDataFile. Give access to repository's working dir
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
236diff
changeset | 347 } | 
| 
6e1373b54e9b
Allow access to working copy content through HgDataFile. Give access to repository's working dir
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
236diff
changeset | 348 | 
| 235 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 349 private void testParents() throws Exception { | 
| 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 350 // hg parents cmd | 
| 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 351 final Pair<Nodeid, Nodeid> wcParents = hgRepo.getWorkingCopyParents(); | 
| 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 352 ChangesetDumpHandler dump = new ChangesetDumpHandler(hgRepo); | 
| 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 353 HgLogCommand cmd = new HgLogCommand(hgRepo); | 
| 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 354 if (wcParents.hasFirst()) { | 
| 253 
1874d11054e5
HgLogCommand.changeset(Nodeid) to ease command configuration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
252diff
changeset | 355 cmd.changeset(wcParents.first()).execute(dump); | 
| 235 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 356 } | 
| 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 357 if (wcParents.hasSecond()) { | 
| 253 
1874d11054e5
HgLogCommand.changeset(Nodeid) to ease command configuration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
252diff
changeset | 358 cmd.changeset(wcParents.second()).execute(dump); | 
| 235 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 359 } | 
| 252 
a6d19adc2636
HgRepository.getWorkingCopyBranchName() to retrieve branch associated with working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
249diff
changeset | 360 System.out.println("Branch:" + hgRepo.getWorkingCopyBranchName()); | 
| 235 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 361 } | 
| 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 362 | 
| 242 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 363 /* | 
| 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 364 * -R \temp\hg\hg4j-50 src/org/tmatesoft/hg/internal/RevlogStream.java | 
| 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 365 * | 
| 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 366 * -R \temp\hg\cpython Lib/doctest.py, range 15907..68588, total 251 revision | 
| 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 367 * no improvement (collect linkRev, hgchangelog.range([])) 10890 ms | 
| 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 368 * improved history logic in HgDataFile (minimize reads of close revisions): | 
| 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 369 * with no sort (defect for tool-created repos) took 10500 ms | 
| 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 370 * with sort (to order revisions from linkRev before use) 610 ms | 
| 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 371 * HgChangelog.range() - 92 calls | 
| 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 372 * RevlogStream with separate iterate(int[] sortedRevisions,...) | 
| 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 373 * RevlogStream.ReaderN1.range(): 185 380 ms | 
| 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 374 */ | 
| 366 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 375 private void testEffectiveFileLog() throws Exception { | 
| 233 
1d389c0cb0a5
Optimize file history walk not to iterat over whole changelog for sparse and distant revisions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
232diff
changeset | 376 for (String fname : cmdLineOpts.getList("")) { | 
| 
1d389c0cb0a5
Optimize file history walk not to iterat over whole changelog for sparse and distant revisions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
232diff
changeset | 377 System.out.println(fname); | 
| 242 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 378 final long start = System.currentTimeMillis(); | 
| 233 
1d389c0cb0a5
Optimize file history walk not to iterat over whole changelog for sparse and distant revisions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
232diff
changeset | 379 HgDataFile fn = hgRepo.getFileNode(fname); | 
| 
1d389c0cb0a5
Optimize file history walk not to iterat over whole changelog for sparse and distant revisions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
232diff
changeset | 380 if (fn.exists()) { | 
| 
1d389c0cb0a5
Optimize file history walk not to iterat over whole changelog for sparse and distant revisions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
232diff
changeset | 381 fn.history(new HgChangelog.Inspector() { | 
| 
1d389c0cb0a5
Optimize file history walk not to iterat over whole changelog for sparse and distant revisions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
232diff
changeset | 382 public void next(int revisionNumber, Nodeid nodeid, RawChangeset cset) { | 
| 
1d389c0cb0a5
Optimize file history walk not to iterat over whole changelog for sparse and distant revisions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
232diff
changeset | 383 System.out.printf("%d:%s\n", revisionNumber, nodeid); | 
| 
1d389c0cb0a5
Optimize file history walk not to iterat over whole changelog for sparse and distant revisions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
232diff
changeset | 384 } | 
| 
1d389c0cb0a5
Optimize file history walk not to iterat over whole changelog for sparse and distant revisions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
232diff
changeset | 385 }); | 
| 
1d389c0cb0a5
Optimize file history walk not to iterat over whole changelog for sparse and distant revisions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
232diff
changeset | 386 } | 
| 242 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 387 System.out.printf("Done: %d\n", System.currentTimeMillis() - start); | 
| 233 
1d389c0cb0a5
Optimize file history walk not to iterat over whole changelog for sparse and distant revisions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
232diff
changeset | 388 } | 
| 
1d389c0cb0a5
Optimize file history walk not to iterat over whole changelog for sparse and distant revisions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
232diff
changeset | 389 } | 
| 
1d389c0cb0a5
Optimize file history walk not to iterat over whole changelog for sparse and distant revisions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
232diff
changeset | 390 | 
| 232 
b7347daa50e3
Allow to cat a file with changeset revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
231diff
changeset | 391 // TODO as test in TestCat | 
| 
b7347daa50e3
Allow to cat a file with changeset revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
231diff
changeset | 392 private void testCatAtCsetRevision() throws Exception { | 
| 
b7347daa50e3
Allow to cat a file with changeset revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
231diff
changeset | 393 HgCatCommand cmd = new HgCatCommand(hgRepo); | 
| 248 
3fbfce107f94
Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
244diff
changeset | 394 final Path file = Path.create("src/org/tmatesoft/hg/internal/RevlogStream.java"); | 
| 
3fbfce107f94
Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
244diff
changeset | 395 cmd.file(file); | 
| 
3fbfce107f94
Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
244diff
changeset | 396 final Nodeid cset = Nodeid.fromAscii("08db726a0fb7914ac9d27ba26dc8bbf6385a0554"); | 
| 
3fbfce107f94
Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
244diff
changeset | 397 cmd.changeset(cset); | 
| 232 
b7347daa50e3
Allow to cat a file with changeset revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
231diff
changeset | 398 final ByteArrayChannel sink = new ByteArrayChannel(); | 
| 
b7347daa50e3
Allow to cat a file with changeset revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
231diff
changeset | 399 cmd.execute(sink); | 
| 
b7347daa50e3
Allow to cat a file with changeset revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
231diff
changeset | 400 System.out.println(sink.toArray().length); | 
| 417 
ccd7d25e5aea
New and better name for HgFileInformer - HgChangesetFileSneaker. Explain (comments) ties between HgManifest, HgDataFile, HgChangesetFileSneaker and reasons for method placement
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
416diff
changeset | 401 HgChangesetFileSneaker i = new HgChangesetFileSneaker(hgRepo); | 
| 362 
4937e35b805b
Report dirstate access error with Exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
360diff
changeset | 402 boolean result = i.changeset(cset).checkExists(file); | 
| 248 
3fbfce107f94
Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
244diff
changeset | 403 Assert.assertFalse(result); | 
| 
3fbfce107f94
Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
244diff
changeset | 404 Assert.assertFalse(i.exists()); | 
| 362 
4937e35b805b
Report dirstate access error with Exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
360diff
changeset | 405 result = i.followRenames(true).checkExists(file); | 
| 248 
3fbfce107f94
Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
244diff
changeset | 406 Assert.assertTrue(result); | 
| 
3fbfce107f94
Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
244diff
changeset | 407 Assert.assertTrue(i.exists()); | 
| 
3fbfce107f94
Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
244diff
changeset | 408 HgCatCommand cmd2 = new HgCatCommand(hgRepo).revision(i.getFileRevision()); | 
| 
3fbfce107f94
Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
244diff
changeset | 409 final ByteArrayChannel sink2 = new ByteArrayChannel(); | 
| 
3fbfce107f94
Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
244diff
changeset | 410 cmd2.execute(sink2); | 
| 
3fbfce107f94
Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
244diff
changeset | 411 System.out.println(sink2.toArray().length); | 
| 
3fbfce107f94
Issue 8: Means to find out information about given file at specific changeset. Inner ManifestRevisionInspector got promoted to ManifestRevision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
244diff
changeset | 412 Assert.assertEquals(sink.toArray().length, sink2.toArray().length); | 
| 232 
b7347daa50e3
Allow to cat a file with changeset revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
231diff
changeset | 413 } | 
| 
b7347daa50e3
Allow to cat a file with changeset revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
231diff
changeset | 414 | 
| 231 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 415 private void testMergeState() throws Exception { | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 416 final HgMergeState mergeState = hgRepo.getMergeState(); | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 417 mergeState.refresh(); | 
| 270 
c6450b0b1fd5
Avoid IAE:nullid when looking into stale merge/state file
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
254diff
changeset | 418 System.out.printf("isMerging: %s, isStale: %s.\n", mergeState.isMerging(), mergeState.isStale()); | 
| 
c6450b0b1fd5
Avoid IAE:nullid when looking into stale merge/state file
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
254diff
changeset | 419 System.out.printf("P1:%s\nP2:%s\nState parent:%s\n",mergeState.getFirstParent().shortNotation(), mergeState.getSecondParent().shortNotation(), mergeState.getStateParent().shortNotation()); | 
| 231 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 420 for (HgMergeState.Entry e : mergeState.getConflicts()) { | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 421 System.out.println(e.getState() + " " + e.getActualFile()); | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 422 System.out.println("p1: " + formatFileRevision(e.getFirstParent())); | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 423 System.out.println("p2: " + formatFileRevision(e.getSecondParent())); | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 424 System.out.println("ancestor: " + formatFileRevision(e.getCommonAncestor())); | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 425 System.out.println(); | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 426 } | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 427 } | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 428 | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 429 private static String formatFileRevision(HgFileRevision r) throws Exception { | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 430 final ByteArrayChannel sink = new ByteArrayChannel(); | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 431 r.putContentTo(sink); | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 432 return String.format("%s %s (%d bytes)", r.getPath(), r.getRevision(), sink.toArray().length); | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 433 } | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 434 | 
| 423 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 435 private void testFileStatus() throws Exception { | 
| 226 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
222diff
changeset | 436 // final Path path = Path.create("src/org/tmatesoft/hg/util/"); | 
| 229 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
226diff
changeset | 437 // final Path path = Path.create("src/org/tmatesoft/hg/internal/Experimental.java"); | 
| 231 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 438 // final Path path = Path.create("missing-dir/"); | 
| 229 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
226diff
changeset | 439 // HgWorkingCopyStatusCollector wcsc = HgWorkingCopyStatusCollector.create(hgRepo, path); | 
| 233 
1d389c0cb0a5
Optimize file history walk not to iterat over whole changelog for sparse and distant revisions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
232diff
changeset | 440 HgWorkingCopyStatusCollector wcsc = HgWorkingCopyStatusCollector.create(hgRepo, new PathGlobMatcher("mi**")); | 
| 429 
cd658b24a620
FIXMEs: javadoc, proper use of constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
427diff
changeset | 441 wcsc.walk(WORKING_COPY, new StatusDump()); | 
| 226 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
222diff
changeset | 442 } | 
| 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
222diff
changeset | 443 | 
| 236 
883300108179
Speed up branches calculation when cached branch information is available
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
235diff
changeset | 444 /* | 
| 
883300108179
Speed up branches calculation when cached branch information is available
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
235diff
changeset | 445 * Straightforward approach to collect branches, no use of branchheads.cache | 
| 
883300108179
Speed up branches calculation when cached branch information is available
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
235diff
changeset | 446 * First, single run - 18 563 | 
| 
883300108179
Speed up branches calculation when cached branch information is available
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
235diff
changeset | 447 * 10 runs (after 1 warm up) of HgBranches.collect took 167391 ms, ~17 seconds per run. | 
| 
883300108179
Speed up branches calculation when cached branch information is available
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
235diff
changeset | 448 */ | 
| 366 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 449 private void dumpBranches() throws Exception { | 
| 236 
883300108179
Speed up branches calculation when cached branch information is available
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
235diff
changeset | 450 final long start0 = System.currentTimeMillis(); | 
| 220 
8de327242aa0
Basic information about branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
197diff
changeset | 451 HgBranches b = hgRepo.getBranches(); | 
| 236 
883300108179
Speed up branches calculation when cached branch information is available
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
235diff
changeset | 452 System.out.println("1:" + (System.currentTimeMillis() - start0)); | 
| 220 
8de327242aa0
Basic information about branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
197diff
changeset | 453 for (HgBranches.BranchInfo bi : b.getAllBranches()) { | 
| 
8de327242aa0
Basic information about branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
197diff
changeset | 454 System.out.print(bi.getName()); | 
| 236 
883300108179
Speed up branches calculation when cached branch information is available
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
235diff
changeset | 455 // System.out.print(" "); | 
| 
883300108179
Speed up branches calculation when cached branch information is available
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
235diff
changeset | 456 // System.out.print(bi.getStart()); | 
| 220 
8de327242aa0
Basic information about branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
197diff
changeset | 457 System.out.print(" "); | 
| 308 
3f40262153a4
Recognize closed branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
305diff
changeset | 458 System.out.print(bi.getHeads()); | 
| 
3f40262153a4
Recognize closed branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
305diff
changeset | 459 if (bi.isClosed()) { | 
| 
3f40262153a4
Recognize closed branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
305diff
changeset | 460 System.out.print(" x "); | 
| 
3f40262153a4
Recognize closed branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
305diff
changeset | 461 } | 
| 
3f40262153a4
Recognize closed branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
305diff
changeset | 462 System.out.println(); | 
| 220 
8de327242aa0
Basic information about branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
197diff
changeset | 463 } | 
| 308 
3f40262153a4
Recognize closed branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
305diff
changeset | 464 // b.writeCache(); | 
| 236 
883300108179
Speed up branches calculation when cached branch information is available
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
235diff
changeset | 465 // final long start = System.currentTimeMillis(); | 
| 
883300108179
Speed up branches calculation when cached branch information is available
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
235diff
changeset | 466 // for (int i = 0; i < 10; i++) { | 
| 
883300108179
Speed up branches calculation when cached branch information is available
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
235diff
changeset | 467 // b.collect(ProgressSupport.Factory.get(null)); | 
| 
883300108179
Speed up branches calculation when cached branch information is available
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
235diff
changeset | 468 // } | 
| 
883300108179
Speed up branches calculation when cached branch information is available
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
235diff
changeset | 469 // System.out.println("10:" + (System.currentTimeMillis() - start)); | 
| 220 
8de327242aa0
Basic information about branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
197diff
changeset | 470 } | 
| 
8de327242aa0
Basic information about branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
197diff
changeset | 471 | 
| 157 
d5268ca7715b
Merged branch wrap-data-access into default for resource-friendly data access. Updated API to promote that friendliness to clients (channels, not byte[]). More exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
143diff
changeset | 472 private void inflaterLengthException() throws Exception { | 
| 
d5268ca7715b
Merged branch wrap-data-access into default for resource-friendly data access. Updated API to promote that friendliness to clients (channels, not byte[]). More exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
143diff
changeset | 473 HgDataFile f1 = hgRepo.getFileNode("src/com/tmate/hgkit/console/Bundle.java"); | 
| 
d5268ca7715b
Merged branch wrap-data-access into default for resource-friendly data access. Updated API to promote that friendliness to clients (channels, not byte[]). More exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
143diff
changeset | 474 HgDataFile f2 = hgRepo.getFileNode("test-repos.jar"); | 
| 
d5268ca7715b
Merged branch wrap-data-access into default for resource-friendly data access. Updated API to promote that friendliness to clients (channels, not byte[]). More exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
143diff
changeset | 475 System.out.println(f1.isCopy()); | 
| 
d5268ca7715b
Merged branch wrap-data-access into default for resource-friendly data access. Updated API to promote that friendliness to clients (channels, not byte[]). More exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
143diff
changeset | 476 System.out.println(f2.isCopy()); | 
| 
d5268ca7715b
Merged branch wrap-data-access into default for resource-friendly data access. Updated API to promote that friendliness to clients (channels, not byte[]). More exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
143diff
changeset | 477 ByteArrayChannel bac = new ByteArrayChannel(); | 
| 158 
b413b16d10a5
Integer offsets and file length explictly, rather than casts throughout code. Inflater may benefit from total length hint, but shall calculate it by its own if needed
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
157diff
changeset | 478 f1.content(1, bac); // 0: 1151, 1: 1139 | 
| 
b413b16d10a5
Integer offsets and file length explictly, rather than casts throughout code. Inflater may benefit from total length hint, but shall calculate it by its own if needed
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
157diff
changeset | 479 System.out.println(bac.toArray().length); | 
| 
b413b16d10a5
Integer offsets and file length explictly, rather than casts throughout code. Inflater may benefit from total length hint, but shall calculate it by its own if needed
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
157diff
changeset | 480 f2.content(0, bac = new ByteArrayChannel()); // 0: 14269 | 
| 157 
d5268ca7715b
Merged branch wrap-data-access into default for resource-friendly data access. Updated API to promote that friendliness to clients (channels, not byte[]). More exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
143diff
changeset | 481 System.out.println(bac.toArray().length); | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 482 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 483 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 484 private void dumpIgnored() { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 485 String[] toCheck = new String[] {"design.txt", "src/com/tmate/hgkit/ll/Changelog.java", "src/Extras.java", "bin/com/tmate/hgkit/ll/Changelog.class"}; | 
| 339 
863356c2847e
Issue 16: respect glob patterns in HgIgnore for sub-directories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
328diff
changeset | 486 HgIgnore ignore = hgRepo.getIgnore(); | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 487 for (int i = 0; i < toCheck.length; i++) { | 
| 339 
863356c2847e
Issue 16: respect glob patterns in HgIgnore for sub-directories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
328diff
changeset | 488 System.out.println("Ignored " + toCheck[i] + ": " + ignore.isIgnored(Path.create(toCheck[i]))); | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 489 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 490 } | 
| 348 
a0864b2892cd
Expose errors reading mercurial control files with exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
345diff
changeset | 491 | 
| 
a0864b2892cd
Expose errors reading mercurial control files with exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
345diff
changeset | 492 static class DirstateDump implements HgDirstate.Inspector { | 
| 
a0864b2892cd
Expose errors reading mercurial control files with exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
345diff
changeset | 493 private final char[] x = new char[] {'n', 'a', 'r', 'm' }; | 
| 
a0864b2892cd
Expose errors reading mercurial control files with exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
345diff
changeset | 494 | 
| 
a0864b2892cd
Expose errors reading mercurial control files with exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
345diff
changeset | 495 public boolean next(EntryKind kind, Record entry) { | 
| 
a0864b2892cd
Expose errors reading mercurial control files with exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
345diff
changeset | 496 System.out.printf("%c %3o%6d %30tc\t\t%s", x[kind.ordinal()], entry.mode(), entry.size(), (long) entry.modificationTime() * 1000, entry.name()); | 
| 
a0864b2892cd
Expose errors reading mercurial control files with exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
345diff
changeset | 497 if (entry.copySource() != null) { | 
| 
a0864b2892cd
Expose errors reading mercurial control files with exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
345diff
changeset | 498 System.out.printf(" --> %s", entry.copySource()); | 
| 
a0864b2892cd
Expose errors reading mercurial control files with exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
345diff
changeset | 499 } | 
| 
a0864b2892cd
Expose errors reading mercurial control files with exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
345diff
changeset | 500 System.out.println(); | 
| 
a0864b2892cd
Expose errors reading mercurial control files with exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
345diff
changeset | 501 return true; | 
| 
a0864b2892cd
Expose errors reading mercurial control files with exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
345diff
changeset | 502 } | 
| 
a0864b2892cd
Expose errors reading mercurial control files with exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
345diff
changeset | 503 } | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 504 | 
| 348 
a0864b2892cd
Expose errors reading mercurial control files with exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
345diff
changeset | 505 private void dumpDirstate() throws Exception { | 
| 
a0864b2892cd
Expose errors reading mercurial control files with exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
345diff
changeset | 506 new HgInternals(hgRepo).getDirstate().walk(new DirstateDump()); | 
| 290 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
285diff
changeset | 507 HgWorkingCopyStatusCollector wcc = HgWorkingCopyStatusCollector.create(hgRepo, new Path.Matcher.Any()); | 
| 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
285diff
changeset | 508 wcc.getDirstate().walk(new HgDirstate.Inspector() { | 
| 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
285diff
changeset | 509 | 
| 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
285diff
changeset | 510 public boolean next(EntryKind kind, Record entry) { | 
| 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
285diff
changeset | 511 System.out.printf("%s %s\n", kind, entry.name()); | 
| 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
285diff
changeset | 512 return true; | 
| 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
285diff
changeset | 513 } | 
| 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
285diff
changeset | 514 }); | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 515 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 516 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 517 | 
| 157 
d5268ca7715b
Merged branch wrap-data-access into default for resource-friendly data access. Updated API to promote that friendliness to clients (channels, not byte[]). More exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
143diff
changeset | 518 private void catCompleteHistory() throws Exception { | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 519 DigestHelper dh = new DigestHelper(); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 520 for (String fname : cmdLineOpts.getList("")) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 521 System.out.println(fname); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 522 HgDataFile fn = hgRepo.getFileNode(fname); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 523 if (fn.exists()) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 524 int total = fn.getRevisionCount(); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 525 System.out.printf("Total revisions: %d\n", total); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 526 for (int i = 0; i < total; i++) { | 
| 157 
d5268ca7715b
Merged branch wrap-data-access into default for resource-friendly data access. Updated API to promote that friendliness to clients (channels, not byte[]). More exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
143diff
changeset | 527 ByteArrayChannel sink = new ByteArrayChannel(); | 
| 
d5268ca7715b
Merged branch wrap-data-access into default for resource-friendly data access. Updated API to promote that friendliness to clients (channels, not byte[]). More exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
143diff
changeset | 528 fn.content(i, sink); | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 529 System.out.println("==========>"); | 
| 157 
d5268ca7715b
Merged branch wrap-data-access into default for resource-friendly data access. Updated API to promote that friendliness to clients (channels, not byte[]). More exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
143diff
changeset | 530 byte[] content = sink.toArray(); | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 531 System.out.println(new String(content)); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 532 int[] parentRevisions = new int[2]; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 533 byte[] parent1 = new byte[20]; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 534 byte[] parent2 = new byte[20]; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 535 fn.parents(i, parentRevisions, parent1, parent2); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 536 System.out.println(dh.sha1(parent1, parent2, content).asHexString()); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 537 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 538 } else { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 539 System.out.println(">>>Not found!"); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 540 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 541 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 542 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 543 | 
| 366 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 544 private void dumpCompleteManifestLow() throws Exception { | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 545 hgRepo.getManifest().walk(0, TIP, new ManifestDump()); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 546 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 547 | 
| 424 
6437d261048a
Deprecated code removed
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
423diff
changeset | 548 public static final class ManifestDump implements HgManifest.Inspector { | 
| 222 
373e07cd3991
Due to discrepancy in manifest and changelor indexes, wrong manifest revisions got cached and compared
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
220diff
changeset | 549 public boolean begin(int manifestRevision, Nodeid nid, int changelogRevision) { | 
| 
373e07cd3991
Due to discrepancy in manifest and changelor indexes, wrong manifest revisions got cached and compared
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
220diff
changeset | 550 System.out.printf("%d : %s\n", manifestRevision, nid); | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 551 return true; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 552 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 553 | 
| 285 
6dbbc53fc46d
Use Path instead of plain String for manifest file names
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
281diff
changeset | 554 public boolean next(Nodeid nid, Path fname, Flags flags) { | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 555 System.out.println(nid + "\t" + fname + "\t\t" + flags); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 556 return true; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 557 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 558 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 559 public boolean end(int revision) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 560 System.out.println(); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 561 return true; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 562 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 563 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 564 | 
| 366 
189dc6dc1c3e
Use exceptions to expose errors reading mercurial data
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
362diff
changeset | 565 private void dumpCompleteManifestHigh() throws Exception { | 
| 427 
31a89587eb04
FIXMEs: consistent names, throws for commands and their handlers. Use of checked exceptions in hi-level api
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
426diff
changeset | 566 new HgManifestCommand(hgRepo).dirs(true).execute(new HgManifestHandler() { | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 567 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 568 public void begin(Nodeid manifestRevision) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 569 System.out.println(">> " + manifestRevision); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 570 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 571 public void dir(Path p) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 572 System.out.println(p); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 573 } | 
| 249 
4c3b9f679412
Deprecated HgLogCommand.FileRevision gone, top-level HgFileRevision is bright and shiny replacement
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
248diff
changeset | 574 public void file(HgFileRevision fileRevision) { | 
| 423 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 575 System.out.print(fileRevision.getRevision());; | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 576 System.out.print(" "); | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 577 System.out.printf("%s %s", fileRevision.getParents().first().shortNotation(), fileRevision.getParents().second().shortNotation()); | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 578 System.out.print(" "); | 
| 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
417diff
changeset | 579 System.out.println(fileRevision.getPath()); | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 580 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 581 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 582 public void end(Nodeid manifestRevision) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 583 System.out.println(); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 584 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 585 }); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 586 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 587 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 588 private void bunchOfTests() throws Exception { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 589 final StatusDump dump = new StatusDump(); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 590 dump.showIgnored = false; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 591 dump.showClean = false; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 592 HgStatusCollector sc = new HgStatusCollector(hgRepo); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 593 final int r1 = 0, r2 = 3; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 594 System.out.printf("Status for changes between revision %d and %d:\n", r1, r2); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 595 sc.walk(r1, r2, dump); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 596 // | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 597 System.out.println("\n\nSame, but sorted in the way hg status does:"); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 598 HgStatusCollector.Record r = sc.status(r1, r2); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 599 sortAndPrint('M', r.getModified(), null); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 600 sortAndPrint('A', r.getAdded(), null); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 601 sortAndPrint('R', r.getRemoved(), null); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 602 // | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 603 System.out.println("\n\nTry hg status --change <rev>:"); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 604 sc.change(0, dump); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 605 System.out.println("\nStatus against working dir:"); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 606 HgWorkingCopyStatusCollector wcc = new HgWorkingCopyStatusCollector(hgRepo); | 
| 429 
cd658b24a620
FIXMEs: javadoc, proper use of constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
427diff
changeset | 607 wcc.walk(WORKING_COPY, dump); | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 608 System.out.println(); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 609 System.out.printf("Manifest of the revision %d:\n", r2); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 610 hgRepo.getManifest().walk(r2, r2, new ManifestDump()); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 611 System.out.println(); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 612 System.out.printf("\nStatus of working dir against %d:\n", r2); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 613 r = wcc.status(r2); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 614 sortAndPrint('M', r.getModified(), null); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 615 sortAndPrint('A', r.getAdded(), r.getCopied()); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 616 sortAndPrint('R', r.getRemoved(), null); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 617 sortAndPrint('?', r.getUnknown(), null); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 618 sortAndPrint('I', r.getIgnored(), null); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 619 sortAndPrint('C', r.getClean(), null); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 620 sortAndPrint('!', r.getMissing(), null); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 621 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 622 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 623 private void sortAndPrint(char prefix, List<Path> ul, Map<Path, Path> copies) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 624 ArrayList<Path> sortList = new ArrayList<Path>(ul); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 625 Collections.sort(sortList); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 626 for (Path s : sortList) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 627 System.out.print(prefix); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 628 System.out.print(' '); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 629 System.out.println(s); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 630 if (copies != null && copies.containsKey(s)) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 631 System.out.println(" " + copies.get(s)); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 632 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 633 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 634 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 635 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 636 | 
| 354 
5f9073eabf06
Propagate errors with exceptions up to a end client
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
350diff
changeset | 637 private void testStatusInternals() throws HgException { | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 638 HgDataFile n = hgRepo.getFileNode(Path.create("design.txt")); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 639 for (String s : new String[] {"011dfd44417c72bd9e54cf89b82828f661b700ed", "e5529faa06d53e06a816e56d218115b42782f1ba", "c18e7111f1fc89a80a00f6a39d51288289a382fc"}) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 640 // expected: 359, 2123, 3079 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 641 byte[] b = s.getBytes(); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 642 final Nodeid nid = Nodeid.fromAscii(b, 0, b.length); | 
| 416 
d30083c80d52
Better names - non-confusing and aligned with the rest of API
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
415diff
changeset | 643 System.out.println(s + " : " + n.getLength(nid)); | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 644 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 645 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 646 | 
| 197 
3a7696fb457c
Investigate optimization options to allow fast processing of huge repositories. Fix defect in StatusCollector that lead to wrong result comparing first revision to empty repo (-1 to 0), due to same TIP constant value
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
158diff
changeset | 647 static void force_gc() { | 
| 
3a7696fb457c
Investigate optimization options to allow fast processing of huge repositories. Fix defect in StatusCollector that lead to wrong result comparing first revision to empty repo (-1 to 0), due to same TIP constant value
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
158diff
changeset | 648 Runtime.getRuntime().runFinalization(); | 
| 
3a7696fb457c
Investigate optimization options to allow fast processing of huge repositories. Fix defect in StatusCollector that lead to wrong result comparing first revision to empty repo (-1 to 0), due to same TIP constant value
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
158diff
changeset | 649 Runtime.getRuntime().gc(); | 
| 
3a7696fb457c
Investigate optimization options to allow fast processing of huge repositories. Fix defect in StatusCollector that lead to wrong result comparing first revision to empty repo (-1 to 0), due to same TIP constant value
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
158diff
changeset | 650 Thread.yield(); | 
| 
3a7696fb457c
Investigate optimization options to allow fast processing of huge repositories. Fix defect in StatusCollector that lead to wrong result comparing first revision to empty repo (-1 to 0), due to same TIP constant value
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
158diff
changeset | 651 Runtime.getRuntime().runFinalization(); | 
| 
3a7696fb457c
Investigate optimization options to allow fast processing of huge repositories. Fix defect in StatusCollector that lead to wrong result comparing first revision to empty repo (-1 to 0), due to same TIP constant value
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
158diff
changeset | 652 Runtime.getRuntime().gc(); | 
| 
3a7696fb457c
Investigate optimization options to allow fast processing of huge repositories. Fix defect in StatusCollector that lead to wrong result comparing first revision to empty repo (-1 to 0), due to same TIP constant value
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
158diff
changeset | 653 Thread.yield(); | 
| 
3a7696fb457c
Investigate optimization options to allow fast processing of huge repositories. Fix defect in StatusCollector that lead to wrong result comparing first revision to empty repo (-1 to 0), due to same TIP constant value
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
158diff
changeset | 654 } | 
| 
3a7696fb457c
Investigate optimization options to allow fast processing of huge repositories. Fix defect in StatusCollector that lead to wrong result comparing first revision to empty repo (-1 to 0), due to same TIP constant value
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
158diff
changeset | 655 | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 656 private static class StatusDump implements HgStatusInspector { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 657 public boolean hideStatusPrefix = false; // hg status -n option | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 658 public boolean showCopied = true; // -C | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 659 public boolean showIgnored = true; // -i | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 660 public boolean showClean = true; // -c | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 661 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 662 public void modified(Path fname) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 663 print('M', fname); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 664 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 665 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 666 public void added(Path fname) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 667 print('A', fname); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 668 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 669 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 670 public void copied(Path fnameOrigin, Path fnameAdded) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 671 added(fnameAdded); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 672 if (showCopied) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 673 print(' ', fnameOrigin); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 674 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 675 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 676 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 677 public void removed(Path fname) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 678 print('R', fname); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 679 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 680 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 681 public void clean(Path fname) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 682 if (showClean) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 683 print('C', fname); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 684 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 685 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 686 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 687 public void missing(Path fname) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 688 print('!', fname); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 689 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 690 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 691 public void unknown(Path fname) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 692 print('?', fname); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 693 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 694 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 695 public void ignored(Path fname) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 696 if (showIgnored) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 697 print('I', fname); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 698 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 699 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 700 | 
| 360 
150500515714
Report non-critical errors during status operation to handler/inspector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
354diff
changeset | 701 public void invalid(Path fname, Exception ex) { | 
| 
150500515714
Report non-critical errors during status operation to handler/inspector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
354diff
changeset | 702 System.out.printf("FAILURE: %s\n", fname); | 
| 
150500515714
Report non-critical errors during status operation to handler/inspector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
354diff
changeset | 703 ex.printStackTrace(System.out); | 
| 
150500515714
Report non-critical errors during status operation to handler/inspector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
354diff
changeset | 704 } | 
| 
150500515714
Report non-critical errors during status operation to handler/inspector
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
354diff
changeset | 705 | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 706 private void print(char status, Path fname) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 707 if (!hideStatusPrefix) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 708 System.out.print(status); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 709 System.out.print(' '); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 710 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 711 System.out.println(fname); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 712 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 713 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 714 } | 
