Mercurial > jhg
annotate src/org/tmatesoft/hg/repo/HgDirstate.java @ 245:2fb439375ddc
Avoid sorting revision range twice
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Thu, 14 Jul 2011 03:18:37 +0200 | 
| parents | 1792b37650f2 | 
| children | a6d19adc2636 | 
| 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 /* | 
| 74 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
59diff
changeset | 2 * Copyright (c) 2010-2011 TMate Software Ltd | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
59diff
changeset | 3 * | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
59diff
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: 
59diff
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: 
59diff
changeset | 6 * the Free Software Foundation; version 2 of the License. | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
59diff
changeset | 7 * | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
59diff
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: 
59diff
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: 
59diff
changeset | 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
59diff
changeset | 11 * GNU General Public License for more details. | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
59diff
changeset | 12 * | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
59diff
changeset | 13 * For information on how to redistribute this software under | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
59diff
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: 
93diff
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: 
59diff
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 | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 19 import java.io.File; | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 20 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 | 21 import java.util.Collections; | 
| 18 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 22 import java.util.LinkedHashMap; | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 23 import java.util.Map; | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 24 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 | 25 | 
| 231 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 26 import org.tmatesoft.hg.core.HgBadStateException; | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 27 import org.tmatesoft.hg.core.Nodeid; | 
| 74 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
59diff
changeset | 28 import org.tmatesoft.hg.internal.DataAccess; | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
59diff
changeset | 29 import org.tmatesoft.hg.internal.DataAccessProvider; | 
| 141 
8248aae33f7d
Adopt FileIterator moving towards WCStatusCollector parameterizing. Improved path handling, move 'em around
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
102diff
changeset | 30 import org.tmatesoft.hg.util.Path; | 
| 74 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
59diff
changeset | 31 | 
| 10 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 32 | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 33 /** | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 34 * @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 | 35 * @see http://mercurial.selenic.com/wiki/FileFormats#dirstate | 
| 74 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
59diff
changeset | 36 * | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
59diff
changeset | 37 * @author Artem Tikhomirov | 
| 
6f1b88693d48
Complete refactoring to org.tmatesoft
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
59diff
changeset | 38 * @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 | 39 */ | 
| 93 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
74diff
changeset | 40 class HgDirstate { | 
| 10 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 41 | 
| 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: 
18diff
changeset | 42 private final DataAccessProvider accessProvider; | 
| 10 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 43 private final File dirstateFile; | 
| 141 
8248aae33f7d
Adopt FileIterator moving towards WCStatusCollector parameterizing. Improved path handling, move 'em around
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
102diff
changeset | 44 // deliberate String, not Path as it seems useless to keep Path here | 
| 18 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 45 private Map<String, Record> normal; | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 46 private Map<String, Record> added; | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 47 private Map<String, Record> removed; | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 48 private Map<String, Record> merged; | 
| 231 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 49 private Nodeid p1, p2; | 
| 10 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 50 | 
| 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: 
18diff
changeset | 51 /*package-local*/ HgDirstate() { | 
| 
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: 
18diff
changeset | 52 // empty instance | 
| 
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: 
18diff
changeset | 53 accessProvider = 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: 
18diff
changeset | 54 dirstateFile = 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: 
18diff
changeset | 55 } | 
| 
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: 
18diff
changeset | 56 | 
| 
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: 
18diff
changeset | 57 public HgDirstate(DataAccessProvider dap, File 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: 
18diff
changeset | 58 accessProvider = dap; | 
| 
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: 
18diff
changeset | 59 dirstateFile = dirstate; | 
| 10 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 60 } | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 61 | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 62 private void read() { | 
| 18 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 63 normal = added = removed = merged = Collections.<String, Record>emptyMap(); | 
| 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: 
18diff
changeset | 64 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 | 65 return; | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 66 } | 
| 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: 
18diff
changeset | 67 DataAccess da = accessProvider.create(dirstateFile); | 
| 10 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 68 if (da.isEmpty()) { | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 69 return; | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 70 } | 
| 18 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 71 // not sure linked is really needed here, just for ease of debug | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 72 normal = new LinkedHashMap<String, Record>(); | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 73 added = new LinkedHashMap<String, Record>(); | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 74 removed = new LinkedHashMap<String, Record>(); | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 75 merged = new LinkedHashMap<String, Record>(); | 
| 10 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 76 try { | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 77 byte[] parents = new byte[40]; | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 78 da.readBytes(parents, 0, 40); | 
| 231 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 79 p1 = Nodeid.fromBinary(parents, 0); | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 80 p2 = Nodeid.fromBinary(parents, 20); | 
| 10 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 81 parents = null; | 
| 227 
0fd10e5016dd
IOException on empty repository with 40-byte dirstate
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
141diff
changeset | 82 // 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: 
141diff
changeset | 83 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 | 84 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 | 85 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 | 86 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 | 87 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 | 88 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 | 89 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 | 90 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 | 91 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 | 92 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 | 93 if (name[i] == 0) { | 
| 11 
d46773d89a19
Boundary error in dirstate entry, explicit encoding to face troubles (if any) asap.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
10diff
changeset | 94 fn1 = new String(name, 0, i, "UTF-8"); // XXX unclear from documentation what encoding is used there | 
| 
d46773d89a19
Boundary error in dirstate entry, explicit encoding to face troubles (if any) asap.
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
10diff
changeset | 95 fn2 = new String(name, i+1, nameLen - i - 1, "UTF-8"); // need to check with different system codepages | 
| 10 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 96 break; | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 97 } | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 98 } | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 99 if (fn1 == null) { | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 100 fn1 = new String(name); | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 101 } | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 102 Record r = new Record(fmode, size, time, fn1, fn2); | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 103 if (state == 'n') { | 
| 18 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 104 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 | 105 } else if (state == 'a') { | 
| 18 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 106 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 | 107 } else if (state == 'r') { | 
| 18 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 108 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 | 109 } else if (state == 'm') { | 
| 18 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 110 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 | 111 } else { | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 112 // FIXME log error? | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 113 } | 
| 227 
0fd10e5016dd
IOException on empty repository with 40-byte dirstate
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
141diff
changeset | 114 } | 
| 10 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 115 } catch (IOException ex) { | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 116 ex.printStackTrace(); // FIXME log error, clean dirstate? | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 117 } finally { | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 118 da.done(); | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 119 } | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 120 } | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 121 | 
| 231 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 122 // do not read whole dirstate if all we need is WC parent information | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 123 private void readParents() { | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 124 if (dirstateFile == null || !dirstateFile.exists()) { | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 125 return; | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 126 } | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 127 DataAccess da = accessProvider.create(dirstateFile); | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 128 if (da.isEmpty()) { | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 129 return; | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 130 } | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 131 try { | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 132 byte[] parents = new byte[40]; | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 133 da.readBytes(parents, 0, 40); | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 134 p1 = Nodeid.fromBinary(parents, 0); | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 135 p2 = Nodeid.fromBinary(parents, 20); | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 136 parents = null; | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 137 } catch (IOException ex) { | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 138 throw new HgBadStateException(ex); // XXX in fact, our exception is not the best solution here. | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 139 } finally { | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 140 da.done(); | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 141 } | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 142 } | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 143 | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 144 /** | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 145 * @return array of length 2 with working copy parents, non null. | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 146 */ | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 147 public Nodeid[] parents() { | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 148 if (p1 == null) { | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 149 readParents(); | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 150 } | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 151 Nodeid[] rv = new Nodeid[2]; | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 152 rv[0] = p1; | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 153 rv[1] = p2; | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 154 return rv; | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 155 } | 
| 
1792b37650f2
Introduced access to conflict resolution information (merge state)
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
227diff
changeset | 156 | 
| 18 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 157 // new, modifiable collection | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 158 /*package-local*/ TreeSet<String> all() { | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 159 read(); | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 160 TreeSet<String> rv = new TreeSet<String>(); | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 161 @SuppressWarnings("unchecked") | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 162 Map<String, Record>[] all = new Map[] { normal, added, removed, merged }; | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 163 for (int i = 0; i < all.length; i++) { | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 164 for (Record r : all[i].values()) { | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 165 rv.add(r.name1); | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 166 } | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 167 } | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 168 return rv; | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 169 } | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 170 | 
| 141 
8248aae33f7d
Adopt FileIterator moving towards WCStatusCollector parameterizing. Improved path handling, move 'em around
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
102diff
changeset | 171 /*package-local*/ Record checkNormal(Path fname) { | 
| 
8248aae33f7d
Adopt FileIterator moving towards WCStatusCollector parameterizing. Improved path handling, move 'em around
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
102diff
changeset | 172 return normal.get(fname.toString()); | 
| 18 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 173 } | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 174 | 
| 141 
8248aae33f7d
Adopt FileIterator moving towards WCStatusCollector parameterizing. Improved path handling, move 'em around
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
102diff
changeset | 175 /*package-local*/ Record checkAdded(Path fname) { | 
| 
8248aae33f7d
Adopt FileIterator moving towards WCStatusCollector parameterizing. Improved path handling, move 'em around
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
102diff
changeset | 176 return added.get(fname.toString()); | 
| 
8248aae33f7d
Adopt FileIterator moving towards WCStatusCollector parameterizing. Improved path handling, move 'em around
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
102diff
changeset | 177 } | 
| 
8248aae33f7d
Adopt FileIterator moving towards WCStatusCollector parameterizing. Improved path handling, move 'em around
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
102diff
changeset | 178 /*package-local*/ Record checkRemoved(Path fname) { | 
| 
8248aae33f7d
Adopt FileIterator moving towards WCStatusCollector parameterizing. Improved path handling, move 'em around
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
102diff
changeset | 179 return removed.get(fname.toString()); | 
| 18 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 180 } | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 181 /*package-local*/ Record checkRemoved(String fname) { | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 182 return removed.get(fname); | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 183 } | 
| 141 
8248aae33f7d
Adopt FileIterator moving towards WCStatusCollector parameterizing. Improved path handling, move 'em around
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
102diff
changeset | 184 /*package-local*/ Record checkMerged(Path fname) { | 
| 
8248aae33f7d
Adopt FileIterator moving towards WCStatusCollector parameterizing. Improved path handling, move 'em around
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
102diff
changeset | 185 return merged.get(fname.toString()); | 
| 18 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 186 } | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 187 | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 188 | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 189 | 
| 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 190 | 
| 93 
d55d4eedfc57
Switch to Path instead of String in filenames returned by various status operations
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
74diff
changeset | 191 /*package-local*/ void dump() { | 
| 10 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 192 read(); | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 193 @SuppressWarnings("unchecked") | 
| 18 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 194 Map<String, Record>[] all = new Map[] { normal, added, removed, merged }; | 
| 10 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 195 char[] x = new char[] {'n', 'a', 'r', 'm' }; | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 196 for (int i = 0; i < all.length; i++) { | 
| 18 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 197 for (Record r : all[i].values()) { | 
| 14 
442dc6ee647b
Show correct time
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
12diff
changeset | 198 System.out.printf("%c %3o%6d %30tc\t\t%s", x[i], r.mode, r.size, (long) r.time * 1000, r.name1); | 
| 10 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 199 if (r.name2 != null) { | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 200 System.out.printf(" --> %s", r.name2); | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 201 } | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 202 System.out.println(); | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 203 } | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 204 System.out.println(); | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 205 } | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 206 } | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 207 | 
| 18 
02ee376bee79
status operation against current working directory
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
14diff
changeset | 208 /*package-local*/ static class Record { | 
| 10 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 209 final int mode; | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 210 final int size; | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 211 final int time; | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 212 final String name1; | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 213 final String name2; | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 214 | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 215 public Record(int fmode, int fsize, int ftime, String name1, String name2) { | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 216 mode = fmode; | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 217 size = fsize; | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 218 time = ftime; | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 219 this.name1 = name1; | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 220 this.name2 = name2; | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 221 | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 222 } | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 223 } | 
| 
382cfe9463db
Dirstate parsing. DataAccess refactored to allow reuse and control over constants
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 224 } | 
