Mercurial > jhg
comparison src/org/tmatesoft/hg/repo/HgDataFile.java @ 347:8da7ade36c57
Add specific IAE subclass to handle wrong (e.g. outdated after rollback) revisions
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Tue, 22 Nov 2011 05:25:57 +0100 |
| parents | a674b8590362 |
| children | 5f9073eabf06 |
comparison
equal
deleted
inserted
replaced
| 346:6d2c6b2469fc | 347:8da7ade36c57 |
|---|---|
| 31 import java.util.Collections; | 31 import java.util.Collections; |
| 32 import java.util.List; | 32 import java.util.List; |
| 33 | 33 |
| 34 import org.tmatesoft.hg.core.HgDataStreamException; | 34 import org.tmatesoft.hg.core.HgDataStreamException; |
| 35 import org.tmatesoft.hg.core.HgException; | 35 import org.tmatesoft.hg.core.HgException; |
| 36 import org.tmatesoft.hg.core.HgInvalidRevisionException; | |
| 36 import org.tmatesoft.hg.core.HgLogCommand; | 37 import org.tmatesoft.hg.core.HgLogCommand; |
| 37 import org.tmatesoft.hg.core.Nodeid; | 38 import org.tmatesoft.hg.core.Nodeid; |
| 38 import org.tmatesoft.hg.internal.DataAccess; | 39 import org.tmatesoft.hg.internal.DataAccess; |
| 39 import org.tmatesoft.hg.internal.FilterByteChannel; | 40 import org.tmatesoft.hg.internal.FilterByteChannel; |
| 40 import org.tmatesoft.hg.internal.FilterDataAccess; | 41 import org.tmatesoft.hg.internal.FilterDataAccess; |
| 175 // } while (left > 0); | 176 // } while (left > 0); |
| 176 // progressSupport.done(); // XXX shall specify whether #done() is invoked always or only if completed successfully. | 177 // progressSupport.done(); // XXX shall specify whether #done() is invoked always or only if completed successfully. |
| 177 // } | 178 // } |
| 178 | 179 |
| 179 /*XXX not sure distinct method contentWithFilters() is the best way to do, perhaps, callers shall add filters themselves?*/ | 180 /*XXX not sure distinct method contentWithFilters() is the best way to do, perhaps, callers shall add filters themselves?*/ |
| 180 public void contentWithFilters(int revision, ByteChannel sink) throws HgDataStreamException, CancelledException { | 181 public void contentWithFilters(int revision, ByteChannel sink) throws HgDataStreamException, CancelledException, HgInvalidRevisionException { |
| 181 if (revision == WORKING_COPY) { | 182 if (revision == WORKING_COPY) { |
| 182 workingCopy(sink); // pass un-mangled sink | 183 workingCopy(sink); // pass un-mangled sink |
| 183 } else { | 184 } else { |
| 184 content(revision, new FilterByteChannel(sink, getRepo().getFiltersFromRepoToWorkingDir(getPath()))); | 185 content(revision, new FilterByteChannel(sink, getRepo().getFiltersFromRepoToWorkingDir(getPath()))); |
| 185 } | 186 } |
| 186 } | 187 } |
| 187 | 188 |
| 188 // for data files need to check heading of the file content for possible metadata | 189 // for data files need to check heading of the file content for possible metadata |
| 189 // @see http://mercurial.selenic.com/wiki/FileFormats#data.2BAC8- | 190 // @see http://mercurial.selenic.com/wiki/FileFormats#data.2BAC8- |
| 190 public void content(int revision, ByteChannel sink) throws HgDataStreamException, CancelledException { | 191 public void content(int revision, ByteChannel sink) throws HgDataStreamException, CancelledException, HgInvalidRevisionException { |
| 191 if (revision == TIP) { | 192 if (revision == TIP) { |
| 192 revision = getLastRevision(); | 193 revision = getLastRevision(); |
| 193 } | 194 } |
| 194 if (revision == WORKING_COPY) { | 195 if (revision == WORKING_COPY) { |
| 195 // sink is supposed to come into workingCopy without filters | 196 // sink is supposed to come into workingCopy without filters |
| 196 // thus we shall not get here (into #content) from #contentWithFilters(WC) | 197 // thus we shall not get here (into #content) from #contentWithFilters(WC) |
| 197 workingCopy(sink); | 198 workingCopy(sink); |
| 198 return; | 199 return; |
| 199 } | 200 } |
| 200 if (wrongLocalRevision(revision) || revision == BAD_REVISION) { | 201 if (wrongLocalRevision(revision) || revision == BAD_REVISION) { |
| 201 throw new IllegalArgumentException(String.valueOf(revision)); | 202 throw new HgInvalidRevisionException(revision); |
| 202 } | 203 } |
| 203 if (sink == null) { | 204 if (sink == null) { |
| 204 throw new IllegalArgumentException(); | 205 throw new IllegalArgumentException(); |
| 205 } | 206 } |
| 206 if (metadata == null) { | 207 if (metadata == null) { |
| 348 | 349 |
| 349 public void history(HgChangelog.Inspector inspector) { | 350 public void history(HgChangelog.Inspector inspector) { |
| 350 history(0, getLastRevision(), inspector); | 351 history(0, getLastRevision(), inspector); |
| 351 } | 352 } |
| 352 | 353 |
| 353 public void history(int start, int end, HgChangelog.Inspector inspector) { | 354 public void history(int start, int end, HgChangelog.Inspector inspector) throws HgInvalidRevisionException { |
| 354 if (!exists()) { | 355 if (!exists()) { |
| 355 throw new IllegalStateException("Can't get history of invalid repository file node"); | 356 throw new IllegalStateException("Can't get history of invalid repository file node"); |
| 356 } | 357 } |
| 357 final int last = getLastRevision(); | 358 final int last = getLastRevision(); |
| 358 if (end == TIP) { | 359 if (end == TIP) { |
