Mercurial > jhg
comparison src/org/tmatesoft/hg/repo/HgBundle.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 | 5daa42067e7c |
children | 14dac192aa26 |
comparison
equal
deleted
inserted
replaced
627:5153eb73b18d | 628:6526d8adbc0f |
---|---|
141 a6f39e595b2b54f56304470269a936ead77f5725 9429c7bd1920fab164a9d2b621d38d57bcb49ae0 30bd389788464287cee22ccff54c330a4b715de5 a6f39e595b2b54f56304470269a936ead77f5725; patches:3 | 141 a6f39e595b2b54f56304470269a936ead77f5725 9429c7bd1920fab164a9d2b621d38d57bcb49ae0 30bd389788464287cee22ccff54c330a4b715de5 a6f39e595b2b54f56304470269a936ead77f5725; patches:3 |
142 fd4f2c98995beb051070630c272a9be87bef617d 30bd389788464287cee22ccff54c330a4b715de5 0000000000000000000000000000000000000000 fd4f2c98995beb051070630c272a9be87bef617d; patches:3 | 142 fd4f2c98995beb051070630c272a9be87bef617d 30bd389788464287cee22ccff54c330a4b715de5 0000000000000000000000000000000000000000 fd4f2c98995beb051070630c272a9be87bef617d; patches:3 |
143 | 143 |
144 To recreate 30bd..e5, one have to take content of 9429..e0, not its p1 f1db..5e | 144 To recreate 30bd..e5, one have to take content of 9429..e0, not its p1 f1db..5e |
145 */ | 145 */ |
146 public boolean element(GroupElement ge) { | 146 public boolean element(GroupElement ge) throws HgRuntimeException { |
147 emptyChangelog = false; | 147 emptyChangelog = false; |
148 HgChangelog changelog = hgRepo.getChangelog(); | 148 HgChangelog changelog = hgRepo.getChangelog(); |
149 try { | 149 try { |
150 if (prevRevContent == null) { | 150 if (prevRevContent == null) { |
151 if (ge.firstParent().isNull() && ge.secondParent().isNull()) { | 151 if (ge.firstParent().isNull() && ge.secondParent().isNull()) { |
192 } | 192 } |
193 | 193 |
194 // callback to minimize amount of Strings and Nodeids instantiated | 194 // callback to minimize amount of Strings and Nodeids instantiated |
195 @Callback | 195 @Callback |
196 public interface Inspector { | 196 public interface Inspector { |
197 void changelogStart(); | 197 void changelogStart() throws HgRuntimeException; |
198 | 198 |
199 void changelogEnd(); | 199 void changelogEnd() throws HgRuntimeException; |
200 | 200 |
201 void manifestStart(); | 201 void manifestStart() throws HgRuntimeException; |
202 | 202 |
203 void manifestEnd(); | 203 void manifestEnd() throws HgRuntimeException; |
204 | 204 |
205 void fileStart(String name); | 205 void fileStart(String name) throws HgRuntimeException; |
206 | 206 |
207 void fileEnd(String name); | 207 void fileEnd(String name) throws HgRuntimeException; |
208 | 208 |
209 /** | 209 /** |
210 * XXX desperately need exceptions here | 210 * XXX desperately need exceptions here |
211 * @param element data element, instance might be reused, don't keep a reference to it or its raw data | 211 * @param element data element, instance might be reused, don't keep a reference to it or its raw data |
212 * @return <code>true</code> to continue | 212 * @return <code>true</code> to continue |
213 */ | 213 */ |
214 boolean element(GroupElement element); | 214 boolean element(GroupElement element) throws HgRuntimeException; |
215 } | 215 } |
216 | 216 |
217 /** | 217 /** |
218 * @param inspector callback to visit changelog entries | 218 * @param inspector callback to visit changelog entries |
219 * @throws HgRuntimeException subclass thereof to indicate issues with the library. <em>Runtime exception</em> | 219 * @throws HgRuntimeException subclass thereof to indicate issues with the library. <em>Runtime exception</em> |
353 lifecycle.finish(flowControl); | 353 lifecycle.finish(flowControl); |
354 } | 354 } |
355 flowControl = null; | 355 flowControl = null; |
356 } | 356 } |
357 | 357 |
358 private void internalInspectChangelog(DataAccess da, Inspector inspector) throws IOException { | 358 private void internalInspectChangelog(DataAccess da, Inspector inspector) throws IOException, HgRuntimeException { |
359 if (da.isEmpty()) { | 359 if (da.isEmpty()) { |
360 return; | 360 return; |
361 } | 361 } |
362 inspector.changelogStart(); | 362 inspector.changelogStart(); |
363 if (flowControl.isStopped()) { | 363 if (flowControl.isStopped()) { |
368 return; | 368 return; |
369 } | 369 } |
370 inspector.changelogEnd(); | 370 inspector.changelogEnd(); |
371 } | 371 } |
372 | 372 |
373 private void internalInspectManifest(DataAccess da, Inspector inspector) throws IOException { | 373 private void internalInspectManifest(DataAccess da, Inspector inspector) throws IOException, HgRuntimeException { |
374 if (da.isEmpty()) { | 374 if (da.isEmpty()) { |
375 return; | 375 return; |
376 } | 376 } |
377 inspector.manifestStart(); | 377 inspector.manifestStart(); |
378 if (flowControl.isStopped()) { | 378 if (flowControl.isStopped()) { |
383 return; | 383 return; |
384 } | 384 } |
385 inspector.manifestEnd(); | 385 inspector.manifestEnd(); |
386 } | 386 } |
387 | 387 |
388 private void internalInspectFiles(DataAccess da, Inspector inspector) throws IOException { | 388 private void internalInspectFiles(DataAccess da, Inspector inspector) throws IOException, HgRuntimeException { |
389 while (!da.isEmpty()) { | 389 while (!da.isEmpty()) { |
390 int fnameLen = da.readInt(); | 390 int fnameLen = da.readInt(); |
391 if (fnameLen <= 4) { | 391 if (fnameLen <= 4) { |
392 break; // null chunk, the last one. | 392 break; // null chunk, the last one. |
393 } | 393 } |
404 } | 404 } |
405 inspector.fileEnd(name); | 405 inspector.fileEnd(name); |
406 } | 406 } |
407 } | 407 } |
408 | 408 |
409 private static void readGroup(DataAccess da, Inspector inspector) throws IOException { | 409 private static void readGroup(DataAccess da, Inspector inspector) throws IOException, HgRuntimeException { |
410 int len = da.readInt(); | 410 int len = da.readInt(); |
411 boolean good2go = true; | 411 boolean good2go = true; |
412 Nodeid prevNodeid = Nodeid.NULL; | 412 Nodeid prevNodeid = Nodeid.NULL; |
413 while (len > 4 && !da.isEmpty() && good2go) { | 413 while (len > 4 && !da.isEmpty() && good2go) { |
414 byte[] nb = new byte[80]; | 414 byte[] nb = new byte[80]; |