Mercurial > jhg
comparison cmdline/org/tmatesoft/hg/console/Status.java @ 72:9a03a80a0f2f
Command-line frontend moved to separate source root with new package statement
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Sun, 23 Jan 2011 03:46:59 +0100 |
parents | src/com/tmate/hgkit/console/Status.java@b771e94a4f7c |
children | 6f1b88693d48 |
comparison
equal
deleted
inserted
replaced
71:ce6d23673f2d | 72:9a03a80a0f2f |
---|---|
1 /* | |
2 * Copyright (c) 2010-2011 TMate Software Ltd | |
3 * | |
4 * This program is free software; you can redistribute it and/or modify | |
5 * it under the terms of the GNU General Public License as published by | |
6 * the Free Software Foundation; version 2 of the License. | |
7 * | |
8 * This program is distributed in the hope that it will be useful, | |
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
11 * GNU General Public License for more details. | |
12 * | |
13 * For information on how to redistribute this software under | |
14 * the terms of a license other than GNU General Public License | |
15 * contact TMate Software at support@svnkit.com | |
16 */ | |
17 package org.tmatesoft.hg.console; | |
18 | |
19 import static com.tmate.hgkit.ll.HgRepository.TIP; | |
20 | |
21 import java.util.ArrayList; | |
22 import java.util.Collections; | |
23 import java.util.List; | |
24 | |
25 import com.tmate.hgkit.fs.RepositoryLookup; | |
26 import com.tmate.hgkit.ll.HgDataFile; | |
27 import com.tmate.hgkit.ll.HgRepository; | |
28 import com.tmate.hgkit.ll.Internals; | |
29 import com.tmate.hgkit.ll.LocalHgRepo; | |
30 import com.tmate.hgkit.ll.Nodeid; | |
31 import com.tmate.hgkit.ll.StatusCollector; | |
32 import com.tmate.hgkit.ll.WorkingCopyStatusCollector; | |
33 | |
34 /** | |
35 * | |
36 * @author Artem Tikhomirov | |
37 * @author TMate Software Ltd. | |
38 */ | |
39 public class Status { | |
40 | |
41 public static void main(String[] args) throws Exception { | |
42 RepositoryLookup repoLookup = new RepositoryLookup(); | |
43 RepositoryLookup.Options cmdLineOpts = RepositoryLookup.Options.parse(args); | |
44 HgRepository hgRepo = repoLookup.detect(cmdLineOpts); | |
45 if (hgRepo.isInvalid()) { | |
46 System.err.printf("Can't find repository in: %s\n", hgRepo.getLocation()); | |
47 return; | |
48 } | |
49 System.out.println(hgRepo.getLocation()); | |
50 Internals debug = new Internals(hgRepo); | |
51 debug.dumpDirstate(); | |
52 final StatusDump dump = new StatusDump(); | |
53 dump.showIgnored = false; | |
54 dump.showClean = false; | |
55 StatusCollector sc = new StatusCollector(hgRepo); | |
56 final int r1 = 0, r2 = 3; | |
57 System.out.printf("Status for changes between revision %d and %d:\n", r1, r2); | |
58 sc.walk(r1, r2, dump); | |
59 // | |
60 System.out.println("\n\nSame, but sorted in the way hg status does:"); | |
61 StatusCollector.Record r = sc.status(r1, r2); | |
62 sortAndPrint('M', r.getModified()); | |
63 sortAndPrint('A', r.getAdded()); | |
64 sortAndPrint('R', r.getRemoved()); | |
65 // | |
66 System.out.println("\n\nTry hg status --change <rev>:"); | |
67 sc.change(0, dump); | |
68 System.out.println("\nStatus against working dir:"); | |
69 WorkingCopyStatusCollector wcc = new WorkingCopyStatusCollector(hgRepo, ((LocalHgRepo) hgRepo).createWorkingDirWalker()); | |
70 wcc.walk(TIP, dump); | |
71 System.out.println(); | |
72 System.out.printf("Manifest of the revision %d:\n", r2); | |
73 hgRepo.getManifest().walk(r2, r2, new Manifest.Dump()); | |
74 System.out.println(); | |
75 System.out.printf("\nStatus of working dir against %d:\n", r2); | |
76 r = wcc.status(r2); | |
77 sortAndPrint('M', r.getModified()); | |
78 sortAndPrint('A', r.getAdded()); | |
79 sortAndPrint('R', r.getRemoved()); | |
80 sortAndPrint('?', r.getUnknown()); | |
81 sortAndPrint('I', r.getIgnored()); | |
82 sortAndPrint('C', r.getClean()); | |
83 sortAndPrint('!', r.getMissing()); | |
84 } | |
85 | |
86 private static void sortAndPrint(char prefix, List<String> ul) { | |
87 ArrayList<String> sortList = new ArrayList<String>(ul); | |
88 Collections.sort(sortList); | |
89 for (String s : sortList) { | |
90 System.out.print(prefix); | |
91 System.out.print(' '); | |
92 System.out.println(s); | |
93 } | |
94 } | |
95 | |
96 protected static void testStatusInternals(HgRepository hgRepo) { | |
97 HgDataFile n = hgRepo.getFileNode("design.txt"); | |
98 for (String s : new String[] {"011dfd44417c72bd9e54cf89b82828f661b700ed", "e5529faa06d53e06a816e56d218115b42782f1ba", "c18e7111f1fc89a80a00f6a39d51288289a382fc"}) { | |
99 // expected: 359, 2123, 3079 | |
100 byte[] b = s.getBytes(); | |
101 final Nodeid nid = Nodeid.fromAscii(b, 0, b.length); | |
102 System.out.println(s + " : " + n.length(nid)); | |
103 } | |
104 } | |
105 | |
106 private static class StatusDump implements StatusCollector.Inspector { | |
107 public boolean hideStatusPrefix = false; // hg status -n option | |
108 public boolean showCopied = true; // -C | |
109 public boolean showIgnored = true; // -i | |
110 public boolean showClean = true; // -c | |
111 | |
112 public void modified(String fname) { | |
113 print('M', fname); | |
114 } | |
115 | |
116 public void added(String fname) { | |
117 print('A', fname); | |
118 } | |
119 | |
120 public void copied(String fnameOrigin, String fnameAdded) { | |
121 added(fnameAdded); | |
122 if (showCopied) { | |
123 print(' ', fnameOrigin); | |
124 } | |
125 } | |
126 | |
127 public void removed(String fname) { | |
128 print('R', fname); | |
129 } | |
130 | |
131 public void clean(String fname) { | |
132 if (showClean) { | |
133 print('C', fname); | |
134 } | |
135 } | |
136 | |
137 public void missing(String fname) { | |
138 print('!', fname); | |
139 } | |
140 | |
141 public void unknown(String fname) { | |
142 print('?', fname); | |
143 } | |
144 | |
145 public void ignored(String fname) { | |
146 if (showIgnored) { | |
147 print('I', fname); | |
148 } | |
149 } | |
150 | |
151 private void print(char status, String fname) { | |
152 if (!hideStatusPrefix) { | |
153 System.out.print(status); | |
154 System.out.print(' '); | |
155 } | |
156 System.out.println(fname); | |
157 } | |
158 } | |
159 } |