Top Description Inners Fields Constructors Methods
org.eclipse.jgit.internal.fsck

public Class FsckPackParser

extends PackParser
Class Inheritance
Imports
java.io.IOException, java.nio.ByteBuffer, java.nio.channels.Channels, java.text.MessageFormat, java.util.Arrays, .HashSet, .Set, java.util.zip.CRC32, org.eclipse.jgit.errors.CorruptObjectException, .CorruptPackIndexException, .CorruptPackIndexException.ErrorType, .MissingObjectException, org.eclipse.jgit.internal.JGitText, org.eclipse.jgit.internal.fsck.FsckError.CorruptObject, org.eclipse.jgit.internal.storage.dfs.ReadableChannel, org.eclipse.jgit.internal.storage.file.PackIndex, .PackIndex.MutableEntry, org.eclipse.jgit.lib.AnyObjectId, .ObjectDatabase, .ObjectIdOwnerMap, org.eclipse.jgit.transport.PackParser, .PackedObjectInfo

A read-only pack parser for object validity checking.

Nested and Inner Type Summary

Modifier and TypeClass and Description
pack-priv static class

Field Summary

Modifier and TypeField and Description
private int
private final ReadableChannel
private final Set<FsckError.CorruptObject>
private final CRC32
private long
private long

Constructor Summary

AccessConstructor and Description
public
FsckPackParser(ObjectDatabase
the object database which stores repository's data.
db
,
ReadableChannel
readable channel of the pack file.
channel
)

Constructor for FsckPackParser

Method Summary

Modifier and TypeMethod and Description
protected boolean
checkCRC(int
the prior CRC that was recorded during the first scan of the object from the pack stream.
oldCRC
)

Implements abstract org.eclipse.jgit.transport.PackParser.checkCRC.

Check the current CRC matches the expected value.

public Set<FsckError.CorruptObject>

Returns:

corrupt objects that are reported by org.eclipse.jgit.lib.ObjectChecker.
getCorruptObjects
()

Get corrupt objects reported by org.eclipse.jgit.lib.ObjectChecker

protected boolean
onAppendBase(int
type of the base object.
typeCode
,
byte[]
complete content of the base object.
data
,
PackedObjectInfo
packed object information for this base. Implementors must populate the CRC and offset members if returning true.
info
)

Implements abstract org.eclipse.jgit.transport.PackParser.onAppendBase.

Provide the implementation with a base that was outside of the pack.

protected void
onBeginOfsDelta(long
position of this object in the incoming stream.
deltaStreamPosition
,
long
position of the base object in the incoming stream. The base must be before the delta, therefore baseStreamPosition < deltaStreamPosition. This is not the position returned by a prior end object event.
baseStreamPosition
,
long
size of the delta when fully inflated. The size stored within the pack may be larger or smaller, and is not yet known.
inflatedSize
)

Implements abstract org.eclipse.jgit.transport.PackParser.onBeginOfsDelta.

Event notifying start of a delta referencing its base by offset.

protected void
onBeginRefDelta(long
position of this object in the incoming stream.
deltaStreamPosition
,
AnyObjectId
name of the base object. This object may be later in the stream, or might not appear at all in the stream (in the case of a thin-pack).
baseId
,
long
size of the delta when fully inflated. The size stored within the pack may be larger or smaller, and is not yet known.
inflatedSize
)

Implements abstract org.eclipse.jgit.transport.PackParser.onBeginRefDelta.

Event notifying start of a delta referencing its base by ObjectId.

protected void
onBeginWholeObject(long
position of this object in the incoming stream.
streamPosition
,
int type, long
size of the object when fully inflated. The size stored within the pack may be larger or smaller, and is not yet known.
inflatedSize
)

Implements abstract org.eclipse.jgit.transport.PackParser.onBeginWholeObject.

Event notifying the start of an object stored whole (not as a delta).

protected PackParser.UnresolvedDelta
onEndDelta()

Overrides org.eclipse.jgit.transport.PackParser.onEndDelta.

Event notifying the current object.

protected void
onEndThinPack()

Implements abstract org.eclipse.jgit.transport.PackParser.onEndThinPack.

Event indicating a thin pack has been completely processed.

protected void
onEndWholeObject(PackedObjectInfo
object information.
info
)

Implements abstract org.eclipse.jgit.transport.PackParser.onEndWholeObject.

Event notifying the current object.

protected void
onInflatedObjectData(PackedObjectInfo
the object info, populated.
obj
,
int
the type of the object.
typeCode
,
byte[]
inflated data for the object.
data
)

Implements abstract org.eclipse.jgit.transport.PackParser.onInflatedObjectData.

Invoked for commits, trees, tags, and small blobs.

protected void
onObjectData(PackParser.Source
where the data came from
src
,
byte[]
buffer to read data from.
raw
,
int
first offset within buffer that is valid.
pos
,
int
number of bytes in buffer that are valid.
len
)

Implements abstract org.eclipse.jgit.transport.PackParser.onObjectData.

Store (and/or checksum) a portion of an object's data.

protected void
onObjectHeader(PackParser.Source
where the data came from
src
,
byte[]
buffer to read data from.
raw
,
int
first offset within buffer that is valid.
pos
,
int
number of bytes in buffer that are valid.
len
)

Implements abstract org.eclipse.jgit.transport.PackParser.onObjectHeader.

Store (and/or checksum) an object header.

protected void
onPackFooter(byte[]
the trailing 20 bytes of the pack, this is a SHA-1 checksum of all of the pack data.
hash
)

Implements abstract org.eclipse.jgit.transport.PackParser.onPackFooter.

Provide the implementation with the original stream's pack footer.

protected void
onPackHeader(long
number of objects expected in the stream.
objCnt
)

Implements abstract org.eclipse.jgit.transport.PackParser.onPackHeader.

Provide the implementation with the original stream's pack header.

protected void
onStoreStream(byte[]
buffer to copy data out of.
raw
,
int
first offset within the buffer that is valid.
pos
,
int
number of bytes in the buffer that are valid.
len
)

Implements abstract org.eclipse.jgit.transport.PackParser.onStoreStream.

Store bytes received from the raw stream.

public void
overwriteObjectCount(long
the actual expected object count.
objectCount
)

Set the object count for overwriting the expected object count from pack header.

pack-priv int
read(long channelPosition, byte[] dst, int pos, int cnt)

protected int
readDatabase(byte[]
the buffer to copy read data into.
dst
,
int
position within dst to start copying data into.
pos
,
int
ideal target number of bytes to read. Actual read length may be shorter.
cnt
)

Implements abstract org.eclipse.jgit.transport.PackParser.readDatabase.

Read from the database's current position into the buffer.

private byte[]
readFromChannel(long block)

protected PackParser.ObjectTypeAndSize
seekDatabase(PackedObjectInfo
the object position to begin reading from. This is from newInfo(AnyObjectId, UnresolvedDelta, ObjectId).
obj
,
PackParser.ObjectTypeAndSize
object to populate with type and size.
info
)

Implements abstract org.eclipse.jgit.transport.PackParser.seekDatabase.

Reposition the database to re-read a previously stored object.

protected PackParser.ObjectTypeAndSize
seekDatabase(PackParser.UnresolvedDelta
the object position to begin reading from. This is an instance previously returned by onEndDelta().
delta
,
PackParser.ObjectTypeAndSize
object to populate with type and size.
info
)

Implements abstract org.eclipse.jgit.transport.PackParser.seekDatabase.

Reposition the database to re-read a previously stored object.

public void
verifyIndex(PackIndex
index file associate with the pack
idx
)

Verify the existing index file with all objects from the pack.

protected void
verifySafeObject(final AnyObjectId
identity of the object to be checked.
id
,
final int
the type of the object.
type
,
final byte[]
raw content of the object.
data
)

Overrides org.eclipse.jgit.transport.PackParser.verifySafeObject.

Verify the integrity of the object.

Inherited from org.eclipse.jgit.transport.PackParser:
buffergetBaseObjectIdsgetLockMessagegetNewObjectIdsgetObjectgetObjectCountgetPackSizegetReceivedPackStatisticsgetSortedObjectListisAllowThinisCheckEofAfterPackFooterisCheckObjectCollisionsisExpectDataAfterPackFooternewInfoparseparsereadObjectHeadersetAllowThinsetCheckEofAfterPackFootersetCheckObjectCollisionssetExpectDataAfterPackFootersetExpectedObjectCountsetLockMessagesetMaxObjectSizeLimitsetNeedBaseObjectIdssetNeedNewObjectIdssetObjectCheckersetObjectChecking

Field Detail

blockSizeback to summary
private int blockSize
channelback to summary
private final ReadableChannel channel
corruptObjectsback to summary
private final Set<FsckError.CorruptObject> corruptObjects
crcback to summary
private final CRC32 crc
expectedObjectCountback to summary
private long expectedObjectCount

Hides org.eclipse.jgit.transport.PackParser.expectedObjectCount.

offsetback to summary
private long offset

Constructor Detail

FsckPackParserback to summary
public FsckPackParser(ObjectDatabase db, ReadableChannel channel)

Constructor for FsckPackParser

Parameters
db:ObjectDatabase

the object database which stores repository's data.

channel:ReadableChannel

readable channel of the pack file.

Method Detail

checkCRCback to summary
protected boolean checkCRC(int oldCRC)

Implements abstract org.eclipse.jgit.transport.PackParser.checkCRC.

Doc from org.eclipse.jgit.transport.PackParser.checkCRC.

Check the current CRC matches the expected value.

This method is invoked when an object is read back in from the database and its data is used during delta resolution. The CRC is validated after the object has been fully read, allowing the parser to verify there was no silent data corruption.

Implementations are free to ignore this check by always returning true if they are performing other data integrity validations at a lower level.

Parameters
oldCRC:int

the prior CRC that was recorded during the first scan of the object from the pack stream.

Returns:boolean

true if the CRC matches; false if it does not.

Annotations
@Override
getCorruptObjectsback to summary
public Set<FsckError.CorruptObject> getCorruptObjects()

Get corrupt objects reported by org.eclipse.jgit.lib.ObjectChecker

Returns:Set<FsckError.CorruptObject>

corrupt objects that are reported by org.eclipse.jgit.lib.ObjectChecker.

onAppendBaseback to summary
protected boolean onAppendBase(int typeCode, byte[] data, PackedObjectInfo info) throws IOException

Implements abstract org.eclipse.jgit.transport.PackParser.onAppendBase.

Doc from org.eclipse.jgit.transport.PackParser.onAppendBase.

Provide the implementation with a base that was outside of the pack.

This event only occurs on a thin pack for base objects that were outside of the pack and came from the local repository. Usually an implementation uses this event to compress the base and append it onto the end of the pack, so the pack stays self-contained.

Parameters
typeCode:int

type of the base object.

data:byte[]

complete content of the base object.

info:PackedObjectInfo

packed object information for this base. Implementors must populate the CRC and offset members if returning true.

Returns:boolean

true if the info should be included in the object list returned by getSortedObjectList(Comparator), false if it should not be included.

Annotations
@Override
Exceptions
IOException:
the base could not be included into the pack.
onBeginOfsDeltaback to summary
protected void onBeginOfsDelta(long deltaStreamPosition, long baseStreamPosition, long inflatedSize) throws IOException

Implements abstract org.eclipse.jgit.transport.PackParser.onBeginOfsDelta.

Doc from org.eclipse.jgit.transport.PackParser.onBeginOfsDelta.

Event notifying start of a delta referencing its base by offset.

Parameters
deltaStreamPosition:long

position of this object in the incoming stream.

baseStreamPosition:long

position of the base object in the incoming stream. The base must be before the delta, therefore baseStreamPosition < deltaStreamPosition. This is not the position returned by a prior end object event.

inflatedSize:long

size of the delta when fully inflated. The size stored within the pack may be larger or smaller, and is not yet known.

Annotations
@Override
Exceptions
IOException:
the object cannot be recorded.
onBeginRefDeltaback to summary
protected void onBeginRefDelta(long deltaStreamPosition, AnyObjectId baseId, long inflatedSize) throws IOException

Implements abstract org.eclipse.jgit.transport.PackParser.onBeginRefDelta.

Doc from org.eclipse.jgit.transport.PackParser.onBeginRefDelta.

Event notifying start of a delta referencing its base by ObjectId.

Parameters
deltaStreamPosition:long

position of this object in the incoming stream.

baseId:AnyObjectId

name of the base object. This object may be later in the stream, or might not appear at all in the stream (in the case of a thin-pack).

inflatedSize:long

size of the delta when fully inflated. The size stored within the pack may be larger or smaller, and is not yet known.

Annotations
@Override
Exceptions
IOException:
the object cannot be recorded.
onBeginWholeObjectback to summary
protected void onBeginWholeObject(long streamPosition, int type, long inflatedSize) throws IOException

Implements abstract org.eclipse.jgit.transport.PackParser.onBeginWholeObject.

Doc from org.eclipse.jgit.transport.PackParser.onBeginWholeObject.

Event notifying the start of an object stored whole (not as a delta).

Parameters
streamPosition:long

position of this object in the incoming stream.

type:int

type of the object; one of org.eclipse.jgit.lib.Constants#OBJ_COMMIT, org.eclipse.jgit.lib.Constants#OBJ_TREE, org.eclipse.jgit.lib.Constants#OBJ_BLOB, or org.eclipse.jgit.lib.Constants#OBJ_TAG.

inflatedSize:long

size of the object when fully inflated. The size stored within the pack may be larger or smaller, and is not yet known.

Annotations
@Override
Exceptions
IOException:
the object cannot be recorded.
onEndDeltaback to summary
protected PackParser.UnresolvedDelta onEndDelta() throws IOException

Overrides org.eclipse.jgit.transport.PackParser.onEndDelta.

Doc from org.eclipse.jgit.transport.PackParser.onEndDelta.

Event notifying the current object.

Returns:PackParser.UnresolvedDelta

object information that must be populated with at least the offset.

Annotations
@Override
Exceptions
IOException:
the object cannot be recorded.
onEndThinPackback to summary
protected void onEndThinPack() throws IOException

Implements abstract org.eclipse.jgit.transport.PackParser.onEndThinPack.

Doc from org.eclipse.jgit.transport.PackParser.onEndThinPack.

Event indicating a thin pack has been completely processed.

This event is invoked only if a thin pack has delta references to objects external from the pack. The event is called after all of those deltas have been resolved.

Annotations
@Override
Exceptions
IOException:
the pack cannot be archived.
onEndWholeObjectback to summary
protected void onEndWholeObject(PackedObjectInfo info) throws IOException

Implements abstract org.eclipse.jgit.transport.PackParser.onEndWholeObject.

Doc from org.eclipse.jgit.transport.PackParser.onEndWholeObject.

Event notifying the current object.

Parameters
info:PackedObjectInfo

object information.

Annotations
@Override
Exceptions
IOException:
the object cannot be recorded.
onInflatedObjectDataback to summary
protected void onInflatedObjectData(PackedObjectInfo obj, int typeCode, byte[] data) throws IOException

Implements abstract org.eclipse.jgit.transport.PackParser.onInflatedObjectData.

Doc from org.eclipse.jgit.transport.PackParser.onInflatedObjectData.

Invoked for commits, trees, tags, and small blobs.

Parameters
obj:PackedObjectInfo

the object info, populated.

typeCode:int

the type of the object.

data:byte[]

inflated data for the object.

Annotations
@Override
Exceptions
IOException:
the object cannot be archived.
onObjectDataback to summary
protected void onObjectData(PackParser.Source src, byte[] raw, int pos, int len) throws IOException

Implements abstract org.eclipse.jgit.transport.PackParser.onObjectData.

Doc from org.eclipse.jgit.transport.PackParser.onObjectData.

Store (and/or checksum) a portion of an object's data.

This method may be invoked multiple times per object, depending on the size of the object, the size of the parser's internal read buffer, and the alignment of the object relative to the read buffer.

Invoked after onObjectHeader(Source, byte[], int, int).

Parameters
src:PackParser.Source

where the data came from

raw:byte[]

buffer to read data from.

pos:int

first offset within buffer that is valid.

len:int

number of bytes in buffer that are valid.

Annotations
@Override
Exceptions
IOException:
the stream cannot be archived.
onObjectHeaderback to summary
protected void onObjectHeader(PackParser.Source src, byte[] raw, int pos, int len) throws IOException

Implements abstract org.eclipse.jgit.transport.PackParser.onObjectHeader.

Doc from org.eclipse.jgit.transport.PackParser.onObjectHeader.

Store (and/or checksum) an object header.

Invoked after any of the onBegin() events. The entire header is supplied in a single invocation, before any object data is supplied.

Parameters
src:PackParser.Source

where the data came from

raw:byte[]

buffer to read data from.

pos:int

first offset within buffer that is valid.

len:int

number of bytes in buffer that are valid.

Annotations
@Override
Exceptions
IOException:
the stream cannot be archived.
onPackFooterback to summary
protected void onPackFooter(byte[] hash) throws IOException

Implements abstract org.eclipse.jgit.transport.PackParser.onPackFooter.

Doc from org.eclipse.jgit.transport.PackParser.onPackFooter.

Provide the implementation with the original stream's pack footer.

Parameters
hash:byte[]

the trailing 20 bytes of the pack, this is a SHA-1 checksum of all of the pack data.

Annotations
@Override
Exceptions
IOException:
the stream cannot be archived.
onPackHeaderback to summary
protected void onPackHeader(long objCnt) throws IOException

Implements abstract org.eclipse.jgit.transport.PackParser.onPackHeader.

Doc from org.eclipse.jgit.transport.PackParser.onPackHeader.

Provide the implementation with the original stream's pack header.

Parameters
objCnt:long

number of objects expected in the stream.

Annotations
@Override
Exceptions
IOException:
the implementation refuses to work with this many objects.
onStoreStreamback to summary
protected void onStoreStream(byte[] raw, int pos, int len) throws IOException

Implements abstract org.eclipse.jgit.transport.PackParser.onStoreStream.

Doc from org.eclipse.jgit.transport.PackParser.onStoreStream.

Store bytes received from the raw stream.

This method is invoked during parse(ProgressMonitor) as data is consumed from the incoming stream. Implementors may use this event to archive the raw incoming stream to the destination repository in large chunks, without paying attention to object boundaries.

The only component of the pack not supplied to this method is the last 20 bytes of the pack that comprise the trailing SHA-1 checksum. Those are passed to onPackFooter(byte[]).

Parameters
raw:byte[]

buffer to copy data out of.

pos:int

first offset within the buffer that is valid.

len:int

number of bytes in the buffer that are valid.

Annotations
@Override
Exceptions
IOException:
the stream cannot be archived.
overwriteObjectCountback to summary
public void overwriteObjectCount(long objectCount)

Set the object count for overwriting the expected object count from pack header.

Parameters
objectCount:long

the actual expected object count.

readback to summary
pack-priv int read(long channelPosition, byte[] dst, int pos, int cnt) throws IOException
readDatabaseback to summary
protected int readDatabase(byte[] dst, int pos, int cnt) throws IOException

Implements abstract org.eclipse.jgit.transport.PackParser.readDatabase.

Doc from org.eclipse.jgit.transport.PackParser.readDatabase.

Read from the database's current position into the buffer.

Parameters
dst:byte[]

the buffer to copy read data into.

pos:int

position within dst to start copying data into.

cnt:int

ideal target number of bytes to read. Actual read length may be shorter.

Returns:int

number of bytes stored.

Annotations
@Override
Exceptions
IOException:
the database cannot be accessed.
readFromChannelback to summary
private byte[] readFromChannel(long block) throws IOException
seekDatabaseback to summary
protected PackParser.ObjectTypeAndSize seekDatabase(PackedObjectInfo obj, PackParser.ObjectTypeAndSize info) throws IOException

Implements abstract org.eclipse.jgit.transport.PackParser.seekDatabase.

Doc from org.eclipse.jgit.transport.PackParser.seekDatabase.

Reposition the database to re-read a previously stored object.

If the database is computing CRC-32 checksums for object data, it should reset its internal CRC instance during this method call.

Parameters
obj:PackedObjectInfo

the object position to begin reading from. This is from newInfo(AnyObjectId, UnresolvedDelta, ObjectId).

info:PackParser.ObjectTypeAndSize

object to populate with type and size.

Returns:PackParser.ObjectTypeAndSize

the info object.

Annotations
@Override
Exceptions
IOException:
the database cannot reposition to this location.
seekDatabaseback to summary
protected PackParser.ObjectTypeAndSize seekDatabase(PackParser.UnresolvedDelta delta, PackParser.ObjectTypeAndSize info) throws IOException

Implements abstract org.eclipse.jgit.transport.PackParser.seekDatabase.

Doc from org.eclipse.jgit.transport.PackParser.seekDatabase.

Reposition the database to re-read a previously stored object.

If the database is computing CRC-32 checksums for object data, it should reset its internal CRC instance during this method call.

Parameters
delta:PackParser.UnresolvedDelta

the object position to begin reading from. This is an instance previously returned by onEndDelta().

info:PackParser.ObjectTypeAndSize

object to populate with type and size.

Returns:PackParser.ObjectTypeAndSize

the info object.

Annotations
@Override
Exceptions
IOException:
the database cannot reposition to this location.
verifyIndexback to summary
public void verifyIndex(PackIndex idx) throws CorruptPackIndexException

Verify the existing index file with all objects from the pack.

Parameters
idx:PackIndex

index file associate with the pack

Exceptions
CorruptPackIndexException:
when the index file is corrupt.
verifySafeObjectback to summary
protected void verifySafeObject(final AnyObjectId id, final int type, final byte[] data)

Overrides org.eclipse.jgit.transport.PackParser.verifySafeObject.

Doc from org.eclipse.jgit.transport.PackParser.verifySafeObject.

Verify the integrity of the object.

Parameters
id:AnyObjectId

identity of the object to be checked.

type:int

the type of the object.

data:byte[]

raw content of the object.

Annotations
@Override
org.eclipse.jgit.internal.fsck back to summary

pack-priv Class FsckPackParser.ObjFromPack

extends Entry
Class Inheritance

Constructor Summary

AccessConstructor and Description
pack-priv

Constructor Detail

ObjFromPackback to summary
pack-priv ObjFromPack(AnyObjectId id)