Class DirCacheIterator
- java.lang.Object
-
- org.eclipse.jgit.treewalk.AbstractTreeIterator
-
- org.eclipse.jgit.dircache.DirCacheIterator
-
- Direct Known Subclasses:
DirCacheBuildIterator
public class DirCacheIterator extends AbstractTreeIterator
Iterate aDirCacheas part of aTreeWalk.This is an iterator to adapt a loaded
DirCacheinstance (such as read from an existing.git/indexfile) to the tree structure used by aTreeWalk, making it possible for applications to walk over any combination of tree objects already in the object database, index files, or working directories.- See Also:
TreeWalk
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classDirCacheIterator.LazyLoadingAttributesNodeAttributesNodeimplementation that provides lazy loading facilities.
-
Field Summary
Fields Modifier and Type Field Description protected DirCachecacheThe cache this iterator was created to walk.protected DirCacheEntrycurrentEntryThe current file entry fromcache.protected DirCacheTreecurrentSubtreeThe subtree containingcurrentEntryif this is first entry.private static byte[]DOT_GIT_ATTRIBUTES_BYTESByte array holding ".gitattributes" stringprivate intnextSubtreePosNext subtree to consider withintree.protected intptrIndex of entry withincache.private byte[]subtreeIdSpecial buffer to hold the ObjectId ofcurrentSubtree.private DirCacheTreetreeThe tree this iterator is walking.private inttreeEndLast position in this tree.private inttreeStartFirst position in this tree.-
Fields inherited from class org.eclipse.jgit.treewalk.AbstractTreeIterator
attributesNode, DEFAULT_PATH_SIZE, mode, parent, path, pathLen, pathOffset, zeroid
-
-
Constructor Summary
Constructors Constructor Description DirCacheIterator(DirCache dc)Create a new iterator for an already loaded DirCache instance.DirCacheIterator(DirCacheIterator p, DirCacheTree dct)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidback(int delta)Move to prior entry, populating this iterator with the entry data.EmptyTreeIteratorcreateEmptyTreeIterator()Create a new iterator as though the current entry were a subtree.AbstractTreeIteratorcreateSubtreeIterator(ObjectReader reader)Create a new iterator for the current entry's subtree.booleaneof()Is this tree iterator at its EOF point (no more entries)?booleanfirst()Is this tree iterator positioned on its first entry?DirCacheEntrygetDirCacheEntry()Get the DirCacheEntry for the current file.AttributesNodegetEntryAttributesNode(ObjectReader reader)Retrieves theAttributesNodefor the current entry.booleanhasId()Whether the entry has a valid ObjectId.byte[]idBuffer()Get the byte array buffer object IDs must be copied out of.intidOffset()Get the position withinAbstractTreeIterator.idBuffer()of this entry's ObjectId.voidnext(int delta)Move to next entry, populating this iterator with the entry data.private voidparseEntry()private voidparseEntry(boolean forward)voidreset()Position this iterator on the first entry.-
Methods inherited from class org.eclipse.jgit.treewalk.AbstractTreeIterator
createSubtreeIterator, ensurePathCapacity, findFile, findFile, getEntryFileMode, getEntryObjectId, getEntryObjectId, getEntryPathBuffer, getEntryPathHashCode, getEntryPathLength, getEntryPathString, getEntryRawMode, getName, getNameLength, getNameOffset, growPath, idEqual, isWorkTree, needsStopWalk, pathCompare, pathCompare, skip, stopWalk, toString
-
-
-
-
Field Detail
-
DOT_GIT_ATTRIBUTES_BYTES
private static final byte[] DOT_GIT_ATTRIBUTES_BYTES
Byte array holding ".gitattributes" string
-
cache
protected final DirCache cache
The cache this iterator was created to walk.
-
tree
private final DirCacheTree tree
The tree this iterator is walking.
-
treeStart
private final int treeStart
First position in this tree.
-
treeEnd
private final int treeEnd
Last position in this tree.
-
subtreeId
private final byte[] subtreeId
Special buffer to hold the ObjectId ofcurrentSubtree.
-
ptr
protected int ptr
Index of entry withincache.
-
nextSubtreePos
private int nextSubtreePos
Next subtree to consider withintree.
-
currentEntry
protected DirCacheEntry currentEntry
The current file entry fromcache.
-
currentSubtree
protected DirCacheTree currentSubtree
The subtree containingcurrentEntryif this is first entry.
-
-
Constructor Detail
-
DirCacheIterator
public DirCacheIterator(DirCache dc)
Create a new iterator for an already loaded DirCache instance.The iterator implementation may copy part of the cache's data during construction, so the cache must be read in prior to creating the iterator.
- Parameters:
dc- the cache to walk. It must be already loaded into memory.
-
DirCacheIterator
DirCacheIterator(DirCacheIterator p, DirCacheTree dct)
-
-
Method Detail
-
createSubtreeIterator
public AbstractTreeIterator createSubtreeIterator(ObjectReader reader) throws IncorrectObjectTypeException, java.io.IOException
Create a new iterator for the current entry's subtree.The parent reference of the iterator must be
this, otherwise the caller would not be able to exit out of the subtree iterator correctly and return to continue walkingthis.- Specified by:
createSubtreeIteratorin classAbstractTreeIterator- Parameters:
reader- reader to load the tree data from.- Returns:
- a new parser that walks over the current subtree.
- Throws:
IncorrectObjectTypeException- the current entry is not actually a tree and cannot be parsed as though it were a tree.java.io.IOException- a loose object or pack file could not be read.
-
createEmptyTreeIterator
public EmptyTreeIterator createEmptyTreeIterator()
Create a new iterator as though the current entry were a subtree.- Overrides:
createEmptyTreeIteratorin classAbstractTreeIterator- Returns:
- a new empty tree iterator.
-
hasId
public boolean hasId()
Whether the entry has a valid ObjectId.- Specified by:
hasIdin classAbstractTreeIterator- Returns:
trueif the entry has a valid ObjectId.
-
idBuffer
public byte[] idBuffer()
Get the byte array buffer object IDs must be copied out of.The id buffer contains the bytes necessary to construct an ObjectId for the current entry of this iterator. The buffer can be the same buffer for all entries, or it can be a unique buffer per-entry. Implementations are encouraged to expose their private buffer whenever possible to reduce garbage generation and copying costs.
- Specified by:
idBufferin classAbstractTreeIterator- Returns:
- byte array the implementation stores object IDs within.
- See Also:
AbstractTreeIterator.getEntryObjectId()
-
idOffset
public int idOffset()
Get the position withinAbstractTreeIterator.idBuffer()of this entry's ObjectId.- Specified by:
idOffsetin classAbstractTreeIterator- Returns:
- offset into the array returned by
AbstractTreeIterator.idBuffer()where the ObjectId must be copied out of.
-
reset
public void reset()
Position this iterator on the first entry. The default implementation of this method usesback(1)untilfirst()is true. This is most likely not the most efficient method of repositioning the iterator to its first entry, so subclasses are strongly encouraged to override the method.- Overrides:
resetin classAbstractTreeIterator
-
first
public boolean first()
Is this tree iterator positioned on its first entry?An iterator is positioned on the first entry if
back(1)would be an invalid request as there is no entry before the current one.An empty iterator (one with no entries) will be
first() && eof().- Specified by:
firstin classAbstractTreeIterator- Returns:
- true if the iterator is positioned on the first entry.
-
eof
public boolean eof()
Is this tree iterator at its EOF point (no more entries)?An iterator is at EOF if there is no current entry.
- Specified by:
eofin classAbstractTreeIterator- Returns:
- true if we have walked all entries and have none left.
-
next
public void next(int delta)
Move to next entry, populating this iterator with the entry data.The delta indicates how many moves forward should occur. The most common delta is 1 to move to the next entry.
Implementations must populate the following members:
AbstractTreeIterator.modeAbstractTreeIterator.path(fromAbstractTreeIterator.pathOffsettoAbstractTreeIterator.pathLen)AbstractTreeIterator.pathLen
AbstractTreeIterator.idBuffer()andAbstractTreeIterator.idOffset()when demanded.- Specified by:
nextin classAbstractTreeIterator- Parameters:
delta- number of entries to move the iterator by. Must be a positive, non-zero integer.
-
back
public void back(int delta)
Move to prior entry, populating this iterator with the entry data.The delta indicates how many moves backward should occur.The most common delta is 1 to move to the prior entry.
Implementations must populate the following members:
AbstractTreeIterator.modeAbstractTreeIterator.path(fromAbstractTreeIterator.pathOffsettoAbstractTreeIterator.pathLen)AbstractTreeIterator.pathLen
AbstractTreeIterator.idBuffer()andAbstractTreeIterator.idOffset()when demanded.- Specified by:
backin classAbstractTreeIterator- Parameters:
delta- number of entries to move the iterator by. Must be a positive, non-zero integer.
-
parseEntry
private void parseEntry()
-
parseEntry
private void parseEntry(boolean forward)
-
getDirCacheEntry
public DirCacheEntry getDirCacheEntry()
Get the DirCacheEntry for the current file.- Returns:
- the current cache entry, if this iterator is positioned on a non-tree.
-
getEntryAttributesNode
public AttributesNode getEntryAttributesNode(ObjectReader reader) throws java.io.IOException
Retrieves theAttributesNodefor the current entry.- Parameters:
reader-ObjectReaderused to parse the .gitattributes entry.- Returns:
AttributesNodefor the current entry.- Throws:
java.io.IOException- Since:
- 3.7
-
-