|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.eclipse.jgit.lib.ObjectReader org.eclipse.jgit.storage.dfs.DfsReader
public final class DfsReader
Reader to access repository content through.
See the base ObjectReader
documentation for details. Notably, a
reader is not thread safe.
Field Summary |
---|
Fields inherited from class org.eclipse.jgit.lib.ObjectReader |
---|
OBJ_ANY |
Method Summary | ||
---|---|---|
void |
copyObjectAsIs(PackOutputStream out,
ObjectToPack otp,
boolean validate)
Output a previously selected representation. |
|
void |
copyPackAsIs(PackOutputStream out,
CachedPack pack,
boolean validate)
Append an entire pack's contents onto the output stream. |
|
Collection<CachedPack> |
getCachedPacks()
Obtain the available cached packs. |
|
long |
getObjectSize(AnyObjectId objectId,
int typeHint)
Get only the size of an object. |
|
|
getObjectSize(Iterable<T> objectIds,
boolean reportMissing)
Asynchronous object size lookup. |
|
boolean |
has(AnyObjectId objectId)
Does the requested object exist in this database? |
|
org.eclipse.jgit.storage.dfs.DfsObjectToPack |
newObjectToPack(RevObject obj)
Allocate a new PackWriter state structure for an object. |
|
ObjectReader |
newReader()
Construct a new reader from the same data. |
|
ObjectLoader |
open(AnyObjectId objectId,
int typeHint)
Open an object from this database. |
|
|
open(Iterable<T> objectIds,
boolean reportMissing)
Asynchronous object opening. |
|
void |
release()
Release the current window cursor. |
|
Collection<ObjectId> |
resolve(AbbreviatedObjectId id)
Resolve an abbreviated ObjectId to its full form. |
|
void |
selectObjectRepresentation(PackWriter packer,
ProgressMonitor monitor,
Iterable<ObjectToPack> objects)
Select the best object representation for a packer. |
|
void |
walkAdviceBeginCommits(RevWalk walk,
Collection<RevCommit> roots)
Advice from a RevWalk that a walk is starting from these roots. |
|
void |
walkAdviceBeginTrees(ObjectWalk ow,
RevCommit min,
RevCommit max)
Advice from an ObjectWalk that trees will be traversed. |
|
void |
walkAdviceEnd()
Advice from that a walk is over. |
|
void |
writeObjects(PackOutputStream out,
List<ObjectToPack> list)
Write objects to the pack stream in roughly the order given. |
Methods inherited from class org.eclipse.jgit.lib.ObjectReader |
---|
abbreviate, abbreviate, has, open |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Method Detail |
---|
public ObjectReader newReader()
ObjectReader
Applications can use this method to build a new reader from the same data source, but for an different thread.
newReader
in class ObjectReader
public Collection<ObjectId> resolve(AbbreviatedObjectId id) throws IOException
ObjectReader
resolve
in class ObjectReader
id
- abbreviated id to resolve to a complete identity. The
abbreviation must have a length of at least 2.
IOException
- the object store cannot be read.public boolean has(AnyObjectId objectId) throws IOException
ObjectReader
has
in class ObjectReader
objectId
- identity of the object to test for existence of.
IOException
- the object store cannot be accessed.public ObjectLoader open(AnyObjectId objectId, int typeHint) throws MissingObjectException, IncorrectObjectTypeException, IOException
ObjectReader
open
in class ObjectReader
objectId
- identity of the object to open.typeHint
- hint about the type of object being requested;
ObjectReader.OBJ_ANY
if the object type is not known, or does not
matter to the caller.
ObjectLoader
for accessing the object.
MissingObjectException
- the object does not exist.
IncorrectObjectTypeException
- typeHint was not OBJ_ANY, and the object's actual type does
not match typeHint.
IOException
- the object store cannot be accessed.public <T extends ObjectId> AsyncObjectLoaderQueue<T> open(Iterable<T> objectIds, boolean reportMissing)
ObjectReader
open
in class ObjectReader
T
- type of identifier being supplied.objectIds
- objects to open from the object store. The supplied collection
must not be modified until the queue has finished.reportMissing
- if true missing objects are reported by calling failure with a
MissingObjectException. This may be more expensive for the
implementation to guarantee. If false the implementation may
choose to report MissingObjectException, or silently skip over
the object with no warning.
public <T extends ObjectId> AsyncObjectSizeQueue<T> getObjectSize(Iterable<T> objectIds, boolean reportMissing)
ObjectReader
getObjectSize
in class ObjectReader
T
- type of identifier being supplied.objectIds
- objects to get the size of from the object store. The supplied
collection must not be modified until the queue has finished.reportMissing
- if true missing objects are reported by calling failure with a
MissingObjectException. This may be more expensive for the
implementation to guarantee. If false the implementation may
choose to report MissingObjectException, or silently skip over
the object with no warning.
public void walkAdviceBeginCommits(RevWalk walk, Collection<RevCommit> roots)
ObjectReader
RevWalk
that a walk is starting from these roots.
walkAdviceBeginCommits
in class ObjectReader
walk
- the revision pool that is using this reader.roots
- starting points of the revision walk. The starting points have
their headers parsed, but might be missing bodies.public void walkAdviceBeginTrees(ObjectWalk ow, RevCommit min, RevCommit max)
ObjectReader
ObjectWalk
that trees will be traversed.
walkAdviceBeginTrees
in class ObjectReader
ow
- the object pool that is using this reader.min
- the first commit whose root tree will be read.max
- the last commit whose root tree will be read.public void walkAdviceEnd()
ObjectReader
walkAdviceEnd
in class ObjectReader
public long getObjectSize(AnyObjectId objectId, int typeHint) throws MissingObjectException, IncorrectObjectTypeException, IOException
ObjectReader
The default implementation of this method opens an ObjectLoader. Databases are encouraged to override this if a faster access method is available to them.
getObjectSize
in class ObjectReader
objectId
- identity of the object to open.typeHint
- hint about the type of object being requested;
ObjectReader.OBJ_ANY
if the object type is not known, or does not
matter to the caller.
MissingObjectException
- the object does not exist.
IncorrectObjectTypeException
- typeHint was not OBJ_ANY, and the object's actual type does
not match typeHint.
IOException
- the object store cannot be accessed.public org.eclipse.jgit.storage.dfs.DfsObjectToPack newObjectToPack(RevObject obj)
ObjectReuseAsIs
PackWriter
state structure for an object.
PackWriter
allocates these objects to keep track of the
per-object state, and how to load the objects efficiently into the
generated stream. Implementers may subclass this type with additional
object state, such as to remember what file and offset contains the
object's pack encoded data.
newObjectToPack
in interface ObjectReuseAsIs
obj
- identity of the object that will be packed. The object's
parsed status is undefined here. Implementers must not rely on
the object being parsed.
public void selectObjectRepresentation(PackWriter packer, ProgressMonitor monitor, Iterable<ObjectToPack> objects) throws IOException, MissingObjectException
ObjectReuseAsIs
Implementations should iterate through all available representations of
an object, and pass them in turn to the PackWriter though
PackWriter.select(ObjectToPack, StoredObjectRepresentation)
so
the writer can select the most suitable representation to reuse into the
output stream.
If the implementation returns CachedPack from ObjectReuseAsIs.getCachedPacks()
,
it must consider the representation of any object that is stored in any
of the offered CachedPacks. PackWriter relies on this behavior to prune
duplicate objects out of the pack stream when it selects a CachedPack and
the object was also reached through the thin-pack enumeration.
The implementation may choose to consider multiple objects at once on concurrent threads, but must evaluate all representations of an object within the same thread.
selectObjectRepresentation
in interface ObjectReuseAsIs
packer
- the packer that will write the object in the near future.monitor
- progress monitor, implementation should update the monitor
once for each item in the iteration when selection is done.objects
- the objects that are being packed.
MissingObjectException
- there is no representation available for the object, as it is
no longer in the repository. Packing will abort.
IOException
- the repository cannot be accessed. Packing will abort.public void copyObjectAsIs(PackOutputStream out, ObjectToPack otp, boolean validate) throws IOException, StoredObjectRepresentationNotAvailableException
ObjectReuseAsIs
PackWriter
invokes this method only if a representation
previously given to it by selectObjectRepresentation
was chosen
for reuse into the output stream. The otp
argument is an instance
created by this reader's own newObjectToPack
, and the
representation data saved within it also originated from this reader.
Implementors must write the object header before copying the raw data to the output stream. The typical implementation is like:
MyToPack mtp = (MyToPack) otp; byte[] raw; if (validate) raw = validate(mtp); // throw SORNAE here, if at all else raw = readFast(mtp); out.writeHeader(mtp, mtp.inflatedSize); out.write(raw);
copyObjectAsIs
in interface ObjectReuseAsIs
out
- stream the object should be written to.otp
- the object's saved representation information.validate
- if true the representation must be validated and not be
corrupt before being reused. If false, validation may be
skipped as it will be performed elsewhere in the processing
pipeline.
IOException
- the stream's write method threw an exception. Packing will
abort.
StoredObjectRepresentationNotAvailableException
- the previously selected representation is no longer
available. If thrown before out.writeHeader
the pack
writer will try to find another representation, and write
that one instead. If throw after out.writeHeader
,
packing will abort.public void writeObjects(PackOutputStream out, List<ObjectToPack> list) throws IOException
ObjectReuseAsIs
PackWriter
invokes this method to write out one or more objects,
in approximately the order specified by the iteration over the list. A
simple implementation of this method would just iterate the list and
output each object:
for (ObjectToPack obj : list) out.writeObject(obj)However more sophisticated implementors may try to perform some (small) reordering to access objects that are stored close to each other at roughly the same time. Implementations may choose to write objects out of order, but this may increase pack file size due to using a larger header format to reach a delta base that is later in the stream. It may also reduce data locality for the reader, slowing down data access. Invoking
PackOutputStream.writeObject(ObjectToPack)
will cause
ObjectReuseAsIs.copyObjectAsIs(PackOutputStream, ObjectToPack, boolean)
to be
invoked recursively on this
if the current object is scheduled
for reuse.
writeObjects
in interface ObjectReuseAsIs
out
- the stream to write each object to.list
- the list of objects to write. Objects should be written in
approximately this order. Implementors may resort the list
elements in-place during writing if desired.
IOException
- the stream cannot be written to, or one or more required
objects cannot be accessed from the object database.public Collection<CachedPack> getCachedPacks() throws IOException
ObjectReuseAsIs
A cached pack has known starting points and may be sent entirely as-is, with almost no effort on the sender's part.
getCachedPacks
in interface ObjectReuseAsIs
IOException
- the cached packs cannot be listed from the repository.
Callers may choose to ignore this and continue as-if there
were no cached packs.public void copyPackAsIs(PackOutputStream out, CachedPack pack, boolean validate) throws IOException
ObjectReuseAsIs
The entire pack, excluding its header and trailing footer is sent.
copyPackAsIs
in interface ObjectReuseAsIs
out
- stream to append the pack onto.pack
- the cached pack to send.validate
- if true the representation must be validated and not be
corrupt before being reused. If false, validation may be
skipped as it will be performed elsewhere in the processing
pipeline.
IOException
- the pack cannot be read, or stream did not accept a write.public void release()
release
in class ObjectReader
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |