Mercurial > jhg
annotate cmdline/org/tmatesoft/hg/console/Outgoing.java @ 174:b1de83ffa7f8
Build shall succeed with no precompiled classes, too
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Wed, 30 Mar 2011 02:43:15 +0200 | 
| parents | 87f40938c9b2 | 
| children | a8df7162ec75 | 
| rev | line source | 
|---|---|
| 
30
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
1 /* | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
30 
diff
changeset
 | 
2 * Copyright (c) 2011 TMate Software Ltd | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
30 
diff
changeset
 | 
3 * | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
30 
diff
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: 
30 
diff
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: 
30 
diff
changeset
 | 
6 * the Free Software Foundation; version 2 of the License. | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
30 
diff
changeset
 | 
7 * | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
30 
diff
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: 
30 
diff
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: 
30 
diff
changeset
 | 
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
30 
diff
changeset
 | 
11 * GNU General Public License for more details. | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
30 
diff
changeset
 | 
12 * | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
30 
diff
changeset
 | 
13 * For information on how to redistribute this software under | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
30 
diff
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: 
98 
diff
changeset
 | 
15 * contact TMate Software at support@hg4j.com | 
| 
30
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
16 */ | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
30 
diff
changeset
 | 
17 package org.tmatesoft.hg.console; | 
| 
30
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
18 | 
| 
171
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
19 import static org.tmatesoft.hg.core.Nodeid.NULL; | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
20 | 
| 
172
 
87f40938c9b2
Configuration handling out of HgLookup (bad idea to use URL to pass keys)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
171 
diff
changeset
 | 
21 import java.io.File; | 
| 
 
87f40938c9b2
Configuration handling out of HgLookup (bad idea to use URL to pass keys)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
171 
diff
changeset
 | 
22 import java.net.MalformedURLException; | 
| 
171
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
23 import java.net.URL; | 
| 
30
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
24 import java.util.Collection; | 
| 
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
25 import java.util.LinkedList; | 
| 
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
26 import java.util.List; | 
| 
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
27 | 
| 
171
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
28 import org.tmatesoft.hg.core.HgException; | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
30 
diff
changeset
 | 
29 import org.tmatesoft.hg.core.Nodeid; | 
| 
172
 
87f40938c9b2
Configuration handling out of HgLookup (bad idea to use URL to pass keys)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
171 
diff
changeset
 | 
30 import org.tmatesoft.hg.internal.ConfigFile; | 
| 
 
87f40938c9b2
Configuration handling out of HgLookup (bad idea to use URL to pass keys)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
171 
diff
changeset
 | 
31 import org.tmatesoft.hg.internal.Internals; | 
| 
97
 
ee2c750b036d
Changelog to HgChangelog
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
74 
diff
changeset
 | 
32 import org.tmatesoft.hg.repo.HgChangelog; | 
| 
171
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
33 import org.tmatesoft.hg.repo.HgLookup; | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
34 import org.tmatesoft.hg.repo.HgRemoteRepository; | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
35 import org.tmatesoft.hg.repo.HgRemoteRepository.RemoteBranch; | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
30 
diff
changeset
 | 
36 import org.tmatesoft.hg.repo.HgRepository; | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
30 
diff
changeset
 | 
37 | 
| 
30
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
38 | 
| 
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
39 /** | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
30 
diff
changeset
 | 
40 * WORK IN PROGRESS, DO NOT USE | 
| 
171
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
41 * hg outgoing | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
30 
diff
changeset
 | 
42 * | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
30 
diff
changeset
 | 
43 * @author Artem Tikhomirov | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
30 
diff
changeset
 | 
44 * @author TMate Software Ltd. | 
| 
30
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
45 */ | 
| 
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
46 public class Outgoing { | 
| 
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
47 | 
| 
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
48 public static void main(String[] args) throws Exception { | 
| 
74
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
30 
diff
changeset
 | 
49 Options cmdLineOpts = Options.parse(args); | 
| 
 
6f1b88693d48
Complete refactoring to org.tmatesoft
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
30 
diff
changeset
 | 
50 HgRepository hgRepo = cmdLineOpts.findRepository(); | 
| 
30
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
51 if (hgRepo.isInvalid()) { | 
| 
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
52 System.err.printf("Can't find repository in: %s\n", hgRepo.getLocation()); | 
| 
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
53 return; | 
| 
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
54 } | 
| 
172
 
87f40938c9b2
Configuration handling out of HgLookup (bad idea to use URL to pass keys)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
171 
diff
changeset
 | 
55 String key = "hg4j-gc"; | 
| 
 
87f40938c9b2
Configuration handling out of HgLookup (bad idea to use URL to pass keys)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
171 
diff
changeset
 | 
56 ConfigFile cfg = new Internals().newConfigFile(); | 
| 
 
87f40938c9b2
Configuration handling out of HgLookup (bad idea to use URL to pass keys)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
171 
diff
changeset
 | 
57 cfg.addLocation(new File(System.getProperty("user.home"), ".hgrc")); | 
| 
 
87f40938c9b2
Configuration handling out of HgLookup (bad idea to use URL to pass keys)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
171 
diff
changeset
 | 
58 String server = cfg.getSection("paths").get(key); | 
| 
 
87f40938c9b2
Configuration handling out of HgLookup (bad idea to use URL to pass keys)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
171 
diff
changeset
 | 
59 if (server == null) { | 
| 
 
87f40938c9b2
Configuration handling out of HgLookup (bad idea to use URL to pass keys)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
171 
diff
changeset
 | 
60 throw new HgException(String.format("Can't find server %s specification in the config", key)); | 
| 
 
87f40938c9b2
Configuration handling out of HgLookup (bad idea to use URL to pass keys)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
171 
diff
changeset
 | 
61 } | 
| 
 
87f40938c9b2
Configuration handling out of HgLookup (bad idea to use URL to pass keys)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
171 
diff
changeset
 | 
62 HgRemoteRepository hgRemote = new HgLookup().detect(new URL(server)); | 
| 
171
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
63 | 
| 
98
 
225c48d964ed
Changelog to HgChangelog, Refactoring doesn't recognize name with inner class
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
97 
diff
changeset
 | 
64 HgChangelog.ParentWalker pw = hgRepo.getChangelog().new ParentWalker(); | 
| 
30
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
65 pw.init(); | 
| 
171
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
66 | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
67 List<Nodeid> commonKnown = findCommonWithRemote(pw, hgRemote); | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
68 dump("Nodes known to be both locally and at remote server", commonKnown); | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
69 // sanity check | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
70 for (Nodeid n : commonKnown) { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
71 if (!pw.knownNode(n)) { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
72 throw new HgException("Unknown node reported as common:" + n); | 
| 
30
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
73 } | 
| 
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
74 } | 
| 
171
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
75 // find all local children of commonKnown | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
76 List<Nodeid> result = pw.childrenOf(commonKnown); | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
77 dump("Result", result); | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
78 } | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
79 | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
80 private static List<Nodeid> findCommonWithRemote(HgChangelog.ParentWalker pwLocal, HgRemoteRepository hgRemote) { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
81 List<Nodeid> remoteHeads = hgRemote.heads(); | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
82 LinkedList<Nodeid> common = new LinkedList<Nodeid>(); // these remotes are known in local | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
83 LinkedList<Nodeid> toQuery = new LinkedList<Nodeid>(); // these need further queries to find common | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
84 for (Nodeid rh : remoteHeads) { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
85 if (pwLocal.knownNode(rh)) { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
86 common.add(rh); | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
87 } else { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
88 toQuery.add(rh); | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
89 } | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
90 } | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
91 if (toQuery.isEmpty()) { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
92 return common; | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
93 } | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
94 LinkedList<RemoteBranch> checkUp2Head = new LinkedList<RemoteBranch>(); // branch.root and branch.head are of interest only. | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
95 // these are branches with unknown head but known root, which might not be the last common known, | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
96 // i.e. there might be children changeset that are also available at remote, [..?..common-head..remote-head] - need to | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
97 // scroll up to common head. | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
98 while (!toQuery.isEmpty()) { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
99 List<RemoteBranch> remoteBranches = hgRemote.branches(toQuery); //head, root, first parent, second parent | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
100 toQuery.clear(); | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
101 while(!remoteBranches.isEmpty()) { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
102 RemoteBranch rb = remoteBranches.remove(0); | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
103 // I assume branches remote call gives branches with head equal to what I pass there, i.e. | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
104 // that I don't need to check whether rb.head is unknown. | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
105 if (pwLocal.knownNode(rb.root)) { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
106 // we known branch start, common head is somewhere in its descendants line | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
107 checkUp2Head.add(rb); | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
108 } else { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
109 // dig deeper in the history, if necessary | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
110 if (!NULL.equals(rb.p1) && !pwLocal.knownNode(rb.p1)) { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
111 toQuery.add(rb.p1); | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
112 } | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
113 if (!NULL.equals(rb.p2) && !pwLocal.knownNode(rb.p2)) { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
114 toQuery.add(rb.p2); | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
115 } | 
| 
30
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
116 } | 
| 
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
117 } | 
| 
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
118 } | 
| 
171
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
119 // can't check nodes between checkUp2Head element and local heads, remote might have distinct descendants sequence | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
120 for (RemoteBranch rb : checkUp2Head) { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
121 // rb.root is known locally | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
122 List<Nodeid> remoteRevisions = hgRemote.between(rb.root, rb.head); | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
123 if (remoteRevisions.isEmpty()) { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
124 // head is immediate child | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
125 common.add(rb.root); | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
126 } else { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
127 Nodeid root = rb.root; | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
128 while(!remoteRevisions.isEmpty()) { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
129 Nodeid n = remoteRevisions.remove(0); | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
130 if (pwLocal.knownNode(n)) { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
131 if (remoteRevisions.isEmpty()) { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
132 // this is the last known node before an unknown | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
133 common.add(n); | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
134 break; | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
135 } | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
136 if (remoteRevisions.size() == 1) { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
137 // there's only one left between known n and unknown head | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
138 // this check is to save extra between query, not really essential | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
139 Nodeid last = remoteRevisions.remove(0); | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
140 common.add(pwLocal.knownNode(last) ? last : n); | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
141 break; | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
142 } | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
143 // might get handy for next between query, to narrow search down | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
144 root = n; | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
145 } else { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
146 remoteRevisions = hgRemote.between(root, n); | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
147 if (remoteRevisions.isEmpty()) { | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
148 common.add(root); | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
149 } | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
150 } | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
151 } | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
152 } | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
153 } | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
154 // TODO ensure unique elements in the list | 
| 
 
2c3e96674e2a
Towards outgoing changes - initial detection logic, get connected with remote repo stub
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
102 
diff
changeset
 | 
155 return common; | 
| 
30
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
156 } | 
| 
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
157 | 
| 
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
158 private static void dump(String s, Collection<Nodeid> c) { | 
| 
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
159 System.out.println(s); | 
| 
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
160 for (Nodeid n : c) { | 
| 
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
161 System.out.println(n); | 
| 
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
162 } | 
| 
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
163 } | 
| 
 
de7217a0aa4d
Look up changes in the local repo that are not in the remote
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
164 } | 
