Mercurial > jhg
comparison src/org/tmatesoft/hg/repo/HgBlameFacility.java @ 561:d3c71498919c
Do not process child revisions before all possible parent paths were visited
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Wed, 27 Feb 2013 19:37:58 +0100 | 
| parents | 154718ae23ed | 
| children | 6fbca6506bb5 | 
   comparison
  equal
  deleted
  inserted
  replaced
| 560:52263817b998 | 561:d3c71498919c | 
|---|---|
| 78 fileParentRevs.add(NO_REVISION, NO_REVISION); | 78 fileParentRevs.add(NO_REVISION, NO_REVISION); | 
| 79 for (int i = 1; i <= fileRevIndex; i++) { | 79 for (int i = 1; i <= fileRevIndex; i++) { | 
| 80 df.parents(i, fileRevParents, null, null); | 80 df.parents(i, fileRevParents, null, null); | 
| 81 fileParentRevs.add(fileRevParents[0], fileRevParents[1]); | 81 fileParentRevs.add(fileRevParents[0], fileRevParents[1]); | 
| 82 } | 82 } | 
| 83 // collect file revisions to visit, from newest to oldest | 83 // collect file revisions to visit, from newest to oldest: | 
| 84 // traverse parents, starting from the given file revision | |
| 85 // this ignores all file revision made in parallel to the one of interest | |
| 84 IntVector fileRevsToVisit = new IntVector(fileRevIndex + 1, 0); | 86 IntVector fileRevsToVisit = new IntVector(fileRevIndex + 1, 0); | 
| 85 LinkedList<Integer> queue = new LinkedList<Integer>(); | 87 LinkedList<Integer> queue = new LinkedList<Integer>(); | 
| 86 BitSet seen = new BitSet(fileRevIndex + 1); | 88 BitSet seen = new BitSet(fileRevIndex + 1); | 
| 87 queue.add(fileRevIndex); | 89 queue.add(fileRevIndex); | 
| 88 do { | 90 do { | 
| 100 if (p2 != NO_REVISION) { | 102 if (p2 != NO_REVISION) { | 
| 101 queue.addLast(p2); | 103 queue.addLast(p2); | 
| 102 } | 104 } | 
| 103 } while (!queue.isEmpty()); | 105 } while (!queue.isEmpty()); | 
| 104 FileLinesCache fileInfoCache = new FileLinesCache(df, 10); | 106 FileLinesCache fileInfoCache = new FileLinesCache(df, 10); | 
| 107 // make sure no child is processed before we handled all (grand-)parents of the element | |
| 108 fileRevsToVisit.sort(false); | |
| 105 // fileRevsToVisit now { r10, r7, r6, r5, r0 } | 109 // fileRevsToVisit now { r10, r7, r6, r5, r0 } | 
| 106 // and we'll iterate it from behind, e.g. old to new unless reversed | 110 // and we'll iterate it from behind, e.g. old to new unless reversed | 
| 107 if (iterateOrder == HgIterateDirection.NewToOld) { | 111 if (iterateOrder == HgIterateDirection.NewToOld) { | 
| 108 fileRevsToVisit.reverse(); | 112 fileRevsToVisit.reverse(); | 
| 109 } | 113 } | 
