comparison src/org/tmatesoft/hg/internal/RepositoryComparator.java @ 645:14dac192aa26

Push: phase2 - upload bundle with changes to remote server
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Thu, 20 Jun 2013 19:15:09 +0200
parents 6526d8adbc0f
children cd77bf51b562
comparison
equal deleted inserted replaced
644:1deea2f33218 645:14dac192aa26
52 52
53 private final boolean debug = Boolean.parseBoolean(System.getProperty("hg4j.remote.debug")); 53 private final boolean debug = Boolean.parseBoolean(System.getProperty("hg4j.remote.debug"));
54 private final HgParentChildMap<HgChangelog> localRepo; 54 private final HgParentChildMap<HgChangelog> localRepo;
55 private final HgRemoteRepository remoteRepo; 55 private final HgRemoteRepository remoteRepo;
56 private List<Nodeid> common; 56 private List<Nodeid> common;
57 private List<Nodeid> remoteHeads;
57 58
58 public RepositoryComparator(HgParentChildMap<HgChangelog> pwLocal, HgRemoteRepository hgRemote) { 59 public RepositoryComparator(HgParentChildMap<HgChangelog> pwLocal, HgRemoteRepository hgRemote) {
59 localRepo = pwLocal; 60 localRepo = pwLocal;
60 remoteRepo = hgRemote; 61 remoteRepo = hgRemote;
61 } 62 }
79 throw new HgInvalidStateException("Call #compare(Object) first"); 80 throw new HgInvalidStateException("Call #compare(Object) first");
80 } 81 }
81 return common; 82 return common;
82 } 83 }
83 84
85 public List<Nodeid> getRemoteHeads() {
86 assert remoteHeads != null;
87 return remoteHeads;
88 }
89
84 /** 90 /**
85 * @return revisions that are children of common entries, i.e. revisions that are present on the local server and not on remote. 91 * @return revisions that are children of common entries, i.e. revisions that are present on the local server and not on remote.
86 */ 92 */
87 public List<Nodeid> getLocalOnlyRevisions() { 93 public List<Nodeid> getLocalOnlyRevisions() {
88 return localRepo.childrenOf(getCommon()); 94 final List<Nodeid> c = getCommon();
95 if (c.isEmpty()) {
96 return localRepo.all();
97 } else {
98 return localRepo.childrenOf(c);
99 }
89 } 100 }
90 101
91 /** 102 /**
92 * Similar to @link {@link #getLocalOnlyRevisions()}, use this one if you need access to changelog entry content, not 103 * Similar to @link {@link #getLocalOnlyRevisions()}, use this one if you need access to changelog entry content, not
93 * only its revision number. 104 * only its revision number.
126 } 137 }
127 changelog.range(earliestRevision+1, changelog.getLastRevision(), inspector); 138 changelog.range(earliestRevision+1, changelog.getLastRevision(), inspector);
128 } 139 }
129 140
130 private List<Nodeid> findCommonWithRemote() throws HgRemoteConnectionException { 141 private List<Nodeid> findCommonWithRemote() throws HgRemoteConnectionException {
131 List<Nodeid> remoteHeads = remoteRepo.heads(); 142 remoteHeads = remoteRepo.heads();
132 LinkedList<Nodeid> resultCommon = new LinkedList<Nodeid>(); // these remotes are known in local 143 LinkedList<Nodeid> resultCommon = new LinkedList<Nodeid>(); // these remotes are known in local
133 LinkedList<Nodeid> toQuery = new LinkedList<Nodeid>(); // these need further queries to find common 144 LinkedList<Nodeid> toQuery = new LinkedList<Nodeid>(); // these need further queries to find common
134 for (Nodeid rh : remoteHeads) { 145 for (Nodeid rh : remoteHeads) {
135 if (localRepo.knownNode(rh)) { 146 if (localRepo.knownNode(rh)) {
136 resultCommon.add(rh); 147 resultCommon.add(rh);