comparison src/org/tmatesoft/hg/repo/HgStatusCollector.java @ 282:e51dd9a14b6f

Yet another WC status fix, where dirstate parent and base revision are treated right (dirstate parent other than tip and explicit baseRevision are not the same)
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Sat, 03 Sep 2011 01:21:03 +0200
parents 81e9a3c9bafe
children 7232b94f2ae3
comparison
equal deleted inserted replaced
281:81e9a3c9bafe 282:e51dd9a14b6f
168 int[] parents = new int[2]; 168 int[] parents = new int[2];
169 repo.getChangelog().parents(rev, parents, null, null); 169 repo.getChangelog().parents(rev, parents, null, null);
170 walk(parents[0], rev, inspector); 170 walk(parents[0], rev, inspector);
171 } 171 }
172 172
173 // I assume revision numbers are the same for changelog and manifest - here 173 // rev1 and rev2 are changelog revision numbers, argument order matters.
174 // user would like to pass changelog revision numbers, and I use them directly to walk manifest. 174 // Either rev1 or rev2 may be -1 to indicate comparison to empty repository (XXX this is due to use of
175 // if this assumption is wrong, fix this (lookup manifest revisions from changeset). 175 // parents in #change(), I believe. Perhaps, need a constant for this? Otherwise this hidden knowledge gets
176 // rev1 and rev2 may be -1 to indicate comparison to empty repository 176 // exposed to e.g. Record
177 // argument order matters
178 public void walk(int rev1, int rev2, HgStatusInspector inspector) { 177 public void walk(int rev1, int rev2, HgStatusInspector inspector) {
179 if (rev1 == rev2) { 178 if (rev1 == rev2) {
180 throw new IllegalArgumentException(); 179 throw new IllegalArgumentException();
181 } 180 }
182 if (inspector == null) { 181 if (inspector == null) {
183 throw new IllegalArgumentException(); 182 throw new IllegalArgumentException();
184 } 183 }
185 if (inspector instanceof Record) {
186 ((Record) inspector).init(rev1, rev2, this);
187 }
188 final int lastManifestRevision = repo.getChangelog().getLastRevision(); 184 final int lastManifestRevision = repo.getChangelog().getLastRevision();
189 if (rev1 == TIP) { 185 if (rev1 == TIP) {
190 rev1 = lastManifestRevision; 186 rev1 = lastManifestRevision;
191 } 187 }
192 if (rev2 == TIP) { 188 if (rev2 == TIP) {
193 rev2 = lastManifestRevision; 189 rev2 = lastManifestRevision;
190 }
191 if (inspector instanceof Record) {
192 ((Record) inspector).init(rev1, rev2, this);
194 } 193 }
195 // in fact, rev1 and rev2 are often next (or close) to each other, 194 // in fact, rev1 and rev2 are often next (or close) to each other,
196 // thus, we can optimize Manifest reads here (manifest.walk(rev1, rev2)) 195 // thus, we can optimize Manifest reads here (manifest.walk(rev1, rev2))
197 ManifestRevision r1, r2 ; 196 ManifestRevision r1, r2 ;
198 boolean need1 = !cached(rev1), need2 = !cached(rev2); 197 boolean need1 = !cached(rev1), need2 = !cached(rev2);