Mercurial > jhg
annotate cmdline/org/tmatesoft/hg/console/Manifest.java @ 670:52af7f62e731
AIOOBE in BundleGenerator.ChunkGenerator.iterate when there are no outgoing changes on push
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Fri, 12 Jul 2013 15:27:43 +0200 | 
| parents | 6526d8adbc0f | 
| children | 
| rev | line source | 
|---|---|
| 
13
 
df8c67f3006a
Basic manifest parsing to analyze what's in there
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
1 /* | 
| 
628
 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
457 
diff
changeset
 | 
2 * Copyright (c) 2010-2013 TMate Software Ltd | 
| 
72
 
9a03a80a0f2f
Command-line frontend moved to separate source root with new package statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
64 
diff
changeset
 | 
3 * | 
| 
 
9a03a80a0f2f
Command-line frontend moved to separate source root with new package statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
64 
diff
changeset
 | 
4 * This program is free software; you can redistribute it and/or modify | 
| 
 
9a03a80a0f2f
Command-line frontend moved to separate source root with new package statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
64 
diff
changeset
 | 
5 * it under the terms of the GNU General Public License as published by | 
| 
 
9a03a80a0f2f
Command-line frontend moved to separate source root with new package statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
64 
diff
changeset
 | 
6 * the Free Software Foundation; version 2 of the License. | 
| 
 
9a03a80a0f2f
Command-line frontend moved to separate source root with new package statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
64 
diff
changeset
 | 
7 * | 
| 
 
9a03a80a0f2f
Command-line frontend moved to separate source root with new package statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
64 
diff
changeset
 | 
8 * This program is distributed in the hope that it will be useful, | 
| 
 
9a03a80a0f2f
Command-line frontend moved to separate source root with new package statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
64 
diff
changeset
 | 
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 
 
9a03a80a0f2f
Command-line frontend moved to separate source root with new package statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
64 
diff
changeset
 | 
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| 
 
9a03a80a0f2f
Command-line frontend moved to separate source root with new package statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
64 
diff
changeset
 | 
11 * GNU General Public License for more details. | 
| 
 
9a03a80a0f2f
Command-line frontend moved to separate source root with new package statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
64 
diff
changeset
 | 
12 * | 
| 
 
9a03a80a0f2f
Command-line frontend moved to separate source root with new package statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
64 
diff
changeset
 | 
13 * For information on how to redistribute this software under | 
| 
 
9a03a80a0f2f
Command-line frontend moved to separate source root with new package statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
64 
diff
changeset
 | 
14 * the terms of a license other than GNU General Public License | 
| 
102
 
a3a2e5deb320
Updated contact address to support@hg4j.com
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
74 
diff
changeset
 | 
15 * contact TMate Software at support@hg4j.com | 
| 
13
 
df8c67f3006a
Basic manifest parsing to analyze what's in there
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
16 */ | 
| 
72
 
9a03a80a0f2f
Command-line frontend moved to separate source root with new package statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
64 
diff
changeset
 | 
17 package org.tmatesoft.hg.console; | 
| 
13
 
df8c67f3006a
Basic manifest parsing to analyze what's in there
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
18 | 
| 
299
 
45dc79e545f5
Recognize flag options (options with no arguments) in command line sample apps
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
249 
diff
changeset
 | 
19 import static org.tmatesoft.hg.console.Options.asSet; | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
72 
diff
changeset
 | 
20 import static org.tmatesoft.hg.repo.HgRepository.TIP; | 
| 
19
 
40532cdc92fc
Inspector (visitor) for manifest
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
13 
diff
changeset
 | 
21 | 
| 
427
 
31a89587eb04
FIXMEs: consistent names, throws for commands and their handlers. Use of checked exceptions in hi-level api
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
423 
diff
changeset
 | 
22 import org.tmatesoft.hg.core.HgManifestHandler; | 
| 
249
 
4c3b9f679412
Deprecated HgLogCommand.FileRevision gone, top-level HgFileRevision is bright and shiny replacement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
143 
diff
changeset
 | 
23 import org.tmatesoft.hg.core.HgFileRevision; | 
| 
143
 
b9700740553a
Command line tools parse and respect most of command-line arguments
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
24 import org.tmatesoft.hg.core.HgManifestCommand; | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
72 
diff
changeset
 | 
25 import org.tmatesoft.hg.core.Nodeid; | 
| 
423
 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
415 
diff
changeset
 | 
26 import org.tmatesoft.hg.repo.HgInvalidControlFileException; | 
| 
 
9c9c442b5f2e
Major refactoring of exception handling. Low-level API uses RuntimeExceptions, while checked are left for higher level
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
415 
diff
changeset
 | 
27 import org.tmatesoft.hg.repo.HgInvalidRevisionException; | 
| 
415
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
28 import org.tmatesoft.hg.repo.HgManifest; | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
72 
diff
changeset
 | 
29 import org.tmatesoft.hg.repo.HgRepository; | 
| 
628
 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
457 
diff
changeset
 | 
30 import org.tmatesoft.hg.repo.HgRuntimeException; | 
| 
133
 
4a948ec83980
core.Path to util.Path as it's not Hg repo dependant
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
131 
diff
changeset
 | 
31 import org.tmatesoft.hg.util.Path; | 
| 
64
 
19e9e220bf68
Convenient commands constitute hi-level API. org.tmatesoft namespace, GPL2 statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
22 
diff
changeset
 | 
32 | 
| 
13
 
df8c67f3006a
Basic manifest parsing to analyze what's in there
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
33 | 
| 
 
df8c67f3006a
Basic manifest parsing to analyze what's in there
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
34 /** | 
| 
 
df8c67f3006a
Basic manifest parsing to analyze what's in there
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
35 * | 
| 
72
 
9a03a80a0f2f
Command-line frontend moved to separate source root with new package statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
64 
diff
changeset
 | 
36 * @author Artem Tikhomirov | 
| 
 
9a03a80a0f2f
Command-line frontend moved to separate source root with new package statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
64 
diff
changeset
 | 
37 * @author TMate Software Ltd. | 
| 
13
 
df8c67f3006a
Basic manifest parsing to analyze what's in there
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
38 */ | 
| 
 
df8c67f3006a
Basic manifest parsing to analyze what's in there
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
39 public class Manifest { | 
| 
 
df8c67f3006a
Basic manifest parsing to analyze what's in there
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
40 | 
| 
 
df8c67f3006a
Basic manifest parsing to analyze what's in there
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
41 public static void 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: 
249 
diff
changeset
 | 
42 Options cmdLineOpts = Options.parse(args, asSet("--debug", "-v", "--verbose")); | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
72 
diff
changeset
 | 
43 HgRepository hgRepo = cmdLineOpts.findRepository(); | 
| 
13
 
df8c67f3006a
Basic manifest parsing to analyze what's in there
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
44 if (hgRepo.isInvalid()) { | 
| 
 
df8c67f3006a
Basic manifest parsing to analyze what's in there
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
45 System.err.printf("Can't find repository in: %s\n", hgRepo.getLocation()); | 
| 
 
df8c67f3006a
Basic manifest parsing to analyze what's in there
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
46 return; | 
| 
 
df8c67f3006a
Basic manifest parsing to analyze what's in there
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
47 } | 
| 
143
 
b9700740553a
Command line tools parse and respect most of command-line arguments
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
48 final boolean debug = cmdLineOpts.getBoolean("--debug"); | 
| 
 
b9700740553a
Command line tools parse and respect most of command-line arguments
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
49 final boolean verbose = cmdLineOpts.getBoolean("-v", "--verbose"); | 
| 
427
 
31a89587eb04
FIXMEs: consistent names, throws for commands and their handlers. Use of checked exceptions in hi-level api
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
423 
diff
changeset
 | 
50 HgManifestHandler h = new HgManifestHandler() { | 
| 
64
 
19e9e220bf68
Convenient commands constitute hi-level API. org.tmatesoft namespace, GPL2 statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
22 
diff
changeset
 | 
51 | 
| 
 
19e9e220bf68
Convenient commands constitute hi-level API. org.tmatesoft namespace, GPL2 statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
22 
diff
changeset
 | 
52 public void begin(Nodeid manifestRevision) { | 
| 
 
19e9e220bf68
Convenient commands constitute hi-level API. org.tmatesoft namespace, GPL2 statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
22 
diff
changeset
 | 
53 } | 
| 
 
19e9e220bf68
Convenient commands constitute hi-level API. org.tmatesoft namespace, GPL2 statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
22 
diff
changeset
 | 
54 public void dir(Path p) { | 
| 
 
19e9e220bf68
Convenient commands constitute hi-level API. org.tmatesoft namespace, GPL2 statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
22 
diff
changeset
 | 
55 } | 
| 
628
 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
457 
diff
changeset
 | 
56 public void file(HgFileRevision fileRevision) throws HgRuntimeException { | 
| 
415
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
57 try { | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
58 if (debug) { | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
59 System.out.print(fileRevision.getRevision());; | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
60 } | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
61 if (debug || verbose) { | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
62 HgManifest.Flags flags = fileRevision.getFileFlags(); | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
63 Object s; | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
64 if (flags == HgManifest.Flags.RegularFile) { | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
65 s = Integer.toOctalString(0644); | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
66 } else if (flags == HgManifest.Flags.Exec) { | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
67 s = Integer.toOctalString(0755); | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
68 } else if (flags == HgManifest.Flags.Link) { | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
69 s = "lnk"; | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
70 } else { | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
71 s = String.valueOf(flags); | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
72 } | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
73 System.out.printf(" %s ", s); | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
74 } | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
75 System.out.println(fileRevision.getPath()); | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
76 } catch (HgInvalidControlFileException e) { | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
77 e.printStackTrace(); | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
78 } catch (HgInvalidRevisionException e) { | 
| 
 
ee8264d80747
Explicit constant for regular file flags, access to flags for a given file revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
299 
diff
changeset
 | 
79 e.printStackTrace(); | 
| 
143
 
b9700740553a
Command line tools parse and respect most of command-line arguments
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
80 } | 
| 
64
 
19e9e220bf68
Convenient commands constitute hi-level API. org.tmatesoft namespace, GPL2 statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
22 
diff
changeset
 | 
81 } | 
| 
 
19e9e220bf68
Convenient commands constitute hi-level API. org.tmatesoft namespace, GPL2 statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
22 
diff
changeset
 | 
82 | 
| 
 
19e9e220bf68
Convenient commands constitute hi-level API. org.tmatesoft namespace, GPL2 statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
22 
diff
changeset
 | 
83 public void end(Nodeid manifestRevision) { | 
| 
 
19e9e220bf68
Convenient commands constitute hi-level API. org.tmatesoft namespace, GPL2 statement
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
22 
diff
changeset
 | 
84 } | 
| 
143
 
b9700740553a
Command line tools parse and respect most of command-line arguments
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
85 }; | 
| 
 
b9700740553a
Command line tools parse and respect most of command-line arguments
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
86 int rev = cmdLineOpts.getSingleInt(TIP, "-r", "--rev"); | 
| 
457
 
d78cb5ca3053
Get rid of ambiguity in method name
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
427 
diff
changeset
 | 
87 new HgManifestCommand(hgRepo).dirs(false).changeset(rev).execute(h); | 
| 
22
 
603806cd2dc6
Status of local working dir against non-tip base revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
19 
diff
changeset
 | 
88 } | 
| 
13
 
df8c67f3006a
Basic manifest parsing to analyze what's in there
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
89 } | 
