Class DfsPackCompactor

java.lang.Object
org.eclipse.jgit.internal.storage.dfs.DfsPackCompactor

public class DfsPackCompactor extends Object
Combine several pack files into one pack.

The compactor combines several pack files together by including all objects contained in each pack file into the same output pack. If an object appears multiple times, it is only included once in the result. Because the new pack is constructed by enumerating the indexes of the source packs, it is quicker than doing a full repack of the repository, however the result is not nearly as space efficient as new delta compression is disabled.

This method is suitable for quickly combining several packs together after receiving a number of small fetch or push operations into a repository, allowing the system to maintain reasonable read performance without expending a lot of time repacking the entire repository.

  • Constructor Details

    • DfsPackCompactor

      public DfsPackCompactor(DfsRepository repository)
      Initialize a pack compactor.
      Parameters:
      repository - repository objects to be packed will be read from.
  • Method Details

    • setPreCommitHook

      public DfsPackCompactor setPreCommitHook(DfsPackCompactor.PreCommitHook hook)
      Set the pre-commit hook.
      Parameters:
      hook - pre-commit hook.
      Returns:
      this
    • setReftableConfig

      public DfsPackCompactor setReftableConfig(ReftableConfig cfg)
      Set configuration to write a reftable.
      Parameters:
      cfg - configuration to write a reftable. Reftable compacting is disabled (default) when cfg is null.
      Returns:
      this
    • add

      public DfsPackCompactor add(DfsPackFile pack)
      Add a pack to be compacted.

      All of the objects in this pack will be copied into the resulting pack. The resulting pack will order objects according to the source pack's own description ordering (which is based on creation date), and then by the order the objects appear in the source pack.

      Parameters:
      pack - a pack to combine into the resulting pack.
      Returns:
      this
    • add

      public DfsPackCompactor add(DfsReftable table)
      Add a reftable to be compacted.
      Parameters:
      table - a reftable to combine.
      Returns:
      this
    • exclude

      public DfsPackCompactor exclude(ObjectIdSet set)
      Exclude objects from the compacted pack.
      Parameters:
      set - objects to not include.
      Returns:
      this.
    • exclude

      public DfsPackCompactor exclude(DfsPackFile pack) throws IOException
      Exclude objects from the compacted pack.
      Parameters:
      pack - objects to not include.
      Returns:
      this.
      Throws:
      IOException - pack index cannot be loaded.
    • prune

      public DfsPackCompactor prune(DfsPackFile pack)
      Delete also this pack when writing to the db the compacted packs
      Parameters:
      pack - a pack to delete
      Returns:
      this
    • compact

      public void compact(ProgressMonitor pm) throws IOException
      Compact the pack files together.
      Parameters:
      pm - progress monitor to receive updates on as packing may take a while, depending on the size of the repository.
      Throws:
      IOException - the packs cannot be compacted.
    • getSourcePacks

      public Collection<DfsPackDescription> getSourcePacks()
      Get all of the source packs that fed into this compaction.
      Returns:
      all of the source packs that fed into this compaction.
    • getNewPacks

      public List<DfsPackDescription> getNewPacks()
      Get new packs created by this compaction.
      Returns:
      new packs created by this compaction.
    • getNewPackStatistics

      public List<PackStatistics> getNewPackStatistics()
      Get statistics corresponding to the getNewPacks(). May be null if statistics are not available.
      Returns:
      statistics corresponding to the getNewPacks().