Mercurial > hg4j
annotate cmdline/org/tmatesoft/hg/console/Main.java @ 309:962f78aac342
Branch with few children forked shall not ignore other children once one of them is processed
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Sat, 24 Sep 2011 13:02:48 +0200 | 
| parents | 3f40262153a4 | 
| children | 09628675bcee | 
| 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 /* | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 2 * Copyright (c) 2011 TMate Software Ltd | 
| 
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; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 20 | 
| 254 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 21 import java.io.File; | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 22 import java.util.ArrayList; | 
| 305 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 23 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 | 24 import java.util.Collections; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 25 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 | 26 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 | 27 | 
| 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 | 28 import org.junit.Assert; | 
| 285 
6dbbc53fc46d
Use Path instead of plain String for manifest file names
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
281diff
changeset | 29 import org.tmatesoft.hg.core.HgBadStateException; | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 30 import org.tmatesoft.hg.core.HgCatCommand; | 
| 275 
6d1804fe0ed7
Issue 10: Report file content length with respect of metadata. Respect dirstate parents for WC's status. Exceptions to keep useful attributes of the location
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
270diff
changeset | 31 import org.tmatesoft.hg.core.HgDataStreamException; | 
| 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 | 32 import org.tmatesoft.hg.core.HgFileInformer; | 
| 231 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 33 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 | 34 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 | 35 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 | 36 import org.tmatesoft.hg.core.Nodeid; | 
| 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 | 37 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 | 38 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 | 39 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 | 40 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 | 41 import org.tmatesoft.hg.internal.StreamLogFacility; | 
| 220 
8de327242aa0
Basic information about branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
197diff
changeset | 42 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 | 43 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 | 44 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 | 45 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 | 46 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 | 47 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 | 48 import org.tmatesoft.hg.repo.HgDirstate.Record; | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 49 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 | 50 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 | 51 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 | 52 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 | 53 import org.tmatesoft.hg.repo.HgRepository; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 54 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 | 55 import org.tmatesoft.hg.repo.HgStatusInspector; | 
| 239 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 56 import org.tmatesoft.hg.repo.HgSubrepoLocation; | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 57 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 | 58 import org.tmatesoft.hg.repo.HgWorkingCopyStatusCollector; | 
| 254 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 59 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 | 60 import org.tmatesoft.hg.util.LogFacility; | 
| 235 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 61 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 | 62 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 | 63 import org.tmatesoft.hg.util.PathRewrite; | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 64 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 65 /** | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 66 * Various debug dumps. | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 67 * | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 68 * @author Artem Tikhomirov | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 69 * @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 | 70 */ | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 71 @SuppressWarnings("unused") | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 72 public class Main { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 73 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 74 private Options cmdLineOpts; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 75 private HgRepository hgRepo; | 
| 
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 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 | 78 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 | 79 hgRepo = cmdLineOpts.findRepository(); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 80 if (hgRepo.isInvalid()) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 81 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 | 82 return; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 83 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 84 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 | 85 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 86 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 87 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 | 88 Main m = new Main(args); | 
| 308 
3f40262153a4
Recognize closed branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
305diff
changeset | 89 // m.buildFileLog(); | 
| 305 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 90 // m.testConsoleLog(); | 
| 270 
c6450b0b1fd5
Avoid IAE:nullid when looking into stale merge/state file
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
254diff
changeset | 91 // 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 | 92 // m.testRevisionMap(); | 
| 242 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 93 // m.testSubrepos(); | 
| 239 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 94 // m.testReadWorkingCopy(); | 
| 254 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 95 // m.testParents(); | 
| 243 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 96 // m.testEffectiveFileLog(); | 
| 252 
a6d19adc2636
HgRepository.getWorkingCopyBranchName() to retrieve branch associated with working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
249diff
changeset | 97 // m.testCatAtCsetRevision(); | 
| 290 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
285diff
changeset | 98 // m.testMergeState(); | 
| 231 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 99 // m.testFileStatus(); | 
| 308 
3f40262153a4
Recognize closed branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
305diff
changeset | 100 m.dumpBranches(); | 
| 220 
8de327242aa0
Basic information about branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
197diff
changeset | 101 // 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 | 102 // m.dumpIgnored(); | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 103 // 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 | 104 // 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 | 105 // 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 | 106 // m.dumpCompleteManifestLow(); | 
| 
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 | 107 // m.dumpCompleteManifestHigh(); | 
| 
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 | 108 // 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 | 109 } | 
| 305 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 110 | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 111 private void buildFileLog() { | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 112 final HgDataFile fn = hgRepo.getFileNode("file1"); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 113 HgDataFile.HistoryWalker hw = fn.history(); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 114 while (hw.hasNext()) { | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 115 hw.next(); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 116 StringBuilder sb = new StringBuilder(); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 117 Collection<Nodeid> children = hw.childChangesets(); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 118 for (Nodeid cc : children) { | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 119 sb.append(cc.shortNotation()); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 120 sb.append(", "); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 121 } | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 122 if (hw.isJoin()) { | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 123 final Pair<Nodeid, Nodeid> parents = hw.parentChangesets(); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 124 System.out.printf("join[(%s, %s) => %s]\n", parents.first().shortNotation(), parents.second().shortNotation(), hw.changesetRevision().shortNotation()); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 125 } | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 126 if (hw.isFork()) { | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 127 System.out.printf("fork[%s => %s]\n", hw.changesetRevision().shortNotation(), sb); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 128 } | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 129 if (!hw.isFork() && !hw.isJoin() && !children.isEmpty()) { | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 130 System.out.printf("%s => %s\n", hw.changesetRevision().shortNotation(), sb); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 131 } | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 132 } | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 133 } | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 134 | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 135 private void buildFileLogOld() { | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 136 final HgDataFile fn = hgRepo.getFileNode("file1"); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 137 final int[] fileChangesetRevisions = new int[fn.getRevisionCount()]; | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 138 fn.history(new HgChangelog.Inspector() { | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 139 private int fileLocalRevisions = 0; | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 140 private int[] parentRevisions = new int[2]; | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 141 | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 142 public void next(int revisionNumber, Nodeid nodeid, RawChangeset cset) { | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 143 fileChangesetRevisions[fileLocalRevisions] = revisionNumber; | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 144 fn.parents(fileLocalRevisions, parentRevisions, null, null); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 145 boolean join = parentRevisions[0] != -1 && parentRevisions[1] != -1; | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 146 if (join) { | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 147 System.out.print("join["); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 148 } | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 149 if (parentRevisions[0] != -1) { | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 150 System.out.printf("%2d->%2d, ", fileChangesetRevisions[parentRevisions[0]], revisionNumber); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 151 } | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 152 if (parentRevisions[1] != -1) { | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 153 System.out.printf("%2d->%2d, ", fileChangesetRevisions[parentRevisions[1]], revisionNumber); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 154 } | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 155 if (join) { | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 156 System.out.print("]"); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 157 } | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 158 fileLocalRevisions++; | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 159 } | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 160 }); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 161 System.out.println(); | 
| 
ae8d116f4ee2
Experimental code to build file history
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
299diff
changeset | 162 } | 
| 243 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 163 | 
| 295 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 164 private void testConsoleLog() { | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 165 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 | 166 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 | 167 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 | 168 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 | 169 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 | 170 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 | 171 Exception ex = new Exception(); | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 172 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 | 173 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 | 174 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 | 175 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 | 176 } | 
| 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
290diff
changeset | 177 | 
| 254 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 178 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 | 179 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 | 180 Path.Source pathSrc = new Path.SimpleSource(new PathRewrite.Composite(new RelativePathRewrite(repoRoot), hgRepo.getToRepoPathHelper())); | 
| 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 181 FileWalker w = new FileWalker(repoRoot, pathSrc); | 
| 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 182 int count = 0; | 
| 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 183 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 | 184 while (w.hasNext()) { | 
| 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 185 count++; | 
| 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 186 w.next(); | 
| 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 187 } | 
| 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 188 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 | 189 } | 
| 
a620f0663a37
Collect tags for a file - improve performance of 'sparse' manifest reads
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
253diff
changeset | 190 | 
| 243 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 191 /* | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 192 * cpython repo with 70715 revisions. | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 193 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 | 194 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 | 195 5 revisions - 94 vs 266. | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 196 complete iteration in changelog.getLocalRevision(tipNodeid) takes 47 ms | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 197 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 | 198 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 | 199 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 | 200 queries | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 201 */ | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 202 private void testRevisionMap() throws Exception { | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 203 HgChangelog changelog = hgRepo.getChangelog(); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 204 HgChangelog.RevisionMap rmap = changelog.new RevisionMap().init(); // warm-up, ensure complete file read | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 205 int tip = changelog.getLastRevision(); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 206 // 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 | 207 final Nodeid[] revs = new Nodeid[5]; | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 208 revs[4] = changelog.getRevision(0); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 209 revs[3] = changelog.getRevision(tip / 4); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 210 revs[2] = changelog.getRevision(tip / 2); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 211 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 | 212 revs[0] = changelog.getRevision(tip); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 213 long start = System.currentTimeMillis(); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 214 for (int i = 0; i < revs.length; i++) { | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 215 final int localRev = changelog.getLocalRevision(revs[i]); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 216 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 | 217 } | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 218 System.out.println(System.currentTimeMillis() - start); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 219 System.out.println(); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 220 // | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 221 start = System.currentTimeMillis(); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 222 rmap = changelog.new RevisionMap().init(); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 223 long s2 = System.currentTimeMillis(); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 224 for (int i = 0; i < revs.length; i++) { | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 225 final int localRev = rmap.localRevision(revs[i]); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 226 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 | 227 } | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 228 System.out.println(System.currentTimeMillis() - start); | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 229 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 | 230 | 
| 
0e01f9182e16
External cache Nodeid<->int added, Revlog.RevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
242diff
changeset | 231 } | 
| 239 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 232 | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 233 private void testSubrepos() throws Exception { | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 234 for (HgSubrepoLocation l : hgRepo.getSubrepositories()) { | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 235 System.out.println(l.getLocation()); | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 236 System.out.println(l.getSource()); | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 237 System.out.println(l.getType()); | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 238 System.out.println(l.isCommitted() ? l.getRevision() : "not yet committed"); | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 239 if (l.getType() == Kind.Hg) { | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 240 HgRepository r = l.getRepo(); | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 241 System.out.printf("%s has %d revisions\n", l.getLocation(), r.getChangelog().getLastRevision() + 1); | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 242 if (r.getChangelog().getLastRevision() >= 0) { | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 243 final RawChangeset c = r.getChangelog().range(TIP, TIP).get(0); | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 244 System.out.printf("TIP: %s %s %s\n", c.user(), c.dateString(), c.comment()); | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 245 } | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 246 } | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 247 } | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 248 } | 
| 
df9d2854d3d6
Initial access to subrepositories
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
237diff
changeset | 249 | 
| 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 | 250 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 | 251 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 | 252 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 | 253 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 | 254 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 | 255 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 | 256 } | 
| 
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 | 257 } | 
| 
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 | 258 | 
| 235 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 259 private void testParents() throws Exception { | 
| 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 260 // hg parents cmd | 
| 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 261 final Pair<Nodeid, Nodeid> wcParents = hgRepo.getWorkingCopyParents(); | 
| 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 262 ChangesetDumpHandler dump = new ChangesetDumpHandler(hgRepo); | 
| 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 263 HgLogCommand cmd = new HgLogCommand(hgRepo); | 
| 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 264 if (wcParents.hasFirst()) { | 
| 253 
1874d11054e5
HgLogCommand.changeset(Nodeid) to ease command configuration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
252diff
changeset | 265 cmd.changeset(wcParents.first()).execute(dump); | 
| 235 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 266 } | 
| 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 267 if (wcParents.hasSecond()) { | 
| 253 
1874d11054e5
HgLogCommand.changeset(Nodeid) to ease command configuration
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
252diff
changeset | 268 cmd.changeset(wcParents.second()).execute(dump); | 
| 235 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 269 } | 
| 252 
a6d19adc2636
HgRepository.getWorkingCopyBranchName() to retrieve branch associated with working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
249diff
changeset | 270 System.out.println("Branch:" + hgRepo.getWorkingCopyBranchName()); | 
| 235 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 271 } | 
| 
fd845a53f53d
Experimental access to working dir parents
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
233diff
changeset | 272 | 
| 242 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 273 /* | 
| 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 274 * -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 | 275 * | 
| 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 276 * -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 | 277 * 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 | 278 * 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 | 279 * 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 | 280 * 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 | 281 * HgChangelog.range() - 92 calls | 
| 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 282 * RevlogStream with separate iterate(int[] sortedRevisions,...) | 
| 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 283 * RevlogStream.ReaderN1.range(): 185 380 ms | 
| 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 284 */ | 
| 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 | 285 private void testEffectiveFileLog() { | 
| 
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 | 286 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 | 287 System.out.println(fname); | 
| 242 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 288 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 | 289 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 | 290 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 | 291 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 | 292 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 | 293 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 | 294 } | 
| 
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 | 295 }); | 
| 
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 | 296 } | 
| 242 
ad6a046943be
Improved reading of sparse revisions from a revlog
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
239diff
changeset | 297 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 | 298 } | 
| 
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 | 299 } | 
| 
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 | 300 | 
| 232 
b7347daa50e3
Allow to cat a file with changeset revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
231diff
changeset | 301 // TODO as test in TestCat | 
| 
b7347daa50e3
Allow to cat a file with changeset revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
231diff
changeset | 302 private void testCatAtCsetRevision() throws Exception { | 
| 
b7347daa50e3
Allow to cat a file with changeset revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
231diff
changeset | 303 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 | 304 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 | 305 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 | 306 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 | 307 cmd.changeset(cset); | 
| 232 
b7347daa50e3
Allow to cat a file with changeset revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
231diff
changeset | 308 final ByteArrayChannel sink = new ByteArrayChannel(); | 
| 
b7347daa50e3
Allow to cat a file with changeset revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
231diff
changeset | 309 cmd.execute(sink); | 
| 
b7347daa50e3
Allow to cat a file with changeset revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
231diff
changeset | 310 System.out.println(sink.toArray().length); | 
| 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 | 311 HgFileInformer i = new HgFileInformer(hgRepo); | 
| 
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 | 312 boolean result = i.changeset(cset).check(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 | 313 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 | 314 Assert.assertFalse(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 | 315 result = i.followRenames(true).check(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 | 316 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 | 317 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 | 318 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 | 319 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 | 320 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 | 321 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 | 322 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 | 323 } | 
| 
b7347daa50e3
Allow to cat a file with changeset revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
231diff
changeset | 324 | 
| 231 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 325 private void testMergeState() throws Exception { | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 326 final HgMergeState mergeState = hgRepo.getMergeState(); | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 327 mergeState.refresh(); | 
| 270 
c6450b0b1fd5
Avoid IAE:nullid when looking into stale merge/state file
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
254diff
changeset | 328 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 | 329 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 | 330 for (HgMergeState.Entry e : mergeState.getConflicts()) { | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 331 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 | 332 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 | 333 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 | 334 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 | 335 System.out.println(); | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 336 } | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 337 } | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 338 | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 339 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 | 340 final ByteArrayChannel sink = new ByteArrayChannel(); | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 341 r.putContentTo(sink); | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 342 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 | 343 } | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
229diff
changeset | 344 | 
| 226 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
222diff
changeset | 345 private void testFileStatus() { | 
| 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
222diff
changeset | 346 // 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 | 347 // 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 | 348 // 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 | 349 // 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 | 350 HgWorkingCopyStatusCollector wcsc = HgWorkingCopyStatusCollector.create(hgRepo, new PathGlobMatcher("mi**")); | 
| 226 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
222diff
changeset | 351 wcsc.walk(TIP, new StatusDump()); | 
| 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
222diff
changeset | 352 } | 
| 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
222diff
changeset | 353 | 
| 236 
883300108179
Speed up branches calculation when cached branch information is available
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
235diff
changeset | 354 /* | 
| 
883300108179
Speed up branches calculation when cached branch information is available
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
235diff
changeset | 355 * 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 | 356 * 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 | 357 * 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 | 358 */ | 
| 220 
8de327242aa0
Basic information about branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
197diff
changeset | 359 private void dumpBranches() { | 
| 236 
883300108179
Speed up branches calculation when cached branch information is available
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
235diff
changeset | 360 final long start0 = System.currentTimeMillis(); | 
| 220 
8de327242aa0
Basic information about branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
197diff
changeset | 361 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 | 362 System.out.println("1:" + (System.currentTimeMillis() - start0)); | 
| 220 
8de327242aa0
Basic information about branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
197diff
changeset | 363 for (HgBranches.BranchInfo bi : b.getAllBranches()) { | 
| 
8de327242aa0
Basic information about branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
197diff
changeset | 364 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 | 365 // System.out.print(" "); | 
| 
883300108179
Speed up branches calculation when cached branch information is available
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
235diff
changeset | 366 // System.out.print(bi.getStart()); | 
| 220 
8de327242aa0
Basic information about branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
197diff
changeset | 367 System.out.print(" "); | 
| 308 
3f40262153a4
Recognize closed branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
305diff
changeset | 368 System.out.print(bi.getHeads()); | 
| 
3f40262153a4
Recognize closed branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
305diff
changeset | 369 if (bi.isClosed()) { | 
| 
3f40262153a4
Recognize closed branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
305diff
changeset | 370 System.out.print(" x "); | 
| 
3f40262153a4
Recognize closed branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
305diff
changeset | 371 } | 
| 
3f40262153a4
Recognize closed branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
305diff
changeset | 372 System.out.println(); | 
| 220 
8de327242aa0
Basic information about branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
197diff
changeset | 373 } | 
| 308 
3f40262153a4
Recognize closed branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
305diff
changeset | 374 // b.writeCache(); | 
| 236 
883300108179
Speed up branches calculation when cached branch information is available
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
235diff
changeset | 375 // 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 | 376 // 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 | 377 // 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 | 378 // } | 
| 
883300108179
Speed up branches calculation when cached branch information is available
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
235diff
changeset | 379 // System.out.println("10:" + (System.currentTimeMillis() - start)); | 
| 220 
8de327242aa0
Basic information about branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
197diff
changeset | 380 } | 
| 
8de327242aa0
Basic information about branches
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
197diff
changeset | 381 | 
| 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 | 382 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 | 383 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 | 384 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 | 385 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 | 386 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 | 387 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 | 388 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 | 389 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 | 390 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 | 391 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 | 392 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 393 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 394 private void dumpIgnored() { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 395 HgInternals debug = new HgInternals(hgRepo); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 396 String[] toCheck = new String[] {"design.txt", "src/com/tmate/hgkit/ll/Changelog.java", "src/Extras.java", "bin/com/tmate/hgkit/ll/Changelog.class"}; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 397 boolean[] checkResult = debug.checkIgnored(toCheck); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 398 for (int i = 0; i < toCheck.length; i++) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 399 System.out.println("Ignored " + toCheck[i] + ": " + checkResult[i]); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 400 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 401 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 402 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 403 private void dumpDirstate() { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 404 new HgInternals(hgRepo).dumpDirstate(); | 
| 290 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
285diff
changeset | 405 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 | 406 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 | 407 | 
| 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
285diff
changeset | 408 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 | 409 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 | 410 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 | 411 } | 
| 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
285diff
changeset | 412 }); | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 413 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 414 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 415 | 
| 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 | 416 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 | 417 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 | 418 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 | 419 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 | 420 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 | 421 if (fn.exists()) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 422 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 | 423 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 | 424 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 | 425 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 | 426 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 | 427 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 | 428 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 | 429 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 | 430 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 | 431 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 | 432 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 | 433 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 | 434 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 | 435 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 436 } else { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 437 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 | 438 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 439 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 440 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 441 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 442 private void dumpCompleteManifestLow() { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 443 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 | 444 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 445 | 
| 285 
6dbbc53fc46d
Use Path instead of plain String for manifest file names
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
281diff
changeset | 446 public static final class ManifestDump implements HgManifest.Inspector2 { | 
| 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 | 447 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 | 448 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 | 449 return true; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 450 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 451 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 452 public boolean next(Nodeid nid, String fname, String flags) { | 
| 285 
6dbbc53fc46d
Use Path instead of plain String for manifest file names
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
281diff
changeset | 453 throw new HgBadStateException(HgManifest.Inspector2.class.getName()); | 
| 
6dbbc53fc46d
Use Path instead of plain String for manifest file names
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
281diff
changeset | 454 } | 
| 
6dbbc53fc46d
Use Path instead of plain String for manifest file names
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
281diff
changeset | 455 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 | 456 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 | 457 return true; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 458 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 459 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 460 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 | 461 System.out.println(); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 462 return true; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 463 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 464 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 465 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 466 private void dumpCompleteManifestHigh() { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 467 new HgManifestCommand(hgRepo).dirs(true).execute(new HgManifestCommand.Handler() { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 468 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 469 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 | 470 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 | 471 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 472 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 | 473 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 | 474 } | 
| 249 
4c3b9f679412
Deprecated HgLogCommand.FileRevision gone, top-level HgFileRevision is bright and shiny replacement
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
248diff
changeset | 475 public void file(HgFileRevision fileRevision) { | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 476 System.out.print(fileRevision.getRevision());; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 477 System.out.print(" "); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 478 System.out.println(fileRevision.getPath()); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 479 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 480 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 481 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 | 482 System.out.println(); | 
| 
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 }); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 485 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 486 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 487 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 | 488 HgInternals debug = new HgInternals(hgRepo); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 489 debug.dumpDirstate(); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 490 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 | 491 dump.showIgnored = false; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 492 dump.showClean = false; | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 493 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 | 494 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 | 495 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 | 496 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 | 497 // | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 498 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 | 499 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 | 500 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 | 501 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 | 502 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 | 503 // | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 504 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 | 505 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 | 506 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 | 507 HgWorkingCopyStatusCollector wcc = new HgWorkingCopyStatusCollector(hgRepo); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 508 wcc.walk(TIP, dump); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 509 System.out.println(); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 510 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 | 511 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 | 512 System.out.println(); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 513 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 | 514 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 | 515 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 | 516 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 | 517 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 | 518 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 | 519 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 | 520 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 | 521 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 | 522 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 523 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 524 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 | 525 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 | 526 Collections.sort(sortList); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 527 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 | 528 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 | 529 System.out.print(' '); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 530 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 | 531 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 | 532 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 | 533 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 534 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 535 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 536 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 537 | 
| 275 
6d1804fe0ed7
Issue 10: Report file content length with respect of metadata. Respect dirstate parents for WC's status. Exceptions to keep useful attributes of the location
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
270diff
changeset | 538 private void testStatusInternals() throws HgDataStreamException { | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 539 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 | 540 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 | 541 // 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 | 542 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 | 543 final Nodeid nid = Nodeid.fromAscii(b, 0, b.length); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 544 System.out.println(s + " : " + n.length(nid)); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 545 } | 
| 
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 | 
| 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 | 548 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 | 549 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 | 550 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 | 551 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 | 552 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 | 553 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 | 554 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 | 555 } | 
| 
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 | 556 | 
| 143 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 557 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 | 558 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 | 559 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 | 560 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 | 561 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 | 562 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 563 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 | 564 print('M', fname); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 565 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 566 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 567 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 | 568 print('A', fname); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 569 } | 
| 
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 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 | 572 added(fnameAdded); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 573 if (showCopied) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 574 print(' ', fnameOrigin); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 575 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 576 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 577 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 578 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 | 579 print('R', fname); | 
| 
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 clean(Path fname) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 583 if (showClean) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 584 print('C', fname); | 
| 
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 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 | 589 print('!', fname); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 590 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 591 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 592 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 | 593 print('?', fname); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 594 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 595 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 596 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 | 597 if (showIgnored) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 598 print('I', fname); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 599 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 600 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 601 | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 602 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 | 603 if (!hideStatusPrefix) { | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 604 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 | 605 System.out.print(' '); | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 606 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 607 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 | 608 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 609 } | 
| 
b9700740553a
Command line tools parse and respect most of command-line arguments
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 610 } | 
