Mercurial > jhg
annotate src/org/tmatesoft/hg/repo/HgParentChildMap.java @ 650:3b275cc2d2aa
Push: phase4 - settle local and remote phases, push updated phases regardless of server publishing state, do not push secret changesets
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Fri, 28 Jun 2013 19:27:26 +0200 | 
| parents | 3b7d51ed4c65 | 
| children | cd77bf51b562 | 
| rev | line source | 
|---|---|
| 
432
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
1 /* | 
| 
628
 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
433 
diff
changeset
 | 
2 * Copyright (c) 2011-2013 TMate Software Ltd | 
| 
432
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
3 * | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
4 * This program is free software; you can redistribute it and/or modify | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
5 * it under the terms of the GNU General Public License as published by | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
6 * the Free Software Foundation; version 2 of the License. | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
7 * | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
8 * This program is distributed in the hope that it will be useful, | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
11 * GNU General Public License for more details. | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
12 * | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
13 * For information on how to redistribute this software under | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
14 * the terms of a license other than GNU General Public License | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
15 * contact TMate Software at support@hg4j.com | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
16 */ | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
17 package org.tmatesoft.hg.repo; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
18 | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
19 import static org.tmatesoft.hg.repo.HgRepository.TIP; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
20 | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
21 import java.util.Arrays; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
22 import java.util.Collection; | 
| 
645
 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
628 
diff
changeset
 | 
23 import java.util.Collections; | 
| 
432
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
24 import java.util.HashSet; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
25 import java.util.LinkedList; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
26 import java.util.List; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
27 | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
28 import org.tmatesoft.hg.core.Nodeid; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
29 import org.tmatesoft.hg.repo.Revlog.ParentInspector; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
30 | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
31 /** | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
32 * Helper class to deal with parent-child relationship between revisions <i>en masse</i>. | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
33 * Works in terms of {@link Nodeid nodeids}, there's no need to deal with revision indexes. | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
34 * For a given revision, answers questions like "who's my parent and what are my immediate children". | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
35 * | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
36 * <p>Comes handy when multiple revisions are analyzed and distinct {@link Revlog#parents(int, int[], byte[], byte[])} | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
37 * queries are ineffective. | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
38 * | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
39 * <p>Next code snippet shows typical use: | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
40 * <pre> | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
41 * HgChangelog clog = repo.getChangelog(); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
42 * ParentWalker<HgChangelog> pw = new ParentWalker<HgChangelog>(clog); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
43 * pw.init(); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
44 * | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
45 * Nodeid me = Nodeid.fromAscii("..."); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
46 * List<Nodei> immediateChildren = pw.directChildren(me); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
47 * </pre> | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
48 * | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
49 * | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
50 * <p> Perhaps, later may add alternative way to access (and reuse) map instance, Revlog#getParentWalker(), | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
51 * that instantiates and initializes ParentWalker, and keep SoftReference to allow its reuse. | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
52 * | 
| 
433
 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
432 
diff
changeset
 | 
53 * @see HgRevisionMap | 
| 
432
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
54 * | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
55 * @author Artem Tikhomirov | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
56 * @author TMate Software Ltd. | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
57 */ | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
58 public final class HgParentChildMap<T extends Revlog> implements ParentInspector { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
59 | 
| 
646
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
60 // IMPORTANT: Nodeid instances shall be shared between all arrays | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
61 | 
| 
432
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
62 private Nodeid[] sequential; // natural repository order, childrenOf rely on ordering | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
63 private Nodeid[] sorted; // for binary search | 
| 
646
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
64 private int[] sorted2natural; // indexes in sorted to indexes in sequential | 
| 
432
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
65 private Nodeid[] firstParent; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
66 private Nodeid[] secondParent; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
67 private final T revlog; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
68 | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
69 | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
70 public HgParentChildMap(T owner) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
71 revlog = owner; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
72 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
73 | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
74 public HgRepository getRepo() { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
75 return revlog.getRepo(); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
76 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
77 | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
78 public void next(int revisionNumber, Nodeid revision, int parent1Revision, int parent2Revision, Nodeid nidParent1, Nodeid nidParent2) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
79 if (parent1Revision >= revisionNumber || parent2Revision >= revisionNumber) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
80 throw new IllegalStateException(); // sanity, revisions are sequential | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
81 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
82 int ix = revisionNumber; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
83 sequential[ix] = sorted[ix] = revision; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
84 if (parent1Revision != -1) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
85 firstParent[ix] = sequential[parent1Revision]; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
86 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
87 if (parent2Revision != -1) { // revlog of DataAccess.java has p2 set when p1 is -1 | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
88 secondParent[ix] = sequential[parent2Revision]; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
89 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
90 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
91 | 
| 
628
 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
433 
diff
changeset
 | 
92 /** | 
| 
 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
433 
diff
changeset
 | 
93 * Prepare the map | 
| 
 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
433 
diff
changeset
 | 
94 * @throws HgInvalidControlFileException if failed to access revlog index/data entry. <em>Runtime exception</em> | 
| 
 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
433 
diff
changeset
 | 
95 * @throws HgRuntimeException subclass thereof to indicate other issues with the library. <em>Runtime exception</em> | 
| 
 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
433 
diff
changeset
 | 
96 */ | 
| 
 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
433 
diff
changeset
 | 
97 public void init() throws HgRuntimeException { | 
| 
432
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
98 final int revisionCount = revlog.getRevisionCount(); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
99 firstParent = new Nodeid[revisionCount]; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
100 // TODO [post 1.0] Branches/merges are less frequent, and most of secondParent would be -1/null, hence | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
101 // IntMap might be better alternative here, but need to carefully analyze (test) whether this brings | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
102 // real improvement (IntMap has 2n capacity, and element lookup is log(n) instead of array's constant) | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
103 secondParent = new Nodeid[revisionCount]; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
104 // | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
105 sequential = new Nodeid[revisionCount]; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
106 sorted = new Nodeid[revisionCount]; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
107 revlog.indexWalk(0, TIP, this); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
108 Arrays.sort(sorted); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
109 sorted2natural = new int[revisionCount]; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
110 for (int i = 0; i < revisionCount; i++) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
111 Nodeid n = sequential[i]; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
112 int x = Arrays.binarySearch(sorted, n); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
113 assertSortedIndex(x); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
114 sorted2natural[x] = i; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
115 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
116 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
117 | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
118 private void assertSortedIndex(int x) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
119 if (x < 0) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
120 throw new HgInvalidStateException(String.format("Bad index", x)); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
121 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
122 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
123 | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
124 /** | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
125 * Tells whether supplied revision is from the walker's associated revlog. | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
126 * Note, {@link Nodeid#NULL}, although implicitly present as parent of a first revision, is not recognized as known. | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
127 * @param nid revision to check, not <code>null</code> | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
128 * @return <code>true</code> if revision matches any revision in this revlog | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
129 */ | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
130 public boolean knownNode(Nodeid nid) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
131 return Arrays.binarySearch(sorted, nid) >= 0; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
132 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
133 | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
134 /** | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
135 * null if none. only known nodes (as per #knownNode) are accepted as arguments | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
136 */ | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
137 public Nodeid firstParent(Nodeid nid) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
138 int x = Arrays.binarySearch(sorted, nid); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
139 assertSortedIndex(x); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
140 int i = sorted2natural[x]; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
141 return firstParent[i]; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
142 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
143 | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
144 // never null, Nodeid.NULL if none known | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
145 public Nodeid safeFirstParent(Nodeid nid) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
146 Nodeid rv = firstParent(nid); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
147 return rv == null ? Nodeid.NULL : rv; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
148 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
149 | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
150 public Nodeid secondParent(Nodeid nid) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
151 int x = Arrays.binarySearch(sorted, nid); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
152 assertSortedIndex(x); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
153 int i = sorted2natural[x]; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
154 return secondParent[i]; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
155 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
156 | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
157 public Nodeid safeSecondParent(Nodeid nid) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
158 Nodeid rv = secondParent(nid); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
159 return rv == null ? Nodeid.NULL : rv; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
160 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
161 | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
162 public boolean appendParentsOf(Nodeid nid, Collection<Nodeid> c) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
163 int x = Arrays.binarySearch(sorted, nid); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
164 assertSortedIndex(x); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
165 int i = sorted2natural[x]; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
166 Nodeid p1 = firstParent[i]; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
167 boolean modified = false; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
168 if (p1 != null) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
169 modified = c.add(p1); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
170 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
171 Nodeid p2 = secondParent[i]; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
172 if (p2 != null) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
173 modified = c.add(p2) || modified; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
174 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
175 return modified; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
176 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
177 | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
178 // XXX alternative (and perhaps more reliable) approach would be to make a copy of allNodes and remove | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
179 // nodes, their parents and so on. | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
180 | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
181 // @return ordered collection of all children rooted at supplied nodes. Nodes shall not be descendants of each other! | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
182 // Nodeids shall belong to this revlog | 
| 
650
 
3b275cc2d2aa
Push: phase4 - settle local and remote phases, push updated phases regardless of server publishing state, do not push secret changesets
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
646 
diff
changeset
 | 
183 public List<Nodeid> childrenOf(Collection<Nodeid> roots) { | 
| 
645
 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
628 
diff
changeset
 | 
184 if (roots.isEmpty()) { | 
| 
 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
628 
diff
changeset
 | 
185 return Collections.emptyList(); | 
| 
 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
628 
diff
changeset
 | 
186 } | 
| 
432
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
187 HashSet<Nodeid> parents = new HashSet<Nodeid>(); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
188 LinkedList<Nodeid> result = new LinkedList<Nodeid>(); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
189 int earliestRevision = Integer.MAX_VALUE; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
190 assert sequential.length == firstParent.length && firstParent.length == secondParent.length; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
191 // first, find earliest index of roots in question, as there's no sense | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
192 // to check children among nodes prior to branch's root node | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
193 for (Nodeid r : roots) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
194 int x = Arrays.binarySearch(sorted, r); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
195 assertSortedIndex(x); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
196 int i = sorted2natural[x]; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
197 if (i < earliestRevision) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
198 earliestRevision = i; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
199 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
200 parents.add(sequential[i]); // add canonical instance in hope equals() is bit faster when can do a == | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
201 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
202 for (int i = earliestRevision + 1; i < sequential.length; i++) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
203 if (parents.contains(firstParent[i]) || parents.contains(secondParent[i])) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
204 parents.add(sequential[i]); // to find next child | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
205 result.add(sequential[i]); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
206 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
207 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
208 return result; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
209 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
210 | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
211 /** | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
212 * @return revisions that have supplied revision as their immediate parent | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
213 */ | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
214 public List<Nodeid> directChildren(Nodeid nid) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
215 LinkedList<Nodeid> result = new LinkedList<Nodeid>(); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
216 int x = Arrays.binarySearch(sorted, nid); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
217 assertSortedIndex(x); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
218 nid = sorted[x]; // canonical instance | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
219 int start = sorted2natural[x]; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
220 for (int i = start + 1; i < sequential.length; i++) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
221 if (nid == firstParent[i] || nid == secondParent[i]) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
222 result.add(sequential[i]); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
223 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
224 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
225 return result; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
226 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
227 | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
228 /** | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
229 * @param nid possibly parent node, shall be {@link #knownNode(Nodeid) known} in this revlog. | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
230 * @return <code>true</code> if there's any node in this revlog that has specified node as one of its parents. | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
231 */ | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
232 public boolean hasChildren(Nodeid nid) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
233 int x = Arrays.binarySearch(sorted, nid); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
234 assertSortedIndex(x); | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
235 int i = sorted2natural[x]; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
236 assert firstParent.length == secondParent.length; // just in case later I implement sparse array for secondParent | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
237 assert firstParent.length == sequential.length; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
238 // to use == instead of equals, take the same Nodeid instance we used to fill all the arrays. | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
239 final Nodeid canonicalNode = sequential[i]; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
240 i++; // no need to check node itself. child nodes may appear in sequential only after revision in question | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
241 for (; i < sequential.length; i++) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
242 // TODO [post 1.0] likely, not very effective. | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
243 // May want to optimize it with another (Tree|Hash)Set, created on demand on first use, | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
244 // however, need to be careful with memory usage | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
245 if (firstParent[i] == canonicalNode || secondParent[i] == canonicalNode) { | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
246 return true; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
247 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
248 } | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
249 return false; | 
| 
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
250 } | 
| 
645
 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
628 
diff
changeset
 | 
251 | 
| 
 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
628 
diff
changeset
 | 
252 /** | 
| 
 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
628 
diff
changeset
 | 
253 * @return all revisions this map knows about | 
| 
 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
628 
diff
changeset
 | 
254 */ | 
| 
 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
628 
diff
changeset
 | 
255 public List<Nodeid> all() { | 
| 
 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
628 
diff
changeset
 | 
256 return Arrays.asList(sequential); | 
| 
 
14dac192aa26
Push: phase2 - upload bundle with changes to remote server
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
628 
diff
changeset
 | 
257 } | 
| 
646
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
258 | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
259 /** | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
260 * Find out whether a given node is among descendants of another. | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
261 * | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
262 * @param root revision to check for being (grand-)*parent of a child | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
263 * @param wannaBeChild candidate descendant revision | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
264 * @return <code>true</code> if <code>wannaBeChild</code> is among children of <code>root</code> | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
265 */ | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
266 public boolean isChild(Nodeid root, Nodeid wannaBeChild) { | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
267 int x = Arrays.binarySearch(sorted, root); | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
268 assertSortedIndex(x); | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
269 root = sorted[x]; // canonical instance | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
270 int y = Arrays.binarySearch(sorted, wannaBeChild); | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
271 if (y < 0 || y <= x) { | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
272 // not found or comes earlier than root | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
273 return false; | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
274 } | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
275 wannaBeChild = sorted[y]; // canonicalize | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
276 final int start = sorted2natural[x]; | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
277 final int end = sorted2natural[y]; | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
278 HashSet<Nodeid> parents = new HashSet<Nodeid>(); | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
279 parents.add(root); | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
280 for (int i = start + 1; i < end; i++) { | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
281 if (parents.contains(firstParent[i]) || parents.contains(secondParent[i])) { | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
282 parents.add(sequential[i]); // collect ancestors line | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
283 } | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
284 } | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
285 return parents.contains(firstParent[end]) || parents.contains(secondParent[end]); | 
| 
 
3b7d51ed4c65
Push: phase3 - update matching remote bookmarks
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
645 
diff
changeset
 | 
286 } | 
| 
432
 
1fc0da631200
Revlog.ParentWalker helper class got promoted as TLC, renamed to HgParentChildMap
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
287 } | 
