Mercurial > jhg
comparison src/org/tmatesoft/hg/repo/HgParentChildMap.java @ 659:a5cf64f2e7e4 smartgit-4.6
Poor performance when reading/collecting branch information. Respect new cache location for recent mercurial revisions. Use different algorithm to build branch cache
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Fri, 05 Jul 2013 20:42:45 +0200 |
parents | 6526d8adbc0f |
children | af5223b86dd3 |
comparison
equal
deleted
inserted
replaced
641:2f33f102a8fa | 659:a5cf64f2e7e4 |
---|---|
242 return true; | 242 return true; |
243 } | 243 } |
244 } | 244 } |
245 return false; | 245 return false; |
246 } | 246 } |
247 | |
248 /** | |
249 * Find out whether a given node is among descendants of another. | |
250 * | |
251 * @param root revision to check for being (grand-)*parent of a child | |
252 * @param wannaBeChild candidate descendant revision | |
253 * @return <code>true</code> if <code>wannaBeChild</code> is among children of <code>root</code> | |
254 */ | |
255 public boolean isChild(Nodeid root, Nodeid wannaBeChild) { | |
256 int x = Arrays.binarySearch(sorted, root); | |
257 assertSortedIndex(x); | |
258 root = sorted[x]; // canonical instance | |
259 final int start = sorted2natural[x]; | |
260 int y = Arrays.binarySearch(sorted, wannaBeChild); | |
261 if (y < 0) { | |
262 return false; // not found | |
263 } | |
264 wannaBeChild = sorted[y]; // canonicalize | |
265 final int end = sorted2natural[y]; | |
266 if (end <= start) { | |
267 return false; // potential child was in repository earlier than root | |
268 } | |
269 HashSet<Nodeid> parents = new HashSet<Nodeid>(); | |
270 parents.add(root); | |
271 for (int i = start + 1; i < end; i++) { | |
272 if (parents.contains(firstParent[i]) || parents.contains(secondParent[i])) { | |
273 parents.add(sequential[i]); // collect ancestors line | |
274 } | |
275 } | |
276 return parents.contains(firstParent[end]) || parents.contains(secondParent[end]); | |
277 } | |
247 } | 278 } |