Allow DfsReader to be subclassed

Necessary if a DFS implementation wants to override close()
to record DfsReaderIoStats.

Change-Id: I144575f9bf1abf2c1fd72030550c4f0795fcf44d
This commit is contained in:
Shawn Pearce 2017-05-19 13:47:10 -07:00
parent 562de51239
commit 1513a5632d
5 changed files with 14 additions and 8 deletions

View File

@ -674,7 +674,7 @@ private static boolean isReachable(Repository repo, AnyObjectId id)
private boolean isObjectInPack(AnyObjectId id, DfsPackFile pack)
throws IOException {
try (DfsReader reader = new DfsReader(odb)) {
try (DfsReader reader = odb.newReader()) {
return pack.hasObject(reader, id);
}
}

View File

@ -530,7 +530,7 @@ public void close() throws IOException {
}
private class Reader extends ObjectReader {
private final DfsReader ctx = new DfsReader(db);
private final DfsReader ctx = db.newReader();
@Override
public ObjectReader newReader() {
@ -647,7 +647,7 @@ private class StreamLoader extends ObjectLoader {
@Override
public ObjectStream openStream() throws IOException {
final DfsReader ctx = new DfsReader(db);
final DfsReader ctx = db.newReader();
if (srcPack != packKey) {
try {
// Post DfsInserter.flush() use the normal code path.

View File

@ -170,7 +170,7 @@ public DfsReaderOptions getReaderOptions() {
}
@Override
public ObjectReader newReader() {
public DfsReader newReader() {
return new DfsReader(this);
}

View File

@ -95,7 +95,7 @@
* See the base {@link ObjectReader} documentation for details. Notably, a
* reader is not thread safe.
*/
public final class DfsReader extends ObjectReader implements ObjectReuseAsIs {
public class DfsReader extends ObjectReader implements ObjectReuseAsIs {
private static final int MAX_RESOLVE_MATCHES = 256;
/** Temporary buffer large enough for at least one raw object id. */
@ -112,7 +112,13 @@ public final class DfsReader extends ObjectReader implements ObjectReuseAsIs {
private DfsPackFile last;
private boolean avoidUnreachable;
DfsReader(DfsObjDatabase db) {
/**
* Initialize a new DfsReader
*
* @param db
* parent DfsObjDatabase.
*/
protected DfsReader(DfsObjDatabase db) {
this.db = db;
this.streamFileThreshold = db.getReaderOptions().getStreamFileThreshold();
}
@ -129,7 +135,7 @@ DeltaBaseCache getDeltaBaseCache() {
@Override
public ObjectReader newReader() {
return new DfsReader(db);
return db.newReader();
}
@Override

View File

@ -99,7 +99,7 @@ public byte[] getCachedBytes() throws LargeObjectException {
@Override
public ObjectStream openStream() throws MissingObjectException, IOException {
DfsReader ctx = new DfsReader(db);
DfsReader ctx = db.newReader();
InputStream in;
try {
in = new PackInputStream(pack, objectOffset + headerLength, ctx);