Mercurial > jhg
comparison src/org/tmatesoft/hg/repo/HgDirstate.java @ 231:1792b37650f2
Introduced access to conflict resolution information (merge state)
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Wed, 01 Jun 2011 05:44:25 +0200 |
parents | 0fd10e5016dd |
children | a6d19adc2636 |
comparison
equal
deleted
inserted
replaced
230:0dd9da7489dc | 231:1792b37650f2 |
---|---|
21 import java.util.Collections; | 21 import java.util.Collections; |
22 import java.util.LinkedHashMap; | 22 import java.util.LinkedHashMap; |
23 import java.util.Map; | 23 import java.util.Map; |
24 import java.util.TreeSet; | 24 import java.util.TreeSet; |
25 | 25 |
26 import org.tmatesoft.hg.core.HgBadStateException; | |
27 import org.tmatesoft.hg.core.Nodeid; | |
26 import org.tmatesoft.hg.internal.DataAccess; | 28 import org.tmatesoft.hg.internal.DataAccess; |
27 import org.tmatesoft.hg.internal.DataAccessProvider; | 29 import org.tmatesoft.hg.internal.DataAccessProvider; |
28 import org.tmatesoft.hg.util.Path; | 30 import org.tmatesoft.hg.util.Path; |
29 | 31 |
30 | 32 |
42 // deliberate String, not Path as it seems useless to keep Path here | 44 // deliberate String, not Path as it seems useless to keep Path here |
43 private Map<String, Record> normal; | 45 private Map<String, Record> normal; |
44 private Map<String, Record> added; | 46 private Map<String, Record> added; |
45 private Map<String, Record> removed; | 47 private Map<String, Record> removed; |
46 private Map<String, Record> merged; | 48 private Map<String, Record> merged; |
49 private Nodeid p1, p2; | |
47 | 50 |
48 /*package-local*/ HgDirstate() { | 51 /*package-local*/ HgDirstate() { |
49 // empty instance | 52 // empty instance |
50 accessProvider = null; | 53 accessProvider = null; |
51 dirstateFile = null; | 54 dirstateFile = null; |
69 normal = new LinkedHashMap<String, Record>(); | 72 normal = new LinkedHashMap<String, Record>(); |
70 added = new LinkedHashMap<String, Record>(); | 73 added = new LinkedHashMap<String, Record>(); |
71 removed = new LinkedHashMap<String, Record>(); | 74 removed = new LinkedHashMap<String, Record>(); |
72 merged = new LinkedHashMap<String, Record>(); | 75 merged = new LinkedHashMap<String, Record>(); |
73 try { | 76 try { |
74 // XXX skip(40) if we don't need these? | |
75 byte[] parents = new byte[40]; | 77 byte[] parents = new byte[40]; |
76 da.readBytes(parents, 0, 40); | 78 da.readBytes(parents, 0, 40); |
79 p1 = Nodeid.fromBinary(parents, 0); | |
80 p2 = Nodeid.fromBinary(parents, 20); | |
77 parents = null; | 81 parents = null; |
78 // hg init; hg up produces an empty repository where dirstate has parents (40 bytes) only | 82 // hg init; hg up produces an empty repository where dirstate has parents (40 bytes) only |
79 while (!da.isEmpty()) { | 83 while (!da.isEmpty()) { |
80 final byte state = da.readByte(); | 84 final byte state = da.readByte(); |
81 final int fmode = da.readInt(); | 85 final int fmode = da.readInt(); |
113 } finally { | 117 } finally { |
114 da.done(); | 118 da.done(); |
115 } | 119 } |
116 } | 120 } |
117 | 121 |
122 // do not read whole dirstate if all we need is WC parent information | |
123 private void readParents() { | |
124 if (dirstateFile == null || !dirstateFile.exists()) { | |
125 return; | |
126 } | |
127 DataAccess da = accessProvider.create(dirstateFile); | |
128 if (da.isEmpty()) { | |
129 return; | |
130 } | |
131 try { | |
132 byte[] parents = new byte[40]; | |
133 da.readBytes(parents, 0, 40); | |
134 p1 = Nodeid.fromBinary(parents, 0); | |
135 p2 = Nodeid.fromBinary(parents, 20); | |
136 parents = null; | |
137 } catch (IOException ex) { | |
138 throw new HgBadStateException(ex); // XXX in fact, our exception is not the best solution here. | |
139 } finally { | |
140 da.done(); | |
141 } | |
142 } | |
143 | |
144 /** | |
145 * @return array of length 2 with working copy parents, non null. | |
146 */ | |
147 public Nodeid[] parents() { | |
148 if (p1 == null) { | |
149 readParents(); | |
150 } | |
151 Nodeid[] rv = new Nodeid[2]; | |
152 rv[0] = p1; | |
153 rv[1] = p2; | |
154 return rv; | |
155 } | |
156 | |
118 // new, modifiable collection | 157 // new, modifiable collection |
119 /*package-local*/ TreeSet<String> all() { | 158 /*package-local*/ TreeSet<String> all() { |
120 read(); | 159 read(); |
121 TreeSet<String> rv = new TreeSet<String>(); | 160 TreeSet<String> rv = new TreeSet<String>(); |
122 @SuppressWarnings("unchecked") | 161 @SuppressWarnings("unchecked") |