Mercurial > jhg
comparison src/org/tmatesoft/hg/internal/BlameHelper.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 | b4948b159ab1 |
children | 5f52074707b2 |
comparison
equal
deleted
inserted
replaced
627:5153eb73b18d | 628:6526d8adbc0f |
---|---|
32 import org.tmatesoft.hg.repo.HgBlameInspector.RevisionDescriptor; | 32 import org.tmatesoft.hg.repo.HgBlameInspector.RevisionDescriptor; |
33 import org.tmatesoft.hg.repo.HgBlameInspector.RevisionDescriptor.Recipient; | 33 import org.tmatesoft.hg.repo.HgBlameInspector.RevisionDescriptor.Recipient; |
34 import org.tmatesoft.hg.repo.HgBlameInspector; | 34 import org.tmatesoft.hg.repo.HgBlameInspector; |
35 import org.tmatesoft.hg.repo.HgDataFile; | 35 import org.tmatesoft.hg.repo.HgDataFile; |
36 import org.tmatesoft.hg.repo.HgInvalidStateException; | 36 import org.tmatesoft.hg.repo.HgInvalidStateException; |
37 import org.tmatesoft.hg.repo.HgRuntimeException; | |
37 import org.tmatesoft.hg.util.Adaptable; | 38 import org.tmatesoft.hg.util.Adaptable; |
38 import org.tmatesoft.hg.util.CancelledException; | 39 import org.tmatesoft.hg.util.CancelledException; |
39 import org.tmatesoft.hg.util.Pair; | 40 import org.tmatesoft.hg.util.Pair; |
40 | 41 |
41 /** | 42 /** |
60 * to iteration over file history. | 61 * to iteration over file history. |
61 | 62 |
62 * <p>NOTE, clogRevIndexEnd has to list name of the supplied file in the corresponding manifest, | 63 * <p>NOTE, clogRevIndexEnd has to list name of the supplied file in the corresponding manifest, |
63 * as it's not possible to trace rename history otherwise. | 64 * as it's not possible to trace rename history otherwise. |
64 */ | 65 */ |
65 public FileHistory prepare(HgDataFile df, int clogRevIndexStart, int clogRevIndexEnd) { | 66 public FileHistory prepare(HgDataFile df, int clogRevIndexStart, int clogRevIndexEnd) throws HgRuntimeException { |
66 assert clogRevIndexStart <= clogRevIndexEnd; | 67 assert clogRevIndexStart <= clogRevIndexEnd; |
67 FileHistory fileHistory = new FileHistory(df, clogRevIndexStart, clogRevIndexEnd); | 68 FileHistory fileHistory = new FileHistory(df, clogRevIndexStart, clogRevIndexEnd); |
68 fileHistory.build(); | 69 fileHistory.build(); |
69 int cacheHint = 5; // cache comes useful when we follow merge branches and don't want to | 70 int cacheHint = 5; // cache comes useful when we follow merge branches and don't want to |
70 // parse base revision twice. There's no easy way to determine max(distance(all(base,merge))), | 71 // parse base revision twice. There's no easy way to determine max(distance(all(base,merge))), |
82 } | 83 } |
83 return fileHistory; | 84 return fileHistory; |
84 } | 85 } |
85 | 86 |
86 // NO_REVISION is not allowed as any argument | 87 // NO_REVISION is not allowed as any argument |
87 public void diff(int fileRevIndex1, int clogRevIndex1, int fileRevIndex2, int clogRevIndex2) throws HgCallbackTargetException { | 88 public void diff(int fileRevIndex1, int clogRevIndex1, int fileRevIndex2, int clogRevIndex2) throws HgCallbackTargetException, HgRuntimeException { |
88 HgDataFile targetFile = linesCache.getFile(clogRevIndex2); | 89 HgDataFile targetFile = linesCache.getFile(clogRevIndex2); |
89 LineSequence c1 = linesCache.lines(clogRevIndex1, fileRevIndex1); | 90 LineSequence c1 = linesCache.lines(clogRevIndex1, fileRevIndex1); |
90 LineSequence c2 = linesCache.lines(clogRevIndex2, fileRevIndex2); | 91 LineSequence c2 = linesCache.lines(clogRevIndex2, fileRevIndex2); |
91 DiffHelper<LineSequence> pg = new DiffHelper<LineSequence>(); | 92 DiffHelper<LineSequence> pg = new DiffHelper<LineSequence>(); |
92 pg.init(c1, c2); | 93 pg.init(c1, c2); |
93 BlameBlockInspector bbi = new BlameBlockInspector(targetFile, fileRevIndex2, insp, clogRevIndex1, clogRevIndex2); | 94 BlameBlockInspector bbi = new BlameBlockInspector(targetFile, fileRevIndex2, insp, clogRevIndex1, clogRevIndex2); |
94 pg.findMatchingBlocks(bbi); | 95 pg.findMatchingBlocks(bbi); |
95 bbi.checkErrors(); | 96 bbi.checkErrors(); |
96 } | 97 } |
97 | 98 |
98 public void annotateChange(int fileRevIndex, int csetRevIndex, int[] fileParentRevs, int[] fileParentClogRevs) throws HgCallbackTargetException { | 99 public void annotateChange(int fileRevIndex, int csetRevIndex, int[] fileParentRevs, int[] fileParentClogRevs) throws HgCallbackTargetException, HgRuntimeException { |
99 HgDataFile targetFile = linesCache.getFile(csetRevIndex); | 100 HgDataFile targetFile = linesCache.getFile(csetRevIndex); |
100 final LineSequence fileRevLines = linesCache.lines(csetRevIndex, fileRevIndex); | 101 final LineSequence fileRevLines = linesCache.lines(csetRevIndex, fileRevIndex); |
101 if (fileParentClogRevs[0] != NO_REVISION && fileParentClogRevs[1] != NO_REVISION) { | 102 if (fileParentClogRevs[0] != NO_REVISION && fileParentClogRevs[1] != NO_REVISION) { |
102 int p1ClogIndex = fileParentClogRevs[0]; | 103 int p1ClogIndex = fileParentClogRevs[0]; |
103 int p2ClogIndex = fileParentClogRevs[1]; | 104 int p2ClogIndex = fileParentClogRevs[1]; |
174 } | 175 } |
175 } | 176 } |
176 throw new HgInvalidStateException(String.format("Got %d file-changelog mappings, but no luck for revision %d.", files.size(), clogRevIndex)); | 177 throw new HgInvalidStateException(String.format("Got %d file-changelog mappings, but no luck for revision %d.", files.size(), clogRevIndex)); |
177 } | 178 } |
178 | 179 |
179 public LineSequence lines(int clogRevIndex, int fileRevIndex) { | 180 public LineSequence lines(int clogRevIndex, int fileRevIndex) throws HgRuntimeException { |
180 Pair<Integer, LineSequence> cached = checkCache(clogRevIndex); | 181 Pair<Integer, LineSequence> cached = checkCache(clogRevIndex); |
181 if (cached != null) { | 182 if (cached != null) { |
182 return cached.second(); | 183 return cached.second(); |
183 } | 184 } |
184 HgDataFile df = getFile(clogRevIndex); | 185 HgDataFile df = getFile(clogRevIndex); |