Mercurial > hg4j
comparison src/org/tmatesoft/hg/core/HgIncomingCommand.java @ 628:6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Wed, 22 May 2013 15:52:31 +0200 |
parents | 2f9ed6bcefa2 |
children | 822f3a83ff57 |
comparison
equal
deleted
inserted
replaced
627:5153eb73b18d | 628:6526d8adbc0f |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 2011-2012 TMate Software Ltd | 2 * Copyright (c) 2011-2013 TMate Software Ltd |
3 * | 3 * |
4 * This program is free software; you can redistribute it and/or modify | 4 * This program is free software; you can redistribute it and/or modify |
5 * it under the terms of the GNU General Public License as published by | 5 * it under the terms of the GNU General Public License as published by |
6 * the Free Software Foundation; version 2 of the License. | 6 * the Free Software Foundation; version 2 of the License. |
7 * | 7 * |
29 import org.tmatesoft.hg.internal.RepositoryComparator; | 29 import org.tmatesoft.hg.internal.RepositoryComparator; |
30 import org.tmatesoft.hg.internal.RepositoryComparator.BranchChain; | 30 import org.tmatesoft.hg.internal.RepositoryComparator.BranchChain; |
31 import org.tmatesoft.hg.repo.HgBundle; | 31 import org.tmatesoft.hg.repo.HgBundle; |
32 import org.tmatesoft.hg.repo.HgChangelog; | 32 import org.tmatesoft.hg.repo.HgChangelog; |
33 import org.tmatesoft.hg.repo.HgChangelog.RawChangeset; | 33 import org.tmatesoft.hg.repo.HgChangelog.RawChangeset; |
34 import org.tmatesoft.hg.repo.HgInvalidControlFileException; | |
35 import org.tmatesoft.hg.repo.HgInvalidStateException; | 34 import org.tmatesoft.hg.repo.HgInvalidStateException; |
35 import org.tmatesoft.hg.repo.HgParentChildMap; | |
36 import org.tmatesoft.hg.repo.HgRemoteRepository; | 36 import org.tmatesoft.hg.repo.HgRemoteRepository; |
37 import org.tmatesoft.hg.repo.HgRepository; | 37 import org.tmatesoft.hg.repo.HgRepository; |
38 import org.tmatesoft.hg.repo.HgRuntimeException; | 38 import org.tmatesoft.hg.repo.HgRuntimeException; |
39 import org.tmatesoft.hg.repo.HgParentChildMap; | |
40 import org.tmatesoft.hg.util.CancelledException; | 39 import org.tmatesoft.hg.util.CancelledException; |
41 import org.tmatesoft.hg.util.ProgressSupport; | 40 import org.tmatesoft.hg.util.ProgressSupport; |
42 | 41 |
43 /** | 42 /** |
44 * Command to find out changes available in a remote repository, missing locally. | 43 * Command to find out changes available in a remote repository, missing locally. |
136 */ | 135 */ |
137 public void executeFull(final HgChangesetHandler handler) throws HgCallbackTargetException, HgException, CancelledException { | 136 public void executeFull(final HgChangesetHandler handler) throws HgCallbackTargetException, HgException, CancelledException { |
138 if (handler == null) { | 137 if (handler == null) { |
139 throw new IllegalArgumentException("Delegate can't be null"); | 138 throw new IllegalArgumentException("Delegate can't be null"); |
140 } | 139 } |
141 final List<Nodeid> common = getCommon(); | |
142 HgBundle changegroup = remoteRepo.getChanges(common); | |
143 final ProgressSupport ps = getProgressSupport(handler); | 140 final ProgressSupport ps = getProgressSupport(handler); |
144 try { | 141 try { |
142 final List<Nodeid> common = getCommon(); | |
143 HgBundle changegroup = remoteRepo.getChanges(common); | |
145 final ChangesetTransformer transformer = new ChangesetTransformer(localRepo, handler, getParentHelper(), ps, getCancelSupport(handler, true)); | 144 final ChangesetTransformer transformer = new ChangesetTransformer(localRepo, handler, getParentHelper(), ps, getCancelSupport(handler, true)); |
146 transformer.limitBranches(branches); | 145 transformer.limitBranches(branches); |
147 changegroup.changes(localRepo, new HgChangelog.Inspector() { | 146 changegroup.changes(localRepo, new HgChangelog.Inspector() { |
148 private int localIndex; | 147 private int localIndex; |
149 private final HgParentChildMap<HgChangelog> parentHelper; | 148 private final HgParentChildMap<HgChangelog> parentHelper; |
152 parentHelper = getParentHelper(); | 151 parentHelper = getParentHelper(); |
153 // new revisions, if any, would be added after all existing, and would get numbered started with last+1 | 152 // new revisions, if any, would be added after all existing, and would get numbered started with last+1 |
154 localIndex = localRepo.getChangelog().getRevisionCount(); | 153 localIndex = localRepo.getChangelog().getRevisionCount(); |
155 } | 154 } |
156 | 155 |
157 public void next(int revisionNumber, Nodeid nodeid, RawChangeset cset) { | 156 public void next(int revisionNumber, Nodeid nodeid, RawChangeset cset) throws HgRuntimeException { |
158 if (parentHelper.knownNode(nodeid)) { | 157 if (parentHelper.knownNode(nodeid)) { |
159 if (!common.contains(nodeid)) { | 158 if (!common.contains(nodeid)) { |
160 throw new HgInvalidStateException("Bundle shall not report known nodes other than roots we've supplied"); | 159 throw new HgInvalidStateException("Bundle shall not report known nodes other than roots we've supplied"); |
161 } | 160 } |
162 return; | 161 return; |
170 } finally { | 169 } finally { |
171 ps.done(); | 170 ps.done(); |
172 } | 171 } |
173 } | 172 } |
174 | 173 |
175 private RepositoryComparator getComparator() throws HgInvalidControlFileException, CancelledException { | 174 private RepositoryComparator getComparator() throws CancelledException, HgRuntimeException { |
176 if (remoteRepo == null) { | 175 if (remoteRepo == null) { |
177 throw new IllegalArgumentException("Shall specify remote repository to compare against", null); | 176 throw new IllegalArgumentException("Shall specify remote repository to compare against", null); |
178 } | 177 } |
179 if (comparator == null) { | 178 if (comparator == null) { |
180 comparator = new RepositoryComparator(getParentHelper(), remoteRepo); | 179 comparator = new RepositoryComparator(getParentHelper(), remoteRepo); |
181 // comparator.compare(context); // XXX meanwhile we use distinct path to calculate common | 180 // comparator.compare(context); // XXX meanwhile we use distinct path to calculate common |
182 } | 181 } |
183 return comparator; | 182 return comparator; |
184 } | 183 } |
185 | 184 |
186 private HgParentChildMap<HgChangelog> getParentHelper() throws HgInvalidControlFileException { | 185 private HgParentChildMap<HgChangelog> getParentHelper() throws HgRuntimeException { |
187 if (parentHelper == null) { | 186 if (parentHelper == null) { |
188 parentHelper = new HgParentChildMap<HgChangelog>(localRepo.getChangelog()); | 187 parentHelper = new HgParentChildMap<HgChangelog>(localRepo.getChangelog()); |
189 parentHelper.init(); | 188 parentHelper.init(); |
190 } | 189 } |
191 return parentHelper; | 190 return parentHelper; |
192 } | 191 } |
193 | 192 |
194 private List<BranchChain> getMissingBranches() throws HgRemoteConnectionException, HgInvalidControlFileException, CancelledException { | 193 private List<BranchChain> getMissingBranches() throws HgRemoteConnectionException, CancelledException, HgRuntimeException { |
195 if (missingBranches == null) { | 194 if (missingBranches == null) { |
196 missingBranches = getComparator().calculateMissingBranches(); | 195 missingBranches = getComparator().calculateMissingBranches(); |
197 } | 196 } |
198 return missingBranches; | 197 return missingBranches; |
199 } | 198 } |
200 | 199 |
201 private List<Nodeid> getCommon() throws HgRemoteConnectionException, HgInvalidControlFileException, CancelledException { | 200 private List<Nodeid> getCommon() throws HgRemoteConnectionException, CancelledException, HgRuntimeException { |
202 // return getComparator(context).getCommon(); | 201 // return getComparator(context).getCommon(); |
203 final LinkedHashSet<Nodeid> common = new LinkedHashSet<Nodeid>(); | 202 final LinkedHashSet<Nodeid> common = new LinkedHashSet<Nodeid>(); |
204 // XXX common can be obtained from repoCompare, but at the moment it would almost duplicate work of calculateMissingBranches | 203 // XXX common can be obtained from repoCompare, but at the moment it would almost duplicate work of calculateMissingBranches |
205 // once I refactor latter, common shall be taken from repoCompare. | 204 // once I refactor latter, common shall be taken from repoCompare. |
206 RepositoryComparator repoCompare = getComparator(); | 205 RepositoryComparator repoCompare = getComparator(); |