Mercurial > hg4j
comparison src/org/tmatesoft/hg/core/HgCloneCommand.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 | 4e6179bde4fc |
children | 4a0bab2c6da1 |
comparison
equal
deleted
inserted
replaced
627:5153eb73b18d | 628:6526d8adbc0f |
---|---|
88 * @throws HgBadArgumentException | 88 * @throws HgBadArgumentException |
89 * @throws HgRemoteConnectionException | 89 * @throws HgRemoteConnectionException |
90 * @throws HgRepositoryNotFoundException | 90 * @throws HgRepositoryNotFoundException |
91 * @throws HgException | 91 * @throws HgException |
92 * @throws CancelledException | 92 * @throws CancelledException |
93 * @throws HgRuntimeException subclass thereof to indicate issues with the library. <em>Runtime exception</em> | |
94 */ | 93 */ |
95 public HgRepository execute() throws HgException, CancelledException { | 94 public HgRepository execute() throws HgException, CancelledException { |
96 if (destination == null) { | 95 if (destination == null) { |
97 throw new IllegalArgumentException("Destination not set", null); | 96 throw new IllegalArgumentException("Destination not set", null); |
98 } | 97 } |
112 CancelSupport cancel = getCancelSupport(null, true); | 111 CancelSupport cancel = getCancelSupport(null, true); |
113 cancel.checkCancelled(); | 112 cancel.checkCancelled(); |
114 // if cloning remote repo, which can stream and no revision is specified - | 113 // if cloning remote repo, which can stream and no revision is specified - |
115 // can use 'stream_out' wireproto | 114 // can use 'stream_out' wireproto |
116 // | 115 // |
117 // pull all changes from the very beginning | |
118 // XXX consult getContext() if by any chance has a bundle ready, if not, then read and register | |
119 HgBundle completeChanges = srcRepo.getChanges(Collections.singletonList(NULL)); | |
120 cancel.checkCancelled(); | |
121 WriteDownMate mate = new WriteDownMate(srcRepo.getSessionContext(), destination, progress, cancel); | |
122 try { | 116 try { |
123 // instantiate new repo in the destdir | 117 // pull all changes from the very beginning |
124 mate.initEmptyRepository(); | 118 // XXX consult getContext() if by any chance has a bundle ready, if not, then read and register |
125 // pull changes | 119 HgBundle completeChanges = srcRepo.getChanges(Collections.singletonList(NULL)); |
126 completeChanges.inspectAll(mate); | 120 cancel.checkCancelled(); |
127 mate.checkFailure(); | 121 WriteDownMate mate = new WriteDownMate(srcRepo.getSessionContext(), destination, progress, cancel); |
128 mate.complete(); | 122 try { |
129 } catch (IOException ex) { | 123 // instantiate new repo in the destdir |
130 throw new HgInvalidFileException(getClass().getName(), ex); | 124 mate.initEmptyRepository(); |
131 } finally { | 125 // pull changes |
132 completeChanges.unlink(); | 126 completeChanges.inspectAll(mate); |
133 progress.done(); | 127 mate.checkFailure(); |
128 mate.complete(); | |
129 } catch (IOException ex) { | |
130 throw new HgInvalidFileException(getClass().getName(), ex); | |
131 } finally { | |
132 completeChanges.unlink(); | |
133 progress.done(); | |
134 } | |
135 } catch (HgRuntimeException ex) { | |
136 throw new HgLibraryFailureException(ex); | |
134 } | 137 } |
135 return new HgLookup().detect(destination); | 138 return new HgLookup().detect(destination); |
136 } | 139 } |
137 | 140 |
138 | 141 |
188 | 191 |
189 public void complete() throws IOException { | 192 public void complete() throws IOException { |
190 fncacheFile.write(); | 193 fncacheFile.write(); |
191 } | 194 } |
192 | 195 |
193 public void changelogStart() { | 196 public void changelogStart() throws HgInvalidControlFileException { |
194 try { | 197 try { |
195 revlogHeader.offset(0).baseRevision(-1); | 198 revlogHeader.offset(0).baseRevision(-1); |
196 revisionSequence.clear(); | 199 revisionSequence.clear(); |
197 indexFile = new FileOutputStream(currentFile = new File(hgDir, filename = "store/00changelog.i")); | 200 indexFile = new FileOutputStream(currentFile = new File(hgDir, filename = "store/00changelog.i")); |
198 collectChangelogIndexes = true; | 201 collectChangelogIndexes = true; |
200 throw new HgInvalidControlFileException("Failed to write changelog", ex, new File(hgDir, filename)); | 203 throw new HgInvalidControlFileException("Failed to write changelog", ex, new File(hgDir, filename)); |
201 } | 204 } |
202 stopIfCancelled(); | 205 stopIfCancelled(); |
203 } | 206 } |
204 | 207 |
205 public void changelogEnd() { | 208 public void changelogEnd() throws HgInvalidControlFileException { |
206 try { | 209 try { |
207 clearPreviousContent(); | 210 clearPreviousContent(); |
208 collectChangelogIndexes = false; | 211 collectChangelogIndexes = false; |
209 closeIndexFile(); | 212 closeIndexFile(); |
210 } catch (IOException ex) { | 213 } catch (IOException ex) { |
212 } | 215 } |
213 progressSupport.worked(1); | 216 progressSupport.worked(1); |
214 stopIfCancelled(); | 217 stopIfCancelled(); |
215 } | 218 } |
216 | 219 |
217 public void manifestStart() { | 220 public void manifestStart() throws HgInvalidControlFileException { |
218 try { | 221 try { |
219 revlogHeader.offset(0).baseRevision(-1); | 222 revlogHeader.offset(0).baseRevision(-1); |
220 revisionSequence.clear(); | 223 revisionSequence.clear(); |
221 indexFile = new FileOutputStream(currentFile = new File(hgDir, filename = "store/00manifest.i")); | 224 indexFile = new FileOutputStream(currentFile = new File(hgDir, filename = "store/00manifest.i")); |
222 } catch (IOException ex) { | 225 } catch (IOException ex) { |
223 throw new HgInvalidControlFileException("Failed to write manifest", ex, new File(hgDir, filename)); | 226 throw new HgInvalidControlFileException("Failed to write manifest", ex, new File(hgDir, filename)); |
224 } | 227 } |
225 stopIfCancelled(); | 228 stopIfCancelled(); |
226 } | 229 } |
227 | 230 |
228 public void manifestEnd() { | 231 public void manifestEnd() throws HgInvalidControlFileException { |
229 try { | 232 try { |
230 clearPreviousContent(); | 233 clearPreviousContent(); |
231 closeIndexFile(); | 234 closeIndexFile(); |
232 } catch (IOException ex) { | 235 } catch (IOException ex) { |
233 throw new HgInvalidControlFileException("Failed to write manifest", ex, new File(hgDir, filename)); | 236 throw new HgInvalidControlFileException("Failed to write manifest", ex, new File(hgDir, filename)); |
234 } | 237 } |
235 progressSupport.worked(1); | 238 progressSupport.worked(1); |
236 stopIfCancelled(); | 239 stopIfCancelled(); |
237 } | 240 } |
238 | 241 |
239 public void fileStart(String name) { | 242 public void fileStart(String name) throws HgInvalidControlFileException { |
240 try { | 243 try { |
241 revlogHeader.offset(0).baseRevision(-1); | 244 revlogHeader.offset(0).baseRevision(-1); |
242 revisionSequence.clear(); | 245 revisionSequence.clear(); |
243 File file = new File(hgDir, filename = storagePathHelper.rewrite(name).toString()); | 246 File file = new File(hgDir, filename = storagePathHelper.rewrite(name).toString()); |
244 file.getParentFile().mkdirs(); | 247 file.getParentFile().mkdirs(); |
248 throw new HgInvalidControlFileException(m, ex, new File(filename)); | 251 throw new HgInvalidControlFileException(m, ex, new File(filename)); |
249 } | 252 } |
250 stopIfCancelled(); | 253 stopIfCancelled(); |
251 } | 254 } |
252 | 255 |
253 public void fileEnd(String name) { | 256 public void fileEnd(String name) throws HgInvalidControlFileException { |
254 try { | 257 try { |
255 fncacheFile.addIndex(pathFactory.path(name)); | 258 fncacheFile.addIndex(pathFactory.path(name)); |
256 clearPreviousContent(); | 259 clearPreviousContent(); |
257 closeIndexFile(); | 260 closeIndexFile(); |
258 } catch (IOException ex) { | 261 } catch (IOException ex) { |
275 indexFile = null; | 278 indexFile = null; |
276 filename = null; | 279 filename = null; |
277 currentFile = null; | 280 currentFile = null; |
278 } | 281 } |
279 | 282 |
280 private int knownRevision(Nodeid p) { | 283 private int knownRevision(Nodeid p) throws HgInvalidControlFileException { |
281 if (p.isNull()) { | 284 if (p.isNull()) { |
282 return -1; | 285 return -1; |
283 } else { | 286 } else { |
284 for (int i = revisionSequence.size() - 1; i >= 0; i--) { | 287 for (int i = revisionSequence.size() - 1; i >= 0; i--) { |
285 if (revisionSequence.get(i).equals(p)) { | 288 if (revisionSequence.get(i).equals(p)) { |
289 } | 292 } |
290 String m = String.format("Can't find index of %s for file %s", p.shortNotation(), filename); | 293 String m = String.format("Can't find index of %s for file %s", p.shortNotation(), filename); |
291 throw new HgInvalidControlFileException(m, null, new File(hgDir, filename)).setRevision(p); | 294 throw new HgInvalidControlFileException(m, null, new File(hgDir, filename)).setRevision(p); |
292 } | 295 } |
293 | 296 |
294 public boolean element(GroupElement ge) { | 297 public boolean element(GroupElement ge) throws HgRuntimeException { |
295 try { | 298 try { |
296 assert indexFile != null; | 299 assert indexFile != null; |
297 boolean writeComplete = false; | 300 boolean writeComplete = false; |
298 Nodeid deltaBase = ge.patchBase(); | 301 Nodeid deltaBase = ge.patchBase(); |
299 if (deltaBase.isNull()) { | 302 if (deltaBase.isNull()) { |