Mercurial > jhg
annotate src/org/tmatesoft/hg/repo/HgWorkingCopyStatusCollector.java @ 340:a54bfe0db959
IAE using stale data from branchheads file (invalid due to repository rollback)
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Thu, 17 Nov 2011 06:16:20 +0100 | 
| parents | f377f833b780 | 
| children | a0864b2892cd | 
| rev | line source | 
|---|---|
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
1 /* | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
diff
changeset
 | 
2 * Copyright (c) 2011 TMate Software Ltd | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
diff
changeset
 | 
3 * | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
diff
changeset
 | 
4 * This program is free software; you can redistribute it and/or modify | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
diff
changeset
 | 
5 * it under the terms of the GNU General Public License as published by | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
diff
changeset
 | 
6 * the Free Software Foundation; version 2 of the License. | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
diff
changeset
 | 
7 * | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
diff
changeset
 | 
8 * This program is distributed in the hope that it will be useful, | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
diff
changeset
 | 
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
diff
changeset
 | 
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
diff
changeset
 | 
11 * GNU General Public License for more details. | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
diff
changeset
 | 
12 * | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
diff
changeset
 | 
13 * For information on how to redistribute this software under | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
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: 
94 
diff
changeset
 | 
15 * contact TMate Software at support@hg4j.com | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
16 */ | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
diff
changeset
 | 
17 package org.tmatesoft.hg.repo; | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
18 | 
| 
120
 
b19f0ac5ee62
Check against working copy shall expect non-persistent modifications done by filters and not report such files as modified
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
117 
diff
changeset
 | 
19 import static java.lang.Math.max; | 
| 
117
 
6c0be854d149
Enable filters for status operation (ToRepo case)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
20 import static java.lang.Math.min; | 
| 
218
 
047b1dec7a04
Issue 7: Correctly handle manifest and changelog with different number of (or non-matching) revisions
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
195 
diff
changeset
 | 
21 import static org.tmatesoft.hg.repo.HgRepository.*; | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
22 | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
23 import java.io.File; | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
24 import java.io.IOException; | 
| 
117
 
6c0be854d149
Enable filters for status operation (ToRepo case)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
25 import java.nio.ByteBuffer; | 
| 
287
 
ed6b74a58c66
Use FileInfo abstraction with necessary subset of File functionality instead of File to facilitate other effective file system iterators
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
285 
diff
changeset
 | 
26 import java.nio.channels.ReadableByteChannel; | 
| 
229
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
27 import java.util.ArrayList; | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
28 import java.util.Collections; | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
29 import java.util.NoSuchElementException; | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
30 import java.util.Set; | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
31 import java.util.TreeSet; | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
32 | 
| 
337
 
f377f833b780
Issue 17: temporary code to nail down the problem
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
334 
diff
changeset
 | 
33 import org.tmatesoft.hg.core.HgBadStateException; | 
| 
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: 
148 
diff
changeset
 | 
34 import org.tmatesoft.hg.core.HgDataStreamException; | 
| 
 
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: 
148 
diff
changeset
 | 
35 import org.tmatesoft.hg.core.HgException; | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
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: 
148 
diff
changeset
 | 
37 import org.tmatesoft.hg.internal.ByteArrayChannel; | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
38 import org.tmatesoft.hg.internal.Experimental; | 
| 
117
 
6c0be854d149
Enable filters for status operation (ToRepo case)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
39 import org.tmatesoft.hg.internal.FilterByteChannel; | 
| 
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: 
246 
diff
changeset
 | 
40 import org.tmatesoft.hg.internal.ManifestRevision; | 
| 
229
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
41 import org.tmatesoft.hg.internal.PathScope; | 
| 
117
 
6c0be854d149
Enable filters for status operation (ToRepo case)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
42 import org.tmatesoft.hg.util.ByteChannel; | 
| 
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: 
148 
diff
changeset
 | 
43 import org.tmatesoft.hg.util.CancelledException; | 
| 
287
 
ed6b74a58c66
Use FileInfo abstraction with necessary subset of File functionality instead of File to facilitate other effective file system iterators
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
285 
diff
changeset
 | 
44 import org.tmatesoft.hg.util.FileInfo; | 
| 
141
 
8248aae33f7d
Adopt FileIterator moving towards WCStatusCollector parameterizing. Improved path handling, move 'em around
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
45 import org.tmatesoft.hg.util.FileIterator; | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
46 import org.tmatesoft.hg.util.FileWalker; | 
| 
133
 
4a948ec83980
core.Path to util.Path as it's not Hg repo dependant
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
120 
diff
changeset
 | 
47 import org.tmatesoft.hg.util.Path; | 
| 
93
 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
91 
diff
changeset
 | 
48 import org.tmatesoft.hg.util.PathPool; | 
| 
 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
91 
diff
changeset
 | 
49 import org.tmatesoft.hg.util.PathRewrite; | 
| 
287
 
ed6b74a58c66
Use FileInfo abstraction with necessary subset of File functionality instead of File to facilitate other effective file system iterators
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
285 
diff
changeset
 | 
50 import org.tmatesoft.hg.util.RegularFileInfo; | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
51 | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
52 /** | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
53 * | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
diff
changeset
 | 
54 * @author Artem Tikhomirov | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
diff
changeset
 | 
55 * @author TMate Software Ltd. | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
56 */ | 
| 
94
 
af1f3b78b918
*StatusCollector renamed to Hg*StatusCollector
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
93 
diff
changeset
 | 
57 public class HgWorkingCopyStatusCollector { | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
58 | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
59 private final HgRepository repo; | 
| 
141
 
8248aae33f7d
Adopt FileIterator moving towards WCStatusCollector parameterizing. Improved path handling, move 'em around
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
133 
diff
changeset
 | 
60 private final FileIterator repoWalker; | 
| 
59
 
b771e94a4f7c
Introduce Internals to keep LocalHgRepo casts and alike in a single place. WCSC optionally to reuse SC data
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
58 
diff
changeset
 | 
61 private HgDirstate dirstate; | 
| 
94
 
af1f3b78b918
*StatusCollector renamed to Hg*StatusCollector
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
93 
diff
changeset
 | 
62 private HgStatusCollector baseRevisionCollector; | 
| 
93
 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
91 
diff
changeset
 | 
63 private PathPool pathPool; | 
| 
282
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
64 private ManifestRevision dirstateParentManifest; | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
65 | 
| 
94
 
af1f3b78b918
*StatusCollector renamed to Hg*StatusCollector
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
93 
diff
changeset
 | 
66 public HgWorkingCopyStatusCollector(HgRepository hgRepo) { | 
| 
229
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
67 this(hgRepo, new HgInternals(hgRepo).createWorkingDirWalker(null)); | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
diff
changeset
 | 
68 } | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
diff
changeset
 | 
69 | 
| 
229
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
70 // FIXME document cons | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
71 public HgWorkingCopyStatusCollector(HgRepository hgRepo, FileIterator hgRepoWalker) { | 
| 
218
 
047b1dec7a04
Issue 7: Correctly handle manifest and changelog with different number of (or non-matching) revisions
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
195 
diff
changeset
 | 
72 repo = hgRepo; | 
| 
 
047b1dec7a04
Issue 7: Correctly handle manifest and changelog with different number of (or non-matching) revisions
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
195 
diff
changeset
 | 
73 repoWalker = hgRepoWalker; | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
74 } | 
| 
59
 
b771e94a4f7c
Introduce Internals to keep LocalHgRepo casts and alike in a single place. WCSC optionally to reuse SC data
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
58 
diff
changeset
 | 
75 | 
| 
 
b771e94a4f7c
Introduce Internals to keep LocalHgRepo casts and alike in a single place. WCSC optionally to reuse SC data
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
58 
diff
changeset
 | 
76 /** | 
| 
 
b771e94a4f7c
Introduce Internals to keep LocalHgRepo casts and alike in a single place. WCSC optionally to reuse SC data
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
58 
diff
changeset
 | 
77 * Optionally, supply a collector instance that may cache (or have already cached) base revision | 
| 
 
b771e94a4f7c
Introduce Internals to keep LocalHgRepo casts and alike in a single place. WCSC optionally to reuse SC data
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
58 
diff
changeset
 | 
78 * @param sc may be null | 
| 
 
b771e94a4f7c
Introduce Internals to keep LocalHgRepo casts and alike in a single place. WCSC optionally to reuse SC data
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
58 
diff
changeset
 | 
79 */ | 
| 
94
 
af1f3b78b918
*StatusCollector renamed to Hg*StatusCollector
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
93 
diff
changeset
 | 
80 public void setBaseRevisionCollector(HgStatusCollector sc) { | 
| 
59
 
b771e94a4f7c
Introduce Internals to keep LocalHgRepo casts and alike in a single place. WCSC optionally to reuse SC data
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
58 
diff
changeset
 | 
81 baseRevisionCollector = sc; | 
| 
 
b771e94a4f7c
Introduce Internals to keep LocalHgRepo casts and alike in a single place. WCSC optionally to reuse SC data
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
58 
diff
changeset
 | 
82 } | 
| 
93
 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
91 
diff
changeset
 | 
83 | 
| 
 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
91 
diff
changeset
 | 
84 /*package-local*/ PathPool getPathPool() { | 
| 
 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
91 
diff
changeset
 | 
85 if (pathPool == null) { | 
| 
 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
91 
diff
changeset
 | 
86 if (baseRevisionCollector == null) { | 
| 
 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
91 
diff
changeset
 | 
87 pathPool = new PathPool(new PathRewrite.Empty()); | 
| 
 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
91 
diff
changeset
 | 
88 } else { | 
| 
 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
91 
diff
changeset
 | 
89 return baseRevisionCollector.getPathPool(); | 
| 
 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
91 
diff
changeset
 | 
90 } | 
| 
 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
91 
diff
changeset
 | 
91 } | 
| 
 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
91 
diff
changeset
 | 
92 return pathPool; | 
| 
 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
91 
diff
changeset
 | 
93 } | 
| 
 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
91 
diff
changeset
 | 
94 | 
| 
 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
91 
diff
changeset
 | 
95 public void setPathPool(PathPool pathPool) { | 
| 
 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
91 
diff
changeset
 | 
96 this.pathPool = pathPool; | 
| 
 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
91 
diff
changeset
 | 
97 } | 
| 
 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
91 
diff
changeset
 | 
98 | 
| 
290
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
287 
diff
changeset
 | 
99 /** | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
287 
diff
changeset
 | 
100 * Access to directory state information this collector uses. | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
287 
diff
changeset
 | 
101 * @return directory state holder, never <code>null</code> | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
287 
diff
changeset
 | 
102 */ | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
287 
diff
changeset
 | 
103 public HgDirstate getDirstate() { | 
| 
59
 
b771e94a4f7c
Introduce Internals to keep LocalHgRepo casts and alike in a single place. WCSC optionally to reuse SC data
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
58 
diff
changeset
 | 
104 if (dirstate == null) { | 
| 
284
 
7232b94f2ae3
HgDirstate shall operate with Path instead of String for file names. Use of Pair instead of array of unspecified length for parents.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
282 
diff
changeset
 | 
105 dirstate = repo.loadDirstate(getPathPool()); | 
| 
59
 
b771e94a4f7c
Introduce Internals to keep LocalHgRepo casts and alike in a single place. WCSC optionally to reuse SC data
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
58 
diff
changeset
 | 
106 } | 
| 
 
b771e94a4f7c
Introduce Internals to keep LocalHgRepo casts and alike in a single place. WCSC optionally to reuse SC data
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
58 
diff
changeset
 | 
107 return dirstate; | 
| 
 
b771e94a4f7c
Introduce Internals to keep LocalHgRepo casts and alike in a single place. WCSC optionally to reuse SC data
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
58 
diff
changeset
 | 
108 } | 
| 
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: 
248 
diff
changeset
 | 
109 | 
| 
282
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
110 private ManifestRevision getManifest(int changelogLocalRev) { | 
| 
284
 
7232b94f2ae3
HgDirstate shall operate with Path instead of String for file names. Use of Pair instead of array of unspecified length for parents.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
282 
diff
changeset
 | 
111 assert changelogLocalRev >= 0; | 
| 
282
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
112 ManifestRevision mr; | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
113 if (baseRevisionCollector != null) { | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
114 mr = baseRevisionCollector.raw(changelogLocalRev); | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
115 } else { | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
116 mr = new ManifestRevision(null, null); | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
117 repo.getManifest().walk(changelogLocalRev, changelogLocalRev, mr); | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
118 } | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
119 return mr; | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
120 } | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
121 | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
122 private ManifestRevision getDirstateParentManifest() { | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
123 // WC not necessarily points to TIP, but may be result of update to any previous revision. | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
124 // In such case, we need to compare local files not to their TIP content, but to specific version at the time of selected revision | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
125 if (dirstateParentManifest == null) { | 
| 
284
 
7232b94f2ae3
HgDirstate shall operate with Path instead of String for file names. Use of Pair instead of array of unspecified length for parents.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
282 
diff
changeset
 | 
126 Nodeid dirstateParent = getDirstate().parents().first(); | 
| 
 
7232b94f2ae3
HgDirstate shall operate with Path instead of String for file names. Use of Pair instead of array of unspecified length for parents.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
282 
diff
changeset
 | 
127 if (dirstateParent.isNull()) { | 
| 
 
7232b94f2ae3
HgDirstate shall operate with Path instead of String for file names. Use of Pair instead of array of unspecified length for parents.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
282 
diff
changeset
 | 
128 dirstateParentManifest = baseRevisionCollector != null ? baseRevisionCollector.raw(-1) : HgStatusCollector.createEmptyManifestRevision(); | 
| 
 
7232b94f2ae3
HgDirstate shall operate with Path instead of String for file names. Use of Pair instead of array of unspecified length for parents.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
282 
diff
changeset
 | 
129 } else { | 
| 
 
7232b94f2ae3
HgDirstate shall operate with Path instead of String for file names. Use of Pair instead of array of unspecified length for parents.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
282 
diff
changeset
 | 
130 int changelogLocalRev = repo.getChangelog().getLocalRevision(dirstateParent); | 
| 
 
7232b94f2ae3
HgDirstate shall operate with Path instead of String for file names. Use of Pair instead of array of unspecified length for parents.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
282 
diff
changeset
 | 
131 dirstateParentManifest = getManifest(changelogLocalRev); | 
| 
 
7232b94f2ae3
HgDirstate shall operate with Path instead of String for file names. Use of Pair instead of array of unspecified length for parents.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
282 
diff
changeset
 | 
132 } | 
| 
282
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
133 } | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
134 return dirstateParentManifest; | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
135 } | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
136 | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
137 // may be invoked few times, TIP or WORKING_COPY indicate comparison shall be run against working copy parent | 
| 
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: 
248 
diff
changeset
 | 
138 // NOTE, use of TIP constant requires certain care. TIP here doesn't mean latest cset, but actual working copy parent. | 
| 
93
 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
91 
diff
changeset
 | 
139 public void walk(int baseRevision, HgStatusInspector inspector) { | 
| 
282
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
140 if (HgInternals.wrongLocalRevision(baseRevision) || baseRevision == BAD_REVISION) { | 
| 
218
 
047b1dec7a04
Issue 7: Correctly handle manifest and changelog with different number of (or non-matching) revisions
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
195 
diff
changeset
 | 
141 throw new IllegalArgumentException(String.valueOf(baseRevision)); | 
| 
 
047b1dec7a04
Issue 7: Correctly handle manifest and changelog with different number of (or non-matching) revisions
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
195 
diff
changeset
 | 
142 } | 
| 
282
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
143 ManifestRevision collect = null; // non null indicates we compare against base revision | 
| 
285
 
6dbbc53fc46d
Use Path instead of plain String for manifest file names
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
144 Set<Path> baseRevFiles = Collections.emptySet(); // files from base revision not affected by status calculation | 
| 
282
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
145 if (baseRevision != TIP && baseRevision != WORKING_COPY) { | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
146 collect = getManifest(baseRevision); | 
| 
285
 
6dbbc53fc46d
Use Path instead of plain String for manifest file names
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
147 baseRevFiles = new TreeSet<Path>(collect.files()); | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
148 } | 
| 
94
 
af1f3b78b918
*StatusCollector renamed to Hg*StatusCollector
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
93 
diff
changeset
 | 
149 if (inspector instanceof HgStatusCollector.Record) { | 
| 
 
af1f3b78b918
*StatusCollector renamed to Hg*StatusCollector
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
93 
diff
changeset
 | 
150 HgStatusCollector sc = baseRevisionCollector == null ? new HgStatusCollector(repo) : baseRevisionCollector; | 
| 
282
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
151 // nodeidAfterChange(dirstate's parent) doesn't make too much sense, | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
152 // because the change might be actually in working copy. Nevertheless, | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
153 // as long as no nodeids can be provided for WC, seems reasonable to report | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
154 // latest known nodeid change (although at the moment this is not used and | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
155 // is done mostly not to leave stale initialization in the Record) | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
156 int rev1,rev2 = getDirstateParentManifest().changesetLocalRev(); | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
157 if (baseRevision == TIP || baseRevision == WORKING_COPY) { | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
158 rev1 = rev2 - 1; // just use revision prior to dirstate's parent | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
159 } else { | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
160 rev1 = baseRevision; | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
161 } | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
162 ((HgStatusCollector.Record) inspector).init(rev1, rev2, sc); | 
| 
68
 
0e499fed9b3d
StatusCommand with tests. Extra constants to indicate common revision cases
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
63 
diff
changeset
 | 
163 } | 
| 
282
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
164 final HgIgnore hgIgnore = repo.getIgnore(); | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
165 repoWalker.reset(); | 
| 
293
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
290 
diff
changeset
 | 
166 TreeSet<Path> processed = new TreeSet<Path>(); // names of files we handled as they known to Dirstate (not FileIterator) | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
290 
diff
changeset
 | 
167 final HgDirstate ds = getDirstate(); | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
290 
diff
changeset
 | 
168 TreeSet<Path> knownEntries = ds.all(); // here just to get dirstate initialized | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
169 while (repoWalker.hasNext()) { | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
170 repoWalker.next(); | 
| 
284
 
7232b94f2ae3
HgDirstate shall operate with Path instead of String for file names. Use of Pair instead of array of unspecified length for parents.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
282 
diff
changeset
 | 
171 final Path fname = getPathPool().path(repoWalker.name()); | 
| 
287
 
ed6b74a58c66
Use FileInfo abstraction with necessary subset of File functionality instead of File to facilitate other effective file system iterators
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
285 
diff
changeset
 | 
172 FileInfo f = repoWalker.file(); | 
| 
293
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
290 
diff
changeset
 | 
173 Path knownInDirstate; | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
174 if (!f.exists()) { | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
175 // file coming from iterator doesn't exist. | 
| 
293
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
290 
diff
changeset
 | 
176 if ((knownInDirstate = ds.known(fname)) != null) { | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
290 
diff
changeset
 | 
177 // found in dirstate | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
290 
diff
changeset
 | 
178 processed.add(knownInDirstate); | 
| 
294
 
32890bab7209
Issue 13: Report filenames as they are known in repository rather than from file system
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
293 
diff
changeset
 | 
179 if (ds.checkRemoved(knownInDirstate) == null) { | 
| 
 
32890bab7209
Issue 13: Report filenames as they are known in repository rather than from file system
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
293 
diff
changeset
 | 
180 inspector.missing(knownInDirstate); | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
181 } else { | 
| 
294
 
32890bab7209
Issue 13: Report filenames as they are known in repository rather than from file system
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
293 
diff
changeset
 | 
182 inspector.removed(knownInDirstate); | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
183 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
184 // do not report it as removed later | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
185 if (collect != null) { | 
| 
294
 
32890bab7209
Issue 13: Report filenames as they are known in repository rather than from file system
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
293 
diff
changeset
 | 
186 baseRevFiles.remove(knownInDirstate); | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
187 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
188 } else { | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
189 // chances are it was known in baseRevision. We may rely | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
190 // that later iteration over baseRevFiles leftovers would yield correct Removed, | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
191 // but it doesn't hurt to be explicit (provided we know fname *is* inScope of the FileIterator | 
| 
285
 
6dbbc53fc46d
Use Path instead of plain String for manifest file names
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
192 if (collect != null && baseRevFiles.remove(fname)) { | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
193 inspector.removed(fname); | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
194 } else { | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
195 // not sure I shall report such files (i.e. arbitrary name coming from FileIterator) | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
196 // as unknown. Command-line HG aborts "system can't find the file specified" | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
197 // in similar case (against wc), or just gives nothing if --change <rev> is specified. | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
198 // however, as it's unlikely to get unexisting files from FileIterator, and | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
199 // its better to see erroneous file status rather than not to see any (which is too easy | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
200 // to overlook), I think unknown() is reasonable approach here | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
201 inspector.unknown(fname); | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
202 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
203 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
204 continue; | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
205 } | 
| 
293
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
290 
diff
changeset
 | 
206 if ((knownInDirstate = ds.known(fname)) != null) { | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
207 // tracked file. | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
208 // modified, added, removed, clean | 
| 
293
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
290 
diff
changeset
 | 
209 processed.add(knownInDirstate); | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
210 if (collect != null) { // need to check against base revision, not FS file | 
| 
294
 
32890bab7209
Issue 13: Report filenames as they are known in repository rather than from file system
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
293 
diff
changeset
 | 
211 checkLocalStatusAgainstBaseRevision(baseRevFiles, collect, baseRevision, knownInDirstate, f, inspector); | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
212 } else { | 
| 
294
 
32890bab7209
Issue 13: Report filenames as they are known in repository rather than from file system
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
293 
diff
changeset
 | 
213 checkLocalStatusAgainstFile(knownInDirstate, f, inspector); | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
214 } | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
215 } else { | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
216 if (hgIgnore.isIgnored(fname)) { // hgignore shall be consulted only for non-tracked files | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
217 inspector.ignored(fname); | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
218 } else { | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
219 inspector.unknown(fname); | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
220 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
221 // the file is not tracked. Even if it's known at baseRevision, we don't need to remove it | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
222 // from baseRevFiles, it might need to be reported as removed as well (cmdline client does | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
223 // yield two statuses for the same file) | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
224 } | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
225 } | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
226 if (collect != null) { | 
| 
285
 
6dbbc53fc46d
Use Path instead of plain String for manifest file names
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
227 for (Path fromBase : baseRevFiles) { | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
228 if (repoWalker.inScope(fromBase)) { | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
229 inspector.removed(fromBase); | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
230 } | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
231 } | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
232 } | 
| 
293
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
290 
diff
changeset
 | 
233 knownEntries.removeAll(processed); | 
| 
284
 
7232b94f2ae3
HgDirstate shall operate with Path instead of String for file names. Use of Pair instead of array of unspecified length for parents.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
282 
diff
changeset
 | 
234 for (Path m : knownEntries) { | 
| 
 
7232b94f2ae3
HgDirstate shall operate with Path instead of String for file names. Use of Pair instead of array of unspecified length for parents.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
282 
diff
changeset
 | 
235 if (!repoWalker.inScope(m)) { | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
236 // do not report as missing/removed those FileIterator doesn't care about. | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
237 continue; | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
238 } | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
diff
changeset
 | 
239 // missing known file from a working dir | 
| 
293
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
290 
diff
changeset
 | 
240 if (ds.checkRemoved(m) == null) { | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
diff
changeset
 | 
241 // not removed from the repository = 'deleted' | 
| 
284
 
7232b94f2ae3
HgDirstate shall operate with Path instead of String for file names. Use of Pair instead of array of unspecified length for parents.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
282 
diff
changeset
 | 
242 inspector.missing(m); | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
diff
changeset
 | 
243 } else { | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
68 
diff
changeset
 | 
244 // removed from the repo | 
| 
76
 
658fa6b3a371
Fixed a defect when a file added and removed past some revision was reported as R for status against that rev
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
74 
diff
changeset
 | 
245 // if we check against non-tip revision, do not report files that were added past that revision and now removed. | 
| 
285
 
6dbbc53fc46d
Use Path instead of plain String for manifest file names
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
246 if (collect == null || baseRevFiles.contains(m)) { | 
| 
284
 
7232b94f2ae3
HgDirstate shall operate with Path instead of String for file names. Use of Pair instead of array of unspecified length for parents.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
282 
diff
changeset
 | 
247 inspector.removed(m); | 
| 
76
 
658fa6b3a371
Fixed a defect when a file added and removed past some revision was reported as R for status against that rev
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
74 
diff
changeset
 | 
248 } | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
249 } | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
250 } | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
251 } | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
252 | 
| 
94
 
af1f3b78b918
*StatusCollector renamed to Hg*StatusCollector
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
93 
diff
changeset
 | 
253 public HgStatusCollector.Record status(int baseRevision) { | 
| 
 
af1f3b78b918
*StatusCollector renamed to Hg*StatusCollector
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
93 
diff
changeset
 | 
254 HgStatusCollector.Record rv = new HgStatusCollector.Record(); | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
255 walk(baseRevision, rv); | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
256 return rv; | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
257 } | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
258 | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
259 //******************************************** | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
260 | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
261 | 
| 
287
 
ed6b74a58c66
Use FileInfo abstraction with necessary subset of File functionality instead of File to facilitate other effective file system iterators
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
285 
diff
changeset
 | 
262 private void checkLocalStatusAgainstFile(Path fname, FileInfo f, HgStatusInspector inspector) { | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
263 HgDirstate.Record r; | 
| 
59
 
b771e94a4f7c
Introduce Internals to keep LocalHgRepo casts and alike in a single place. WCSC optionally to reuse SC data
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
58 
diff
changeset
 | 
264 if ((r = getDirstate().checkNormal(fname)) != null) { | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
265 // either clean or modified | 
| 
290
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
287 
diff
changeset
 | 
266 final boolean timestampEqual = f.lastModified() == r.modificationTime(), sizeEqual = r.size() == f.length(); | 
| 
280
 
35125450c804
Erroneous and slow status for working copies based on non-tip revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
275 
diff
changeset
 | 
267 if (timestampEqual && sizeEqual) { | 
| 
 
35125450c804
Erroneous and slow status for working copies based on non-tip revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
275 
diff
changeset
 | 
268 inspector.clean(fname); | 
| 
290
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
287 
diff
changeset
 | 
269 } else if (!sizeEqual && r.size() >= 0) { | 
| 
280
 
35125450c804
Erroneous and slow status for working copies based on non-tip revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
275 
diff
changeset
 | 
270 inspector.modified(fname); | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
271 } else { | 
| 
280
 
35125450c804
Erroneous and slow status for working copies based on non-tip revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
275 
diff
changeset
 | 
272 // size is the same or unknown, and, perhaps, different timestamp | 
| 
120
 
b19f0ac5ee62
Check against working copy shall expect non-persistent modifications done by filters and not report such files as modified
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
117 
diff
changeset
 | 
273 // check actual content to avoid false modified files | 
| 
 
b19f0ac5ee62
Check against working copy shall expect non-persistent modifications done by filters and not report such files as modified
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
117 
diff
changeset
 | 
274 HgDataFile df = repo.getFileNode(fname); | 
| 
337
 
f377f833b780
Issue 17: temporary code to nail down the problem
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
334 
diff
changeset
 | 
275 if (!df.exists()) { | 
| 
 
f377f833b780
Issue 17: temporary code to nail down the problem
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
334 
diff
changeset
 | 
276 String msg = String.format("File %s known as normal in dirstate (%d, %d), doesn't exist at %s", fname, r.modificationTime(), r.size(), repo.getStoragePath(df)); | 
| 
 
f377f833b780
Issue 17: temporary code to nail down the problem
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
334 
diff
changeset
 | 
277 throw new HgBadStateException(msg); | 
| 
 
f377f833b780
Issue 17: temporary code to nail down the problem
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
334 
diff
changeset
 | 
278 } | 
| 
285
 
6dbbc53fc46d
Use Path instead of plain String for manifest file names
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
279 Nodeid rev = getDirstateParentManifest().nodeid(fname); | 
| 
314
 
fb74133d2025
Issue 14: NPE for merged dirstate and a file missed in dirstate's first parent
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
295 
diff
changeset
 | 
280 // rev might be null here if fname comes to dirstate as a result of a merge operation | 
| 
 
fb74133d2025
Issue 14: NPE for merged dirstate and a file missed in dirstate's first parent
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
295 
diff
changeset
 | 
281 // where one of the parents (first parent) had no fname file, but second parent had. | 
| 
 
fb74133d2025
Issue 14: NPE for merged dirstate and a file missed in dirstate's first parent
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
295 
diff
changeset
 | 
282 // E.g. fork revision 3, revision 4 gets .hgtags, few modifications and merge(3,12) | 
| 
 
fb74133d2025
Issue 14: NPE for merged dirstate and a file missed in dirstate's first parent
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
295 
diff
changeset
 | 
283 // see Issue 14 for details | 
| 
 
fb74133d2025
Issue 14: NPE for merged dirstate and a file missed in dirstate's first parent
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
295 
diff
changeset
 | 
284 if (rev == null || !areTheSame(f, df, rev)) { | 
| 
120
 
b19f0ac5ee62
Check against working copy shall expect non-persistent modifications done by filters and not report such files as modified
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
117 
diff
changeset
 | 
285 inspector.modified(df.getPath()); | 
| 
180
 
42fe9a94b9d0
Report files as clean when no difference but timestamp found
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
157 
diff
changeset
 | 
286 } else { | 
| 
 
42fe9a94b9d0
Report files as clean when no difference but timestamp found
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
157 
diff
changeset
 | 
287 inspector.clean(df.getPath()); | 
| 
120
 
b19f0ac5ee62
Check against working copy shall expect non-persistent modifications done by filters and not report such files as modified
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
117 
diff
changeset
 | 
288 } | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
289 } | 
| 
59
 
b771e94a4f7c
Introduce Internals to keep LocalHgRepo casts and alike in a single place. WCSC optionally to reuse SC data
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
58 
diff
changeset
 | 
290 } else if ((r = getDirstate().checkAdded(fname)) != null) { | 
| 
290
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
287 
diff
changeset
 | 
291 if (r.copySource() == null) { | 
| 
280
 
35125450c804
Erroneous and slow status for working copies based on non-tip revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
275 
diff
changeset
 | 
292 inspector.added(fname); | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
293 } else { | 
| 
290
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
287 
diff
changeset
 | 
294 inspector.copied(r.copySource(), fname); | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
295 } | 
| 
59
 
b771e94a4f7c
Introduce Internals to keep LocalHgRepo casts and alike in a single place. WCSC optionally to reuse SC data
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
58 
diff
changeset
 | 
296 } else if ((r = getDirstate().checkRemoved(fname)) != null) { | 
| 
280
 
35125450c804
Erroneous and slow status for working copies based on non-tip revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
275 
diff
changeset
 | 
297 inspector.removed(fname); | 
| 
59
 
b771e94a4f7c
Introduce Internals to keep LocalHgRepo casts and alike in a single place. WCSC optionally to reuse SC data
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
58 
diff
changeset
 | 
298 } else if ((r = getDirstate().checkMerged(fname)) != null) { | 
| 
280
 
35125450c804
Erroneous and slow status for working copies based on non-tip revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
275 
diff
changeset
 | 
299 inspector.modified(fname); | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
300 } | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
301 } | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
302 | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
303 // XXX refactor checkLocalStatus methods in more OO way | 
| 
287
 
ed6b74a58c66
Use FileInfo abstraction with necessary subset of File functionality instead of File to facilitate other effective file system iterators
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
285 
diff
changeset
 | 
304 private void checkLocalStatusAgainstBaseRevision(Set<Path> baseRevNames, ManifestRevision collect, int baseRevision, Path fname, FileInfo f, HgStatusInspector inspector) { | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
305 // fname is in the dirstate, either Normal, Added, Removed or Merged | 
| 
285
 
6dbbc53fc46d
Use Path instead of plain String for manifest file names
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
306 Nodeid nid1 = collect.nodeid(fname); | 
| 
 
6dbbc53fc46d
Use Path instead of plain String for manifest file names
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
307 HgManifest.Flags flags = collect.flags(fname); | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
308 HgDirstate.Record r; | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
309 if (nid1 == null) { | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
310 // normal: added? | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
311 // added: not known at the time of baseRevision, shall report | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
312 // merged: was not known, report as added? | 
| 
90
 
a95c700408a9
Correctly report copy/rename events for rev..working copy case
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
89 
diff
changeset
 | 
313 if ((r = getDirstate().checkNormal(fname)) != null) { | 
| 
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: 
148 
diff
changeset
 | 
314 try { | 
| 
 
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: 
148 
diff
changeset
 | 
315 Path origin = HgStatusCollector.getOriginIfCopy(repo, fname, baseRevNames, baseRevision); | 
| 
 
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: 
148 
diff
changeset
 | 
316 if (origin != null) { | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
317 inspector.copied(getPathPool().path(origin), fname); | 
| 
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: 
148 
diff
changeset
 | 
318 return; | 
| 
 
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: 
148 
diff
changeset
 | 
319 } | 
| 
 
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: 
148 
diff
changeset
 | 
320 } catch (HgDataStreamException ex) { | 
| 
 
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: 
148 
diff
changeset
 | 
321 ex.printStackTrace(); | 
| 
 
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: 
148 
diff
changeset
 | 
322 // FIXME report to a mediator, continue status collection | 
| 
90
 
a95c700408a9
Correctly report copy/rename events for rev..working copy case
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
89 
diff
changeset
 | 
323 } | 
| 
 
a95c700408a9
Correctly report copy/rename events for rev..working copy case
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
89 
diff
changeset
 | 
324 } else if ((r = getDirstate().checkAdded(fname)) != null) { | 
| 
290
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
287 
diff
changeset
 | 
325 if (r.copySource() != null && baseRevNames.contains(r.copySource())) { | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
287 
diff
changeset
 | 
326 baseRevNames.remove(r.copySource()); // XXX surely I shall not report rename source as Removed? | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
287 
diff
changeset
 | 
327 inspector.copied(r.copySource(), fname); | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
328 return; | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
329 } | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
330 // fall-through, report as added | 
| 
59
 
b771e94a4f7c
Introduce Internals to keep LocalHgRepo casts and alike in a single place. WCSC optionally to reuse SC data
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
58 
diff
changeset
 | 
331 } else if (getDirstate().checkRemoved(fname) != null) { | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
332 // removed: removed file was not known at the time of baseRevision, and we should not report it as removed | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
333 return; | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
334 } | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
335 inspector.added(fname); | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
336 } else { | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
337 // was known; check whether clean or modified | 
| 
285
 
6dbbc53fc46d
Use Path instead of plain String for manifest file names
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
338 Nodeid nidFromDirstate = getDirstateParentManifest().nodeid(fname); | 
| 
282
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
339 if ((r = getDirstate().checkNormal(fname)) != null && nid1.equals(nidFromDirstate)) { | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
340 // regular file, was the same up to WC initialization. Check if was modified since, and, if not, report right away | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
341 // same code as in #checkLocalStatusAgainstFile | 
| 
290
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
287 
diff
changeset
 | 
342 final boolean timestampEqual = f.lastModified() == r.modificationTime(), sizeEqual = r.size() == f.length(); | 
| 
282
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
343 boolean handled = false; | 
| 
280
 
35125450c804
Erroneous and slow status for working copies based on non-tip revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
275 
diff
changeset
 | 
344 if (timestampEqual && sizeEqual) { | 
| 
 
35125450c804
Erroneous and slow status for working copies based on non-tip revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
275 
diff
changeset
 | 
345 inspector.clean(fname); | 
| 
282
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
346 handled = true; | 
| 
290
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
287 
diff
changeset
 | 
347 } else if (!sizeEqual && r.size() >= 0) { | 
| 
280
 
35125450c804
Erroneous and slow status for working copies based on non-tip revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
275 
diff
changeset
 | 
348 inspector.modified(fname); | 
| 
282
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
349 handled = true; | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
350 } else if (!todoCheckFlagsEqual(f, flags)) { | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
351 // seems like flags have changed, no reason to check content further | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
352 inspector.modified(fname); | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
353 handled = true; | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
354 } | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
355 if (handled) { | 
| 
285
 
6dbbc53fc46d
Use Path instead of plain String for manifest file names
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
356 baseRevNames.remove(fname); // consumed, processed, handled. | 
| 
280
 
35125450c804
Erroneous and slow status for working copies based on non-tip revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
275 
diff
changeset
 | 
357 return; | 
| 
 
35125450c804
Erroneous and slow status for working copies based on non-tip revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
275 
diff
changeset
 | 
358 } | 
| 
282
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
359 // otherwise, shall check actual content (size not the same, or unknown (-1 or -2), or timestamp is different, | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
360 // or nodeid in dirstate is different, but local change might have brought it back to baseRevision state) | 
| 
280
 
35125450c804
Erroneous and slow status for working copies based on non-tip revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
275 
diff
changeset
 | 
361 // FALL THROUGH | 
| 
 
35125450c804
Erroneous and slow status for working copies based on non-tip revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
275 
diff
changeset
 | 
362 } | 
| 
282
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
363 if (r != null || (r = getDirstate().checkMerged(fname)) != null || (r = getDirstate().checkAdded(fname)) != null) { | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
364 // check actual content to see actual changes | 
| 
280
 
35125450c804
Erroneous and slow status for working copies based on non-tip revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
275 
diff
changeset
 | 
365 // when added - seems to be the case of a file added once again, hence need to check if content is different | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
366 // either clean or modified | 
| 
282
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
367 HgDataFile fileNode = repo.getFileNode(fname); | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
368 if (areTheSame(f, fileNode, nid1)) { | 
| 
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
369 inspector.clean(fname); | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
370 } else { | 
| 
282
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
371 inspector.modified(fname); | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
372 } | 
| 
285
 
6dbbc53fc46d
Use Path instead of plain String for manifest file names
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
373 baseRevNames.remove(fname); // consumed, processed, handled. | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
374 } else if (getDirstate().checkRemoved(fname) != null) { | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
375 // was known, and now marked as removed, report it right away, do not rely on baseRevNames processing later | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
376 inspector.removed(fname); | 
| 
285
 
6dbbc53fc46d
Use Path instead of plain String for manifest file names
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
377 baseRevNames.remove(fname); // consumed, processed, handled. | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
378 } | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
379 // only those left in baseRevNames after processing are reported as removed | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
380 } | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
381 | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
382 // TODO think over if content comparison may be done more effectively by e.g. calculating nodeid for a local file and comparing it with nodeid from manifest | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
383 // we don't need to tell exact difference, hash should be enough to detect difference, and it doesn't involve reading historical file content, and it's relatively | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
384 // cheap to calc hash on a file (no need to keep it completely in memory). OTOH, if I'm right that the next approach is used for nodeids: | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
385 // changeset nodeid + hash(actual content) => entry (Nodeid) in the next Manifest | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
386 // then it's sufficient to check parents from dirstate, and if they do not match parents from file's baseRevision (non matching parents means different nodeids). | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
387 // The question is whether original Hg treats this case (same content, different parents and hence nodeids) as 'modified' or 'clean' | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
388 } | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
389 | 
| 
287
 
ed6b74a58c66
Use FileInfo abstraction with necessary subset of File functionality instead of File to facilitate other effective file system iterators
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
285 
diff
changeset
 | 
390 private boolean areTheSame(FileInfo f, HgDataFile dataFile, Nodeid revision) { | 
| 
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: 
148 
diff
changeset
 | 
391 // XXX consider adding HgDataDile.compare(File/byte[]/whatever) operation to optimize comparison | 
| 
 
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: 
148 
diff
changeset
 | 
392 ByteArrayChannel bac = 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: 
148 
diff
changeset
 | 
393 boolean ioFailed = false; | 
| 
 
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: 
148 
diff
changeset
 | 
394 try { | 
| 
282
 
e51dd9a14b6f
Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
280 
diff
changeset
 | 
395 int localRevision = dataFile.getLocalRevision(revision); | 
| 
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: 
148 
diff
changeset
 | 
396 // need content with metadata striped off - although theoretically chances are metadata may be different, | 
| 
 
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: 
148 
diff
changeset
 | 
397 // WC doesn't have it anyway | 
| 
 
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: 
148 
diff
changeset
 | 
398 dataFile.content(localRevision, bac); | 
| 
 
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: 
148 
diff
changeset
 | 
399 } catch (CancelledException ex) { | 
| 
 
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: 
148 
diff
changeset
 | 
400 // silently ignore - can't happen, ByteArrayChannel is not cancellable | 
| 
 
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: 
148 
diff
changeset
 | 
401 } catch (HgException ex) { | 
| 
323
 
4c7e3ba67213
Exception when analyzing metadata of an empty renamed file
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
314 
diff
changeset
 | 
402 repo.getContext().getLog().warn(getClass(), ex, null); | 
| 
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: 
148 
diff
changeset
 | 
403 ioFailed = true; | 
| 
 
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: 
148 
diff
changeset
 | 
404 } | 
| 
 
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: 
148 
diff
changeset
 | 
405 return !ioFailed && areTheSame(f, bac.toArray(), dataFile.getPath()); | 
| 
 
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: 
148 
diff
changeset
 | 
406 } | 
| 
 
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: 
148 
diff
changeset
 | 
407 | 
| 
287
 
ed6b74a58c66
Use FileInfo abstraction with necessary subset of File functionality instead of File to facilitate other effective file system iterators
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
285 
diff
changeset
 | 
408 private boolean areTheSame(FileInfo f, final byte[] data, Path p) { | 
| 
 
ed6b74a58c66
Use FileInfo abstraction with necessary subset of File functionality instead of File to facilitate other effective file system iterators
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
285 
diff
changeset
 | 
409 ReadableByteChannel is = null; | 
| 
295
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
410 class Check implements ByteChannel { | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
411 final boolean debug = repo.getContext().getLog().isDebug(); | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
412 boolean sameSoFar = true; | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
413 int x = 0; | 
| 
219
 
d63583b47bfa
ArrayIndexOutOfBoundsException when file appended. Erroneous 'areTheSame' when trailing were deleted.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
218 
diff
changeset
 | 
414 | 
| 
295
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
415 public int write(ByteBuffer buffer) { | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
416 for (int i = buffer.remaining(); i > 0; i--, x++) { | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
417 if (x >= data.length /*file has been appended*/ || data[x] != buffer.get()) { | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
418 if (debug) { | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
419 byte[] xx = new byte[15]; | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
420 if (buffer.position() > 5) { | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
421 buffer.position(buffer.position() - 5); | 
| 
117
 
6c0be854d149
Enable filters for status operation (ToRepo case)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
422 } | 
| 
334
 
15e1961719f2
Investigate sporadic BufferUnderflowException
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
323 
diff
changeset
 | 
423 buffer.get(xx, 0, min(xx.length, i-1 /*-1 for the one potentially read at buffer.get in if() */)); | 
| 
 
15e1961719f2
Investigate sporadic BufferUnderflowException
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
323 
diff
changeset
 | 
424 String exp; | 
| 
 
15e1961719f2
Investigate sporadic BufferUnderflowException
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
323 
diff
changeset
 | 
425 if (x < data.length) { | 
| 
 
15e1961719f2
Investigate sporadic BufferUnderflowException
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
323 
diff
changeset
 | 
426 exp = new String(data, max(0, x - 4), min(data.length - x, 20)); | 
| 
 
15e1961719f2
Investigate sporadic BufferUnderflowException
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
323 
diff
changeset
 | 
427 } else { | 
| 
 
15e1961719f2
Investigate sporadic BufferUnderflowException
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
323 
diff
changeset
 | 
428 int offset = max(0, x - 4); | 
| 
 
15e1961719f2
Investigate sporadic BufferUnderflowException
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
323 
diff
changeset
 | 
429 exp = new String(data, offset, min(data.length - offset, 20)); | 
| 
 
15e1961719f2
Investigate sporadic BufferUnderflowException
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
323 
diff
changeset
 | 
430 } | 
| 
 
15e1961719f2
Investigate sporadic BufferUnderflowException
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
323 
diff
changeset
 | 
431 repo.getContext().getLog().debug(getClass(), "expected >>%s<< but got >>%s<<", exp, new String(xx)); | 
| 
117
 
6c0be854d149
Enable filters for status operation (ToRepo case)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
432 } | 
| 
295
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
433 sameSoFar = false; | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
434 break; | 
| 
219
 
d63583b47bfa
ArrayIndexOutOfBoundsException when file appended. Erroneous 'areTheSame' when trailing were deleted.
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
218 
diff
changeset
 | 
435 } | 
| 
117
 
6c0be854d149
Enable filters for status operation (ToRepo case)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
436 } | 
| 
295
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
437 buffer.position(buffer.limit()); // mark as read | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
438 return buffer.limit(); | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
439 } | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
440 | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
441 public boolean sameSoFar() { | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
442 return sameSoFar; | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
443 } | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
444 public boolean ultimatelyTheSame() { | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
445 return sameSoFar && x == data.length; | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
446 } | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
447 }; | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
448 Check check = new Check(); | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
449 try { | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
450 is = f.newInputChannel(); | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
451 ByteBuffer fb = ByteBuffer.allocate(min(1 + data.length * 2 /*to fit couple of lines appended; never zero*/, 8192)); | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
452 FilterByteChannel filters = new FilterByteChannel(check, repo.getFiltersFromWorkingDirToRepo(p)); | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
453 while (is.read(fb) != -1 && check.sameSoFar()) { | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
454 fb.flip(); | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
455 filters.write(fb); | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
456 fb.compact(); | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
457 } | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
458 return check.ultimatelyTheSame(); | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
459 } catch (CancelledException ex) { | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
460 repo.getContext().getLog().warn(getClass(), ex, "Unexpected cancellation"); | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
461 return check.ultimatelyTheSame(); | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
462 } catch (IOException ex) { | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
463 repo.getContext().getLog().warn(getClass(), ex, null); | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
464 } finally { | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
465 if (is != null) { | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
466 try { | 
| 
287
 
ed6b74a58c66
Use FileInfo abstraction with necessary subset of File functionality instead of File to facilitate other effective file system iterators
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
285 
diff
changeset
 | 
467 is.close(); | 
| 
295
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
468 } catch (IOException ex) { | 
| 
 
981f9f50bb6c
Issue 11: Error log facility. SessionContext to share common facilities
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
294 
diff
changeset
 | 
469 repo.getContext().getLog().info(getClass(), ex, null); | 
| 
117
 
6c0be854d149
Enable filters for status operation (ToRepo case)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
470 } | 
| 
 
6c0be854d149
Enable filters for status operation (ToRepo case)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
471 } | 
| 
 
6c0be854d149
Enable filters for status operation (ToRepo case)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
472 } | 
| 
 
6c0be854d149
Enable filters for status operation (ToRepo case)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
473 return false; | 
| 
 
6c0be854d149
Enable filters for status operation (ToRepo case)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
474 } | 
| 
 
6c0be854d149
Enable filters for status operation (ToRepo case)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
475 | 
| 
287
 
ed6b74a58c66
Use FileInfo abstraction with necessary subset of File functionality instead of File to facilitate other effective file system iterators
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
285 
diff
changeset
 | 
476 private static boolean todoCheckFlagsEqual(FileInfo f, HgManifest.Flags originalManifestFlags) { | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
477 // FIXME implement | 
| 
280
 
35125450c804
Erroneous and slow status for working copies based on non-tip revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
275 
diff
changeset
 | 
478 return true; | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
479 } | 
| 
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
480 | 
| 
229
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
481 /** | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
482 * Configure status collector to consider only subset of a working copy tree. Tries to be as effective as possible, and to | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
483 * traverse only relevant part of working copy on the filesystem. | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
484 * | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
485 * @param hgRepo repository | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
486 * @param paths repository-relative files and/or directories. Directories are processed recursively. | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
487 * | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
488 * @return new instance of {@link HgWorkingCopyStatusCollector}, ready to {@link #walk(int, HgStatusInspector) walk} associated working copy | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
489 */ | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
490 @Experimental(reason="Provisional API") | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
491 public static HgWorkingCopyStatusCollector create(HgRepository hgRepo, Path... paths) { | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
492 ArrayList<Path> f = new ArrayList<Path>(5); | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
493 ArrayList<Path> d = new ArrayList<Path>(5); | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
494 for (Path p : paths) { | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
495 if (p.isDirectory()) { | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
496 d.add(p); | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
497 } else { | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
498 f.add(p); | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
499 } | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
500 } | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
501 // final Path[] dirs = f.toArray(new Path[d.size()]); | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
502 if (d.isEmpty()) { | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
503 final Path[] files = f.toArray(new Path[f.size()]); | 
| 
237
 
6e1373b54e9b
Allow access to working copy content through HgDataFile. Give access to repository's working dir
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
229 
diff
changeset
 | 
504 FileIterator fi = new FileListIterator(hgRepo.getWorkingDir(), files); | 
| 
229
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
505 return new HgWorkingCopyStatusCollector(hgRepo, fi); | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
506 } | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
507 // | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
508 | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
509 //FileIterator fi = file.isDirectory() ? new DirFileIterator(hgRepo, file) : new FileListIterator(, file); | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
510 FileIterator fi = new HgInternals(hgRepo).createWorkingDirWalker(new PathScope(true, paths)); | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
511 return new HgWorkingCopyStatusCollector(hgRepo, fi); | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
512 } | 
| 
229
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
513 | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
514 /** | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
515 * Configure collector object to calculate status for matching files only. | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
516 * This method may be less effective than explicit list of files as it iterates over whole repository | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
517 * (thus supplied matcher doesn't need to care if directories to files in question are also in scope, | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
518 * see {@link FileWalker#FileWalker(File, Path.Source, Path.Matcher)}) | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
519 * | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
520 * @return new instance of {@link HgWorkingCopyStatusCollector}, ready to {@link #walk(int, HgStatusInspector) walk} associated working copy | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
521 */ | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
522 @Experimental(reason="Provisional API. May add boolean strict argument for those who write smart matchers that can be used in FileWalker") | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
523 public static HgWorkingCopyStatusCollector create(HgRepository hgRepo, Path.Matcher scope) { | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
524 FileIterator w = new HgInternals(hgRepo).createWorkingDirWalker(null); | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
525 FileIterator wf = (scope == null || scope instanceof Path.Matcher.Any) ? w : new FileIteratorFilter(w, scope); | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
526 // the reason I need to iterate over full repo and apply filter is that I have no idea whatsoever about | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
527 // patterns in the scope. I.e. if scope lists a file (PathGlobMatcher("a/b/c.txt")), FileWalker won't get deep | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
528 // to the file unless matcher would also explicitly include "a/", "a/b/" in scope. Since I can't rely | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
529 // users would write robust matchers, and I don't see a decent way to enforce that (i.e. factory to produce | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
530 // correct matcher from Path is much like what PathScope does, and can be accessed directly with #create(repo, Path...) | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
531 // method above/ | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
532 return new HgWorkingCopyStatusCollector(hgRepo, wf); | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
533 } | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
534 | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
535 private static class FileListIterator implements FileIterator { | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
536 private final File dir; | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
537 private final Path[] paths; | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
538 private int index; | 
| 
287
 
ed6b74a58c66
Use FileInfo abstraction with necessary subset of File functionality instead of File to facilitate other effective file system iterators
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
285 
diff
changeset
 | 
539 private RegularFileInfo nextFile; | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
540 | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
541 public FileListIterator(File startDir, Path... files) { | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
542 dir = startDir; | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
543 paths = files; | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
544 reset(); | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
545 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
546 | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
547 public void reset() { | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
548 index = -1; | 
| 
287
 
ed6b74a58c66
Use FileInfo abstraction with necessary subset of File functionality instead of File to facilitate other effective file system iterators
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
285 
diff
changeset
 | 
549 nextFile = new RegularFileInfo(); | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
550 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
551 | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
552 public boolean hasNext() { | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
553 return paths.length > 0 && index < paths.length-1; | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
554 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
555 | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
556 public void next() { | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
557 index++; | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
558 if (index == paths.length) { | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
559 throw new NoSuchElementException(); | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
560 } | 
| 
287
 
ed6b74a58c66
Use FileInfo abstraction with necessary subset of File functionality instead of File to facilitate other effective file system iterators
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
285 
diff
changeset
 | 
561 nextFile.init(new File(dir, paths[index].toString())); | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
562 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
563 | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
564 public Path name() { | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
565 return paths[index]; | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
566 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
567 | 
| 
287
 
ed6b74a58c66
Use FileInfo abstraction with necessary subset of File functionality instead of File to facilitate other effective file system iterators
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
285 
diff
changeset
 | 
568 public FileInfo file() { | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
569 return nextFile; | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
570 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
571 | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
572 public boolean inScope(Path file) { | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
573 for (int i = 0; i < paths.length; i++) { | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
574 if (paths[i].equals(file)) { | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
575 return true; | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
576 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
577 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
578 return false; | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
579 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
580 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
581 | 
| 
229
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
582 private static class FileIteratorFilter implements FileIterator { | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
583 private final Path.Matcher filter; | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
584 private final FileIterator walker; | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
585 private boolean didNext = false; | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
586 | 
| 
229
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
587 public FileIteratorFilter(FileIterator fileWalker, Path.Matcher filterMatcher) { | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
588 assert fileWalker != null; | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
589 assert filterMatcher != null; | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
590 filter = filterMatcher; | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
591 walker = fileWalker; | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
592 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
593 | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
594 public void reset() { | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
595 walker.reset(); | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
596 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
597 | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
598 public boolean hasNext() { | 
| 
229
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
599 while (walker.hasNext()) { | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
600 walker.next(); | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
601 if (filter.accept(walker.name())) { | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
602 didNext = true; | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
603 return true; | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
604 } | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
605 } | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
606 return false; | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
607 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
608 | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
609 public void next() { | 
| 
229
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
610 if (didNext) { | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
611 didNext = false; | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
612 } else { | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
613 if (!hasNext()) { | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
614 throw new NoSuchElementException(); | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
615 } | 
| 
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
616 } | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
617 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
618 | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
619 public Path name() { | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
620 return walker.name(); | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
621 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
622 | 
| 
287
 
ed6b74a58c66
Use FileInfo abstraction with necessary subset of File functionality instead of File to facilitate other effective file system iterators
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
285 
diff
changeset
 | 
623 public FileInfo file() { | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
624 return walker.file(); | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
625 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
626 | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
627 public boolean inScope(Path file) { | 
| 
229
 
1ec6b327a6ac
Scope for status reworked: explicit files or a general matcher
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
226 
diff
changeset
 | 
628 return filter.accept(file); | 
| 
226
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
629 } | 
| 
 
26ad7827a62d
Support status query for a single file or a subdirectory of a repository
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
219 
diff
changeset
 | 
630 } | 
| 
58
 
4cfc47bc14cc
Status against local working dir extracted into distinct class. Iterating over local files extracted for ease of os-dependant patching
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
631 } | 
