Mercurial > jhg
comparison src/org/tmatesoft/hg/repo/HgManifest.java @ 424:6437d261048a
Deprecated code removed
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Wed, 28 Mar 2012 15:42:15 +0200 |
parents | 9c9c442b5f2e |
children | 48f993aa2f41 |
comparison
equal
deleted
inserted
replaced
423:9c9c442b5f2e | 424:6437d261048a |
---|---|
335 | 335 |
336 @Callback | 336 @Callback |
337 public interface Inspector { | 337 public interface Inspector { |
338 boolean begin(int mainfestRevision, Nodeid nid, int changelogRevision); | 338 boolean begin(int mainfestRevision, Nodeid nid, int changelogRevision); |
339 /** | 339 /** |
340 * @deprecated switch to {@link HgManifest.Inspector2#next(Nodeid, Path, HgManifest.Flags)} | |
341 */ | |
342 @Deprecated | |
343 boolean next(Nodeid nid, String fname, String flags); | |
344 boolean end(int manifestRevision); | |
345 } | |
346 | |
347 @Experimental(reason="Explore Path alternative for filenames and enum for flags") | |
348 @Callback | |
349 public interface Inspector2 extends Inspector { | |
350 /** | |
351 * @param nid file revision | 340 * @param nid file revision |
352 * @param fname file name | 341 * @param fname file name |
353 * @param flags one of {@link HgManifest.Flags} constants, not <code>null</code> | 342 * @param flags one of {@link HgManifest.Flags} constants, not <code>null</code> |
354 * @return <code>true</code> to continue iteration, <code>false</code> to stop | 343 * @return <code>true</code> to continue iteration, <code>false</code> to stop |
355 */ | 344 */ |
356 boolean next(Nodeid nid, Path fname, Flags flags); | 345 boolean next(Nodeid nid, Path fname, Flags flags); |
357 } | 346 boolean end(int manifestRevision); |
358 | 347 } |
348 | |
359 /** | 349 /** |
360 * When Pool uses Strings directly, | 350 * When Pool uses Strings directly, |
361 * ManifestParser creates new String instance with new char[] value, and does byte->char conversion. | 351 * ManifestParser creates new String instance with new char[] value, and does byte->char conversion. |
362 * For cpython repo, walk(0..10k), there are over 16 million filenames, of them only 3020 unique. | 352 * For cpython repo, walk(0..10k), there are over 16 million filenames, of them only 3020 unique. |
363 * This means there are 15.9 million useless char[] instances and byte->char conversions | 353 * This means there are 15.9 million useless char[] instances and byte->char conversions |
427 } | 417 } |
428 } | 418 } |
429 | 419 |
430 private static class ManifestParser implements RevlogStream.Inspector, Lifecycle { | 420 private static class ManifestParser implements RevlogStream.Inspector, Lifecycle { |
431 private final Inspector inspector; | 421 private final Inspector inspector; |
432 private final Inspector2 inspector2; | |
433 private Pool2<Nodeid> nodeidPool, thisRevPool; | 422 private Pool2<Nodeid> nodeidPool, thisRevPool; |
434 private final Pool2<PathProxy> fnamePool; | 423 private final Pool2<PathProxy> fnamePool; |
435 private byte[] nodeidLookupBuffer = new byte[20]; // get reassigned each time new Nodeid is added to pool | 424 private byte[] nodeidLookupBuffer = new byte[20]; // get reassigned each time new Nodeid is added to pool |
436 private final ProgressSupport progressHelper; | 425 private final ProgressSupport progressHelper; |
437 private IterateControlMediator iterateControl; | 426 private IterateControlMediator iterateControl; |
438 private final EncodingHelper encHelper; | 427 private final EncodingHelper encHelper; |
439 | 428 |
440 public ManifestParser(Inspector delegate, EncodingHelper eh) { | 429 public ManifestParser(Inspector delegate, EncodingHelper eh) { |
441 assert delegate != null; | 430 assert delegate != null; |
442 inspector = delegate; | 431 inspector = delegate; |
443 inspector2 = delegate instanceof Inspector2 ? (Inspector2) delegate : null; | |
444 encHelper = eh; | 432 encHelper = eh; |
445 nodeidPool = new Pool2<Nodeid>(); | 433 nodeidPool = new Pool2<Nodeid>(); |
446 fnamePool = new Pool2<PathProxy>(); | 434 fnamePool = new Pool2<PathProxy>(); |
447 thisRevPool = new Pool2<Nodeid>(); | 435 thisRevPool = new Pool2<Nodeid>(); |
448 progressHelper = ProgressSupport.Factory.get(delegate); | 436 progressHelper = ProgressSupport.Factory.get(delegate); |
491 // for cpython 0..10k, there are 4361062 flag checks, and there's only 1 unique flag | 479 // for cpython 0..10k, there are 4361062 flag checks, and there's only 1 unique flag |
492 flags = Flags.parse(data, x + nodeidLen, i-x-nodeidLen); | 480 flags = Flags.parse(data, x + nodeidLen, i-x-nodeidLen); |
493 } else { | 481 } else { |
494 flags = Flags.RegularFile; | 482 flags = Flags.RegularFile; |
495 } | 483 } |
496 boolean good2go; | 484 boolean good2go = inspector.next(nid, fname, flags); |
497 if (inspector2 == null) { | |
498 String flagString = flags == Flags.RegularFile ? null : flags.nativeString(); | |
499 good2go = inspector.next(nid, fname.toString(), flagString); | |
500 } else { | |
501 good2go = inspector2.next(nid, fname, flags); | |
502 } | |
503 if (!good2go) { | 485 if (!good2go) { |
504 iterateControl.stop(); | 486 iterateControl.stop(); |
505 return; | 487 return; |
506 } | 488 } |
507 } | 489 } |