Class PackIndex

    • Field Detail

      • packChecksum

        protected byte[] packChecksum
        Footer checksum applied on the bottom of the pack file.
    • Constructor Detail

      • PackIndex

        public PackIndex()
    • Method Detail

      • open

        public static PackIndex open​(File idxFile)
                              throws IOException
        Open an existing pack .idx file for reading.

        The format of the file will be automatically detected and a proper access implementation for that format will be constructed and returned to the caller. The file may or may not be held open by the returned instance.

        Parameters:
        idxFile - existing pack .idx to read.
        Returns:
        access implementation for the requested file.
        Throws:
        FileNotFoundException - the file does not exist.
        IOException - the file exists but could not be read due to security errors, unrecognized data version, or unexpected data corruption.
      • read

        public static PackIndex read​(InputStream fd)
                              throws IOException,
                                     CorruptObjectException
        Read an existing pack index file from a buffered stream.

        The format of the file will be automatically detected and a proper access implementation for that format will be constructed and returned to the caller. The file may or may not be held open by the returned instance.

        Parameters:
        fd - stream to read the index file from. The stream must be buffered as some small IOs are performed against the stream. The caller is responsible for closing the stream.
        Returns:
        a copy of the index in-memory.
        Throws:
        IOException - the stream cannot be read.
        CorruptObjectException - the stream does not contain a valid pack index.
      • hasObject

        public boolean hasObject​(AnyObjectId id)
        Determine if an object is contained within the pack file.
        Parameters:
        id - the object to look for. Must not be null.
        Returns:
        true if the object is listed in this index; false otherwise.
      • contains

        public boolean contains​(AnyObjectId id)
        Returns true if the objectId is contained within the collection.
        Specified by:
        contains in interface ObjectIdSet
        Parameters:
        id - the objectId to find
        Returns:
        whether the collection contains the objectId.
      • iterator

        public abstract Iterator<PackIndex.MutableEntry> iterator()

        Provide iterator that gives access to index entries. Note, that iterator returns reference to mutable object, the same reference in each call - for performance reason. If client needs immutable objects, it must copy returned object on its own.

        Iterator returns objects in SHA-1 lexicographical order.

        Specified by:
        iterator in interface Iterable<PackIndex.MutableEntry>
      • getObjectCount

        public abstract long getObjectCount()
        Obtain the total number of objects described by this index.
        Returns:
        number of objects in this index, and likewise in the associated pack that this index was generated from.
      • getOffset64Count

        public abstract long getOffset64Count()
        Obtain the total number of objects needing 64 bit offsets.
        Returns:
        number of objects in this index using a 64 bit offset; that is an object positioned after the 2 GB position within the file.
      • getObjectId

        public abstract ObjectId getObjectId​(long nthPosition)
        Get ObjectId for the n-th object entry returned by iterator().

        This method is a constant-time replacement for the following loop:

         Iterator<MutableEntry> eItr = index.iterator();
         int curPosition = 0;
         while (eItr.hasNext() && curPosition++ < nthPosition)
                eItr.next();
         ObjectId result = eItr.next().toObjectId();
         
        Parameters:
        nthPosition - position within the traversal of iterator() that the caller needs the object for. The first returned PackIndex.MutableEntry is 0, the second is 1, etc.
        Returns:
        the ObjectId for the corresponding entry.
      • getObjectId

        public final ObjectId getObjectId​(int nthPosition)
        Get ObjectId for the n-th object entry returned by iterator().

        This method is a constant-time replacement for the following loop:

         Iterator<MutableEntry> eItr = index.iterator();
         int curPosition = 0;
         while (eItr.hasNext() && curPosition++ < nthPosition)
                eItr.next();
         ObjectId result = eItr.next().toObjectId();
         
        Parameters:
        nthPosition - unsigned 32 bit position within the traversal of iterator() that the caller needs the object for. The first returned PackIndex.MutableEntry is 0, the second is 1, etc. Positions past 2**31-1 are negative, but still valid.
        Returns:
        the ObjectId for the corresponding entry.
      • findOffset

        public abstract long findOffset​(AnyObjectId objId)
        Locate the file offset position for the requested object.
        Parameters:
        objId - name of the object to locate within the pack.
        Returns:
        offset of the object's header and compressed content; -1 if the object does not exist in this index and is thus not stored in the associated pack.
      • hasCRC32Support

        public abstract boolean hasCRC32Support()
        Check whether this index supports (has) CRC32 checksums for objects.
        Returns:
        true if CRC32 is stored, false otherwise
      • resolve

        public abstract void resolve​(Set<ObjectId> matches,
                                     AbbreviatedObjectId id,
                                     int matchLimit)
                              throws IOException
        Find objects matching the prefix abbreviation.
        Parameters:
        matches - set to add any located ObjectIds to. This is an output parameter.
        id - prefix to search for.
        matchLimit - maximum number of results to return. At most this many ObjectIds should be added to matches before returning.
        Throws:
        IOException - the index cannot be read.
      • getChecksum

        public byte[] getChecksum()
        Returns:
        the checksum of the pack; caller must not modify it
        Since:
        5.5