Class PackInserter

java.lang.Object
org.eclipse.jgit.lib.ObjectInserter
org.eclipse.jgit.internal.storage.file.PackInserter
All Implemented Interfaces:
AutoCloseable

public class PackInserter extends ObjectInserter
Object inserter that inserts one pack per call to flush(), and never inserts loose objects.
  • Field Details

  • Constructor Details

  • Method Details

    • checkExisting

      public void checkExisting(boolean check)
      Whether to check if objects exist in the repo
      Parameters:
      check - if false, will write out possibly-duplicate objects without first checking whether they exist in the repo; default is true.
    • setCompressionLevel

      public void setCompressionLevel(int compression)
      Set compression level for zlib deflater.
      Parameters:
      compression - compression level for zlib deflater.
    • getBufferSize

      int getBufferSize()
    • insert

      public ObjectId insert(int type, byte[] data, int off, int len) throws IOException
      Insert a single object into the store, returning its unique name.
      Overrides:
      insert in class ObjectInserter
      Parameters:
      type - type code of the object to store.
      data - complete content of the object.
      off - first position within data.
      len - number of bytes to copy from data.
      Returns:
      the name of the object.
      Throws:
      IOException - the object could not be stored.
    • insert

      public ObjectId insert(int type, long len, InputStream in) throws IOException
      Insert a single object into the store, returning its unique name.
      Specified by:
      insert in class ObjectInserter
      Parameters:
      type - type code of the object to store.
      len - number of bytes to copy from in.
      in - stream providing the object content. The caller is responsible for closing the stream.
      Returns:
      the name of the object.
      Throws:
      IOException - the object could not be stored, or the source stream could not be read.
    • beginObject

      private long beginObject(int type, long len) throws IOException
      Throws:
      IOException
    • endObject

      private ObjectId endObject(ObjectId id, long offset)
    • idxFor

      private static File idxFor(File packFile)
    • beginPack

      private void beginPack() throws IOException
      Throws:
      IOException
    • writePackHeader

      private static int writePackHeader(byte[] buf, int objectCount)
    • newPackParser

      public PackParser newPackParser(InputStream in)
      Initialize a parser to read from a pack formatted stream.
      Specified by:
      newPackParser in class ObjectInserter
      Parameters:
      in - the input stream. The stream is not closed by the parser, and must instead be closed by the caller once parsing is complete.
      Returns:
      the pack parser.
    • newReader

      public ObjectReader newReader()
      Open a reader for objects that may have been written by this inserter.

      The returned reader allows the calling thread to read back recently inserted objects without first calling flush() to make them visible to the repository. The returned reader should only be used from the same thread as the inserter. Objects written by this inserter may not be visible to this.newReader().newReader().

      The returned reader should return this inserter instance from ObjectReader.getCreatedFromInserter().

      Behavior is undefined if an insert method is called on the inserter in the middle of reading from an ObjectStream opened from this reader. For example, reading the remainder of the object may fail, or newly written data may even be corrupted. Interleaving whole object reads (including streaming reads) with inserts is fine, just not interleaving streaming partial object reads with inserts.

      Specified by:
      newReader in class ObjectInserter
      Returns:
      reader for any object, including an object recently inserted by this inserter since the last flush.
    • flush

      public void flush() throws IOException
      Make all inserted objects visible.

      The flush may take some period of time to make the objects available to other threads.

      Specified by:
      flush in class ObjectInserter
      Throws:
      IOException - the flush could not be completed; objects inserted thus far are in an indeterminate state.
    • writePackIndex

      private static void writePackIndex(File idx, byte[] packHash, List<PackedObjectInfo> list) throws IOException
      Throws:
      IOException
    • computeName

      private ObjectId computeName(List<PackedObjectInfo> list)
    • close

      public void close()

      Release any resources used by this inserter.

      An inserter that has been released can be used again, but may need to be released after the subsequent usage.

      Specified by:
      close in interface AutoCloseable
      Specified by:
      close in class ObjectInserter
    • clear

      private void clear()
    • inflater

      private Inflater inflater()