Mercurial > jhg
annotate src/org/tmatesoft/hg/repo/HgDirstate.java @ 503:0bd2d0441d8f
Add lookup of remote paths from repository's .hg/hgrc, respect default (origin)
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Wed, 31 Oct 2012 15:17:21 +0100 | 
| parents | d2f6ab541330 | 
| children | 0be5be8d57e9 | 
| rev | line source | 
|---|---|
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
1 /* | 
| 
412
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
388 
diff
changeset
 | 
2 * Copyright (c) 2010-2012 TMate Software Ltd | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
59 
diff
changeset
 | 
3 * | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
59 
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: 
59 
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: 
59 
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: 
59 
diff
changeset
 | 
7 * | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
59 
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: 
59 
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: 
59 
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: 
59 
diff
changeset
 | 
11 * GNU General Public License for more details. | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
59 
diff
changeset
 | 
12 * | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
59 
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: 
59 
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: 
93 
diff
changeset
 | 
15 * contact TMate Software at support@hg4j.com | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
16 */ | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
59 
diff
changeset
 | 
17 package org.tmatesoft.hg.repo; | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
18 | 
| 
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: 
280 
diff
changeset
 | 
19 import static org.tmatesoft.hg.core.Nodeid.NULL; | 
| 
490
 
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
20 import static org.tmatesoft.hg.repo.HgRepositoryFiles.Dirstate; | 
| 
456
 
909306e412e2
Refactor LogFacility and SessionContext, better API for both
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
431 
diff
changeset
 | 
21 import static org.tmatesoft.hg.util.LogFacility.Severity.Debug; | 
| 
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: 
280 
diff
changeset
 | 
22 | 
| 
252
 
a6d19adc2636
HgRepository.getWorkingCopyBranchName() to retrieve branch associated with working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
231 
diff
changeset
 | 
23 import java.io.BufferedReader; | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
24 import java.io.File; | 
| 
348
 
a0864b2892cd
Expose errors reading mercurial control files with exception
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
332 
diff
changeset
 | 
25 import java.io.FileNotFoundException; | 
| 
252
 
a6d19adc2636
HgRepository.getWorkingCopyBranchName() to retrieve branch associated with working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
231 
diff
changeset
 | 
26 import java.io.FileReader; | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
27 import java.io.IOException; | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
28 import java.util.Collections; | 
| 
293
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
29 import java.util.HashMap; | 
| 
18
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
30 import java.util.LinkedHashMap; | 
| 
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
31 import java.util.Map; | 
| 
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
32 import java.util.TreeSet; | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
33 | 
| 
231
 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
227 
diff
changeset
 | 
34 import org.tmatesoft.hg.core.Nodeid; | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
59 
diff
changeset
 | 
35 import org.tmatesoft.hg.internal.DataAccess; | 
| 
412
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
388 
diff
changeset
 | 
36 import org.tmatesoft.hg.internal.EncodingHelper; | 
| 
490
 
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
37 import org.tmatesoft.hg.internal.Internals; | 
| 
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: 
280 
diff
changeset
 | 
38 import org.tmatesoft.hg.util.Pair; | 
| 
141
 
8248aae33f7d
Adopt FileIterator moving towards WCStatusCollector parameterizing. Improved path handling, move 'em around
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
39 import org.tmatesoft.hg.util.Path; | 
| 
291
 
1483e57541ef
Refactor PathRewrite to accept any char sequence, not only string
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
290 
diff
changeset
 | 
40 import org.tmatesoft.hg.util.PathRewrite; | 
| 
456
 
909306e412e2
Refactor LogFacility and SessionContext, better API for both
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
431 
diff
changeset
 | 
41 import org.tmatesoft.hg.util.LogFacility.Severity; | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
59 
diff
changeset
 | 
42 | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
43 | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
44 /** | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
45 * @see http://mercurial.selenic.com/wiki/DirState | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
46 * @see http://mercurial.selenic.com/wiki/FileFormats#dirstate | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
59 
diff
changeset
 | 
47 * | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
59 
diff
changeset
 | 
48 * @author Artem Tikhomirov | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
59 
diff
changeset
 | 
49 * @author TMate Software Ltd. | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
50 */ | 
| 
290
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
51 public final class HgDirstate /* XXX RepoChangeListener */{ | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
52 | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
53 public enum EntryKind { | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
54 Normal, Added, Removed, Merged, // order is being used in code of this class, don't change unless any use is checked | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
55 } | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
56 | 
| 
490
 
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
57 private final Internals repo; | 
| 
431
 
12f668401613
FIXMEs: awkward API refactored, what need to be internal got hidden; public aspects got captured in slim interfaces
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
430 
diff
changeset
 | 
58 private final Path.Source pathPool; | 
| 
291
 
1483e57541ef
Refactor PathRewrite to accept any char sequence, not only string
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
290 
diff
changeset
 | 
59 private final PathRewrite canonicalPathRewrite; | 
| 
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: 
280 
diff
changeset
 | 
60 private Map<Path, Record> normal; | 
| 
 
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: 
280 
diff
changeset
 | 
61 private Map<Path, Record> added; | 
| 
 
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: 
280 
diff
changeset
 | 
62 private Map<Path, Record> removed; | 
| 
 
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: 
280 
diff
changeset
 | 
63 private Map<Path, Record> merged; | 
| 
293
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
64 /* map of canonicalized file names to their originals from dirstate file. | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
65 * Note, only those canonical names that differ from their dirstate counterpart are recorded here | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
66 */ | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
67 private Map<Path, Path> canonical2dirstateName; | 
| 
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: 
280 
diff
changeset
 | 
68 private Pair<Nodeid, Nodeid> parents; | 
| 
252
 
a6d19adc2636
HgRepository.getWorkingCopyBranchName() to retrieve branch associated with working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
231 
diff
changeset
 | 
69 | 
| 
291
 
1483e57541ef
Refactor PathRewrite to accept any char sequence, not only string
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
290 
diff
changeset
 | 
70 // canonicalPath may be null if we don't need to check for names other than in dirstate | 
| 
490
 
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
71 /*package-local*/ HgDirstate(Internals hgRepo, Path.Source pathSource, PathRewrite canonicalPath) { | 
| 
252
 
a6d19adc2636
HgRepository.getWorkingCopyBranchName() to retrieve branch associated with working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
231 
diff
changeset
 | 
72 repo = hgRepo; | 
| 
431
 
12f668401613
FIXMEs: awkward API refactored, what need to be internal got hidden; public aspects got captured in slim interfaces
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
430 
diff
changeset
 | 
73 pathPool = pathSource; | 
| 
291
 
1483e57541ef
Refactor PathRewrite to accept any char sequence, not only string
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
290 
diff
changeset
 | 
74 canonicalPathRewrite = canonicalPath; | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
75 } | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
76 | 
| 
490
 
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
77 /*package-local*/ void read() throws HgInvalidControlFileException { | 
| 
 
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
78 EncodingHelper encodingHelper = repo.buildFileNameEncodingHelper(); | 
| 
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: 
280 
diff
changeset
 | 
79 normal = added = removed = merged = Collections.<Path, Record>emptyMap(); | 
| 
371
 
aa2e589d4e84
NPE in HgWCStatusCollector:initDirstateParentManifest (aka AssertionError in HgDirstate:parents())
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
348 
diff
changeset
 | 
80 parents = new Pair<Nodeid,Nodeid>(Nodeid.NULL, Nodeid.NULL); | 
| 
332
 
72c6eda838a6
NPE in HgDirstate.known() when no dirstate file present
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
295 
diff
changeset
 | 
81 if (canonicalPathRewrite != null) { | 
| 
 
72c6eda838a6
NPE in HgDirstate.known() when no dirstate file present
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
295 
diff
changeset
 | 
82 canonical2dirstateName = new HashMap<Path,Path>(); | 
| 
 
72c6eda838a6
NPE in HgDirstate.known() when no dirstate file present
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
295 
diff
changeset
 | 
83 } else { | 
| 
 
72c6eda838a6
NPE in HgDirstate.known() when no dirstate file present
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
295 
diff
changeset
 | 
84 canonical2dirstateName = Collections.emptyMap(); | 
| 
 
72c6eda838a6
NPE in HgDirstate.known() when no dirstate file present
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
295 
diff
changeset
 | 
85 } | 
| 
490
 
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
86 File dirstateFile = getDirstateFile(repo); | 
| 
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: 
18 
diff
changeset
 | 
87 if (dirstateFile == null || !dirstateFile.exists()) { | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
88 return; | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
89 } | 
| 
252
 
a6d19adc2636
HgRepository.getWorkingCopyBranchName() to retrieve branch associated with working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
231 
diff
changeset
 | 
90 DataAccess da = repo.getDataAccess().create(dirstateFile); | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
91 try { | 
| 
421
 
fdd7d756dea0
Allow IOException from DataAccess methods for subclasses with non-trivial implementations, to avoid exception dumps when inapropriate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
418 
diff
changeset
 | 
92 if (da.isEmpty()) { | 
| 
 
fdd7d756dea0
Allow IOException from DataAccess methods for subclasses with non-trivial implementations, to avoid exception dumps when inapropriate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
418 
diff
changeset
 | 
93 return; | 
| 
 
fdd7d756dea0
Allow IOException from DataAccess methods for subclasses with non-trivial implementations, to avoid exception dumps when inapropriate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
418 
diff
changeset
 | 
94 } | 
| 
 
fdd7d756dea0
Allow IOException from DataAccess methods for subclasses with non-trivial implementations, to avoid exception dumps when inapropriate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
418 
diff
changeset
 | 
95 // not sure linked is really needed here, just for ease of debug | 
| 
 
fdd7d756dea0
Allow IOException from DataAccess methods for subclasses with non-trivial implementations, to avoid exception dumps when inapropriate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
418 
diff
changeset
 | 
96 normal = new LinkedHashMap<Path, Record>(); | 
| 
 
fdd7d756dea0
Allow IOException from DataAccess methods for subclasses with non-trivial implementations, to avoid exception dumps when inapropriate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
418 
diff
changeset
 | 
97 added = new LinkedHashMap<Path, Record>(); | 
| 
 
fdd7d756dea0
Allow IOException from DataAccess methods for subclasses with non-trivial implementations, to avoid exception dumps when inapropriate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
418 
diff
changeset
 | 
98 removed = new LinkedHashMap<Path, Record>(); | 
| 
 
fdd7d756dea0
Allow IOException from DataAccess methods for subclasses with non-trivial implementations, to avoid exception dumps when inapropriate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
418 
diff
changeset
 | 
99 merged = new LinkedHashMap<Path, Record>(); | 
| 
 
fdd7d756dea0
Allow IOException from DataAccess methods for subclasses with non-trivial implementations, to avoid exception dumps when inapropriate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
418 
diff
changeset
 | 
100 | 
| 
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: 
280 
diff
changeset
 | 
101 parents = internalReadParents(da); | 
| 
227
 
0fd10e5016dd
IOException on empty repository with 40-byte dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
141 
diff
changeset
 | 
102 // hg init; hg up produces an empty repository where dirstate has parents (40 bytes) only | 
| 
 
0fd10e5016dd
IOException on empty repository with 40-byte dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
141 
diff
changeset
 | 
103 while (!da.isEmpty()) { | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
104 final byte state = da.readByte(); | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
105 final int fmode = da.readInt(); | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
106 final int size = da.readInt(); | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
107 final int time = da.readInt(); | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
108 final int nameLen = da.readInt(); | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
109 String fn1 = null, fn2 = null; | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
110 byte[] name = new byte[nameLen]; | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
111 da.readBytes(name, 0, nameLen); | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
112 for (int i = 0; i < nameLen; i++) { | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
113 if (name[i] == 0) { | 
| 
412
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
388 
diff
changeset
 | 
114 fn1 = encodingHelper.fromDirstate(name, 0, i); | 
| 
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
388 
diff
changeset
 | 
115 fn2 = encodingHelper.fromDirstate(name, i+1, nameLen - i - 1); | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
116 break; | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
117 } | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
118 } | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
119 if (fn1 == null) { | 
| 
412
 
63c5a9d7ca3f
Follow-up for Issue 29: unify path translation for manifest and dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
388 
diff
changeset
 | 
120 fn1 = encodingHelper.fromDirstate(name, 0, nameLen); | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
121 } | 
| 
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: 
280 
diff
changeset
 | 
122 Record r = new Record(fmode, size, time, pathPool.path(fn1), fn2 == null ? null : pathPool.path(fn2)); | 
| 
293
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
123 if (canonicalPathRewrite != null) { | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
124 Path canonicalPath = pathPool.path(canonicalPathRewrite.rewrite(fn1).toString()); | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
125 if (canonicalPath != r.name()) { // == as they come from the same pool | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
126 assert !canonical2dirstateName.containsKey(canonicalPath); // otherwise there's already a file with same canonical name | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
127 // which can't happen for case-insensitive file system (or there's erroneous PathRewrite, perhaps doing smth else) | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
128 canonical2dirstateName.put(canonicalPath, r.name()); | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
129 } | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
130 if (fn2 != null) { | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
131 // not sure I need copy origin in the map, I don't seem to use it anywhere, | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
132 // but I guess I'll have to use it some day. | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
133 canonicalPath = pathPool.path(canonicalPathRewrite.rewrite(fn2).toString()); | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
134 if (canonicalPath != r.copySource()) { | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
135 canonical2dirstateName.put(canonicalPath, r.copySource()); | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
136 } | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
137 } | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
138 } | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
139 if (state == 'n') { | 
| 
18
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
140 normal.put(r.name1, r); | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
141 } else if (state == 'a') { | 
| 
18
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
142 added.put(r.name1, r); | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
143 } else if (state == 'r') { | 
| 
18
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
144 removed.put(r.name1, r); | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
145 } else if (state == 'm') { | 
| 
18
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
146 merged.put(r.name1, r); | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
147 } else { | 
| 
501
 
d2f6ab541330
Change the way extensions are accessed (with ExtensionsManager now), add preliminary Rebase extension support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
490 
diff
changeset
 | 
148 repo.getSessionContext().getLog().dump(getClass(), Severity.Warn, "Dirstate record for file %s (size: %d, tstamp:%d) has unknown state '%c'", r.name1, r.size(), r.time, state); | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
149 } | 
| 
227
 
0fd10e5016dd
IOException on empty repository with 40-byte dirstate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
141 
diff
changeset
 | 
150 } | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
151 } catch (IOException ex) { | 
| 
348
 
a0864b2892cd
Expose errors reading mercurial control files with exception
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
332 
diff
changeset
 | 
152 throw new HgInvalidControlFileException("Dirstate read failed", ex, dirstateFile); | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
153 } finally { | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
154 da.done(); | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
155 } | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
156 } | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
157 | 
| 
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: 
280 
diff
changeset
 | 
158 private static Pair<Nodeid, Nodeid> internalReadParents(DataAccess da) throws IOException { | 
| 
 
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: 
280 
diff
changeset
 | 
159 byte[] parents = new byte[40]; | 
| 
 
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: 
280 
diff
changeset
 | 
160 da.readBytes(parents, 0, 40); | 
| 
 
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: 
280 
diff
changeset
 | 
161 Nodeid n1 = Nodeid.fromBinary(parents, 0); | 
| 
 
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: 
280 
diff
changeset
 | 
162 Nodeid n2 = Nodeid.fromBinary(parents, 20); | 
| 
 
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: 
280 
diff
changeset
 | 
163 parents = null; | 
| 
 
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: 
280 
diff
changeset
 | 
164 return new Pair<Nodeid, Nodeid>(n1, n2); | 
| 
 
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: 
280 
diff
changeset
 | 
165 } | 
| 
 
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: 
280 
diff
changeset
 | 
166 | 
| 
 
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: 
280 
diff
changeset
 | 
167 /** | 
| 
290
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
168 * @return pair of working copy parents, with {@link Nodeid#NULL} for missing values. | 
| 
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: 
280 
diff
changeset
 | 
169 */ | 
| 
 
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: 
280 
diff
changeset
 | 
170 public Pair<Nodeid,Nodeid> parents() { | 
| 
348
 
a0864b2892cd
Expose errors reading mercurial control files with exception
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
332 
diff
changeset
 | 
171 assert parents != null; // instance not initialized with #read() | 
| 
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: 
280 
diff
changeset
 | 
172 return parents; | 
| 
 
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: 
280 
diff
changeset
 | 
173 } | 
| 
 
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: 
280 
diff
changeset
 | 
174 | 
| 
490
 
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
175 private static File getDirstateFile(Internals repo) { | 
| 
 
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
176 return repo.getFileFromRepoDir(Dirstate.getName()); | 
| 
 
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
177 } | 
| 
 
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
178 | 
| 
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: 
280 
diff
changeset
 | 
179 /** | 
| 
 
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: 
280 
diff
changeset
 | 
180 * @return pair of parents, both {@link Nodeid#NULL} if dirstate is not available | 
| 
 
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: 
280 
diff
changeset
 | 
181 */ | 
| 
490
 
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
182 /*package-local*/ static Pair<Nodeid, Nodeid> readParents(Internals internalRepo) throws HgInvalidControlFileException { | 
| 
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: 
280 
diff
changeset
 | 
183 // do not read whole dirstate if all we need is WC parent information | 
| 
490
 
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
184 File dirstateFile = getDirstateFile(internalRepo); | 
| 
231
 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
227 
diff
changeset
 | 
185 if (dirstateFile == null || !dirstateFile.exists()) { | 
| 
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: 
280 
diff
changeset
 | 
186 return new Pair<Nodeid,Nodeid>(NULL, NULL); | 
| 
231
 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
227 
diff
changeset
 | 
187 } | 
| 
490
 
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
188 DataAccess da = internalRepo.getDataAccess().create(dirstateFile); | 
| 
231
 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
227 
diff
changeset
 | 
189 try { | 
| 
421
 
fdd7d756dea0
Allow IOException from DataAccess methods for subclasses with non-trivial implementations, to avoid exception dumps when inapropriate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
418 
diff
changeset
 | 
190 if (da.isEmpty()) { | 
| 
 
fdd7d756dea0
Allow IOException from DataAccess methods for subclasses with non-trivial implementations, to avoid exception dumps when inapropriate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
418 
diff
changeset
 | 
191 return new Pair<Nodeid,Nodeid>(NULL, NULL); | 
| 
 
fdd7d756dea0
Allow IOException from DataAccess methods for subclasses with non-trivial implementations, to avoid exception dumps when inapropriate
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
418 
diff
changeset
 | 
192 } | 
| 
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: 
280 
diff
changeset
 | 
193 return internalReadParents(da); | 
| 
231
 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
227 
diff
changeset
 | 
194 } catch (IOException ex) { | 
| 
348
 
a0864b2892cd
Expose errors reading mercurial control files with exception
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
332 
diff
changeset
 | 
195 throw new HgInvalidControlFileException("Error reading working copy parents from dirstate", ex, dirstateFile); | 
| 
231
 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
227 
diff
changeset
 | 
196 } finally { | 
| 
 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
227 
diff
changeset
 | 
197 da.done(); | 
| 
 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
227 
diff
changeset
 | 
198 } | 
| 
 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
227 
diff
changeset
 | 
199 } | 
| 
 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
227 
diff
changeset
 | 
200 | 
| 
 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
227 
diff
changeset
 | 
201 /** | 
| 
430
 
d280759c2a3f
branch information is not directly related to dirstate, clean API from this dependency
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
423 
diff
changeset
 | 
202 * TODO [post-1.0] it's really not a proper place for the method, need WorkingCopyContainer or similar | 
| 
252
 
a6d19adc2636
HgRepository.getWorkingCopyBranchName() to retrieve branch associated with working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
231 
diff
changeset
 | 
203 * @return branch associated with the working directory | 
| 
 
a6d19adc2636
HgRepository.getWorkingCopyBranchName() to retrieve branch associated with working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
231 
diff
changeset
 | 
204 */ | 
| 
490
 
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
205 /*package-local*/ static String readBranch(Internals internalRepo) throws HgInvalidControlFileException { | 
| 
 
b3c16d1aede0
Refactoring: move HgRepository's implementation aspects to Internals (which is now its imlementation counterpart and primary repository class to be used by other parts of the library)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
456 
diff
changeset
 | 
206 File branchFile = internalRepo.getFileFromRepoDir("branch"); | 
| 
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: 
280 
diff
changeset
 | 
207 String branch = HgRepository.DEFAULT_BRANCH_NAME; | 
| 
 
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: 
280 
diff
changeset
 | 
208 if (branchFile.exists()) { | 
| 
 
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: 
280 
diff
changeset
 | 
209 try { | 
| 
 
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: 
280 
diff
changeset
 | 
210 BufferedReader r = new BufferedReader(new FileReader(branchFile)); | 
| 
 
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: 
280 
diff
changeset
 | 
211 String b = r.readLine(); | 
| 
 
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: 
280 
diff
changeset
 | 
212 if (b != null) { | 
| 
 
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: 
280 
diff
changeset
 | 
213 b = b.trim().intern(); | 
| 
 
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: 
280 
diff
changeset
 | 
214 } | 
| 
 
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: 
280 
diff
changeset
 | 
215 branch = b == null || b.length() == 0 ? HgRepository.DEFAULT_BRANCH_NAME : b; | 
| 
 
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: 
280 
diff
changeset
 | 
216 r.close(); | 
| 
348
 
a0864b2892cd
Expose errors reading mercurial control files with exception
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
332 
diff
changeset
 | 
217 } catch (FileNotFoundException ex) { | 
| 
501
 
d2f6ab541330
Change the way extensions are accessed (with ExtensionsManager now), add preliminary Rebase extension support
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
490 
diff
changeset
 | 
218 internalRepo.getSessionContext().getLog().dump(HgDirstate.class, Debug, ex, null); // log verbose debug, exception might be legal here | 
| 
348
 
a0864b2892cd
Expose errors reading mercurial control files with exception
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
332 
diff
changeset
 | 
219 // IGNORE | 
| 
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: 
280 
diff
changeset
 | 
220 } catch (IOException ex) { | 
| 
348
 
a0864b2892cd
Expose errors reading mercurial control files with exception
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
332 
diff
changeset
 | 
221 throw new HgInvalidControlFileException("Error reading file with branch information", ex, branchFile); | 
| 
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: 
280 
diff
changeset
 | 
222 } | 
| 
 
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: 
280 
diff
changeset
 | 
223 } | 
| 
 
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: 
280 
diff
changeset
 | 
224 return branch; | 
| 
 
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: 
280 
diff
changeset
 | 
225 } | 
| 
231
 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
227 
diff
changeset
 | 
226 | 
| 
18
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
227 // new, modifiable collection | 
| 
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: 
280 
diff
changeset
 | 
228 /*package-local*/ TreeSet<Path> all() { | 
| 
348
 
a0864b2892cd
Expose errors reading mercurial control files with exception
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
332 
diff
changeset
 | 
229 assert normal != 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: 
280 
diff
changeset
 | 
230 TreeSet<Path> rv = new TreeSet<Path>(); | 
| 
18
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
231 @SuppressWarnings("unchecked") | 
| 
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: 
280 
diff
changeset
 | 
232 Map<Path, Record>[] all = new Map[] { normal, added, removed, merged }; | 
| 
18
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
233 for (int i = 0; i < all.length; i++) { | 
| 
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
234 for (Record r : all[i].values()) { | 
| 
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
235 rv.add(r.name1); | 
| 
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
236 } | 
| 
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
237 } | 
| 
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
238 return rv; | 
| 
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
239 } | 
| 
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
240 | 
| 
141
 
8248aae33f7d
Adopt FileIterator moving towards WCStatusCollector parameterizing. Improved path handling, move 'em around
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
241 /*package-local*/ Record checkNormal(Path fname) { | 
| 
293
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
242 return internalCheck(normal, fname); | 
| 
18
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
243 } | 
| 
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
244 | 
| 
141
 
8248aae33f7d
Adopt FileIterator moving towards WCStatusCollector parameterizing. Improved path handling, move 'em around
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
245 /*package-local*/ Record checkAdded(Path fname) { | 
| 
293
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
246 return internalCheck(added, fname); | 
| 
141
 
8248aae33f7d
Adopt FileIterator moving towards WCStatusCollector parameterizing. Improved path handling, move 'em around
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
247 } | 
| 
 
8248aae33f7d
Adopt FileIterator moving towards WCStatusCollector parameterizing. Improved path handling, move 'em around
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
248 /*package-local*/ Record checkRemoved(Path fname) { | 
| 
293
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
249 return internalCheck(removed, fname); | 
| 
18
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
250 } | 
| 
141
 
8248aae33f7d
Adopt FileIterator moving towards WCStatusCollector parameterizing. Improved path handling, move 'em around
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
251 /*package-local*/ Record checkMerged(Path fname) { | 
| 
293
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
252 return internalCheck(merged, fname); | 
| 
18
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
253 } | 
| 
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
254 | 
| 
293
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
255 | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
256 // return non-null if fname is known, either as is, or its canonical form. in latter case, this canonical form is return value | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
257 /*package-local*/ Path known(Path fname) { | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
258 Path fnameCanonical = null; | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
259 if (canonicalPathRewrite != null) { | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
260 fnameCanonical = pathPool.path(canonicalPathRewrite.rewrite(fname).toString()); | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
261 if (fnameCanonical != fname && canonical2dirstateName.containsKey(fnameCanonical)) { | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
262 // we know right away there's name in dirstate with alternative canonical form | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
263 return canonical2dirstateName.get(fnameCanonical); | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
264 } | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
265 } | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
266 @SuppressWarnings("unchecked") | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
267 Map<Path, Record>[] all = new Map[] { normal, added, removed, merged }; | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
268 for (int i = 0; i < all.length; i++) { | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
269 if (all[i].containsKey(fname)) { | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
270 return fname; | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
271 } | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
272 if (fnameCanonical != null && all[i].containsKey(fnameCanonical)) { | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
273 return fnameCanonical; | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
274 } | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
275 } | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
276 return null; | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
277 } | 
| 
18
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
278 | 
| 
293
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
279 private Record internalCheck(Map<Path, Record> map, Path fname) { | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
280 Record rv = map.get(fname); | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
281 if (rv != null || canonicalPathRewrite == null) { | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
282 return rv; | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
283 } | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
284 Path fnameCanonical = pathPool.path(canonicalPathRewrite.rewrite(fname).toString()); | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
285 if (fnameCanonical != fname) { | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
286 // case when fname = /a/B/c, and dirstate is /a/b/C | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
287 if (canonical2dirstateName.containsKey(fnameCanonical)) { | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
288 return map.get(canonical2dirstateName.get(fnameCanonical)); | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
289 } | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
290 // try canonical directly, fname = /a/B/C, dirstate has /a/b/c | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
291 if ((rv = map.get(fnameCanonical)) != null) { | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
292 return rv; | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
293 } | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
294 } | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
295 return null; | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
296 } | 
| 
18
 
02ee376bee79
status operation against current working directory
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
14 
diff
changeset
 | 
297 | 
| 
290
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
298 public void walk(Inspector inspector) { | 
| 
348
 
a0864b2892cd
Expose errors reading mercurial control files with exception
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
332 
diff
changeset
 | 
299 assert normal != null; | 
| 
290
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
300 @SuppressWarnings("unchecked") | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
301 Map<Path, Record>[] all = new Map[] { normal, added, removed, merged }; | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
302 for (int i = 0; i < all.length; i++) { | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
303 EntryKind k = EntryKind.values()[i]; | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
304 for (Record r : all[i].values()) { | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
305 if (!inspector.next(k, r)) { | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
306 return; | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
307 } | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
308 } | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
309 } | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
310 } | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
311 | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
312 public interface Inspector { | 
| 
293
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
313 /** | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
314 * Invoked for each entry in the directory state file | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
315 * @param kind file record kind | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
316 * @param entry file record. Note, do not cache instance as it may be reused between the calls | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
317 * @return <code>true</code> to indicate further records are still of interest, <code>false</code> to stop iteration | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
318 */ | 
| 
290
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
319 boolean next(EntryKind kind, Record entry); | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
320 } | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
321 | 
| 
293
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
322 public static final class Record implements Cloneable { | 
| 
290
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
323 private final int mode, size, time; | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
324 // Dirstate keeps local file size (i.e. that with any filters already applied). | 
| 
280
 
35125450c804
Erroneous and slow status for working copies based on non-tip revision
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
252 
diff
changeset
 | 
325 // Thus, can't compare directly to HgDataFile.length() | 
| 
290
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
326 private final Path name1, name2; | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
327 | 
| 
290
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
328 /*package-local*/ Record(int fmode, int fsize, int ftime, Path name1, Path name2) { | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
329 mode = fmode; | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
330 size = fsize; | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
331 time = ftime; | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
332 this.name1 = name1; | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
333 this.name2 = name2; | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
334 | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
335 } | 
| 
290
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
336 | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
337 public Path name() { | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
338 return name1; | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
339 } | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
340 | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
341 /** | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
342 * @return non-<code>null</code> for copy/move | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
343 */ | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
344 public Path copySource() { | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
345 return name2; | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
346 } | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
347 | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
348 public int modificationTime() { | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
349 return time; | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
350 } | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
351 | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
352 public int size() { | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
353 return size; | 
| 
 
8faad08c709b
Expose dirstate to allow pre-configuration of FileIterators for status collection in particular
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
284 
diff
changeset
 | 
354 } | 
| 
293
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
355 | 
| 
348
 
a0864b2892cd
Expose errors reading mercurial control files with exception
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
332 
diff
changeset
 | 
356 public int mode() { | 
| 
 
a0864b2892cd
Expose errors reading mercurial control files with exception
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
332 
diff
changeset
 | 
357 return mode; | 
| 
 
a0864b2892cd
Expose errors reading mercurial control files with exception
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
332 
diff
changeset
 | 
358 } | 
| 
 
a0864b2892cd
Expose errors reading mercurial control files with exception
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
332 
diff
changeset
 | 
359 | 
| 
293
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
360 @Override | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
361 public Record clone() { | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
362 try { | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
363 return (Record) super.clone(); | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
364 } catch (CloneNotSupportedException ex) { | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
365 throw new InternalError(ex.toString()); | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
366 } | 
| 
 
9774f47d904d
Issue 13: Status reports filenames with case other than in dirstate incorrectly
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
291 
diff
changeset
 | 
367 } | 
| 
10
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
368 } | 
| 
 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
369 } | 
