Struct gix_pack::data::File

source ·
pub struct File {
    pub id: Id,
    /* private fields */
}
Expand description

A pack data file

Fields§

§id: Id

A value to represent this pack uniquely when used with cache lookup, or a way to identify this pack by its location on disk. The same location on disk should yield the same id.

These must be unique per pack and must be stable, that is they don’t change if the pack doesn’t change. If the same id is assigned (or reassigned) to different packs, pack creation or cache access will fail in hard-to-debug ways.

This value is controlled by the owning object store, which can use it in whichever way it wants as long as the above constraints are met.

Implementations§

source§

impl File

Instantiation

source

pub fn at(path: impl AsRef<Path>, object_hash: Kind) -> Result<File, Error>

Try opening a data file at the given path.

The object_hash is a way to read (and write) the same file format with different hashes, as the hash kind isn’t stored within the file format itself.

source§

impl File

Checksums and verify checksums

source

pub fn checksum(&self) -> ObjectId

The checksum in the trailer of this pack data file

source

pub fn verify_checksum( &self, progress: &mut dyn Progress, should_interrupt: &AtomicBool ) -> Result<ObjectId, Error>

Verifies that the checksum of the packfile over all bytes preceding it indeed matches the actual checksum, returning the actual checksum equivalent to the return value of checksum() if there is no mismatch.

Note that if no progress is desired, one can pass [gix_features::progress::Discard].

Have a look at index::File::verify_integrity(…) for an even more thorough integrity check.

source§

impl File

Decompression of objects

source

pub fn decompress_entry( &self, entry: &Entry, inflate: &mut Inflate, out: &mut [u8] ) -> Result<usize, Error>

Decompress the given entry into out and return the amount of bytes read from the pack data. Note that inflate is not reset after usage, but will be reset before using it.

Note that this method does not resolve deltified objects, but merely decompresses their content out is expected to be large enough to hold entry.size bytes.

Panics

If out isn’t large enough to hold the decompressed entry

source

pub fn entry(&self, offset: Offset) -> Entry

Obtain the Entry at the given offset into the pack.

The offset is typically obtained from the pack index file.

source

pub fn decode_entry( &self, entry: Entry, out: &mut Vec<u8>, inflate: &mut Inflate, resolve: &dyn Fn(&oid, &mut Vec<u8>) -> Option<ResolvedBase>, delta_cache: &mut dyn DecodeEntry ) -> Result<Outcome, Error>

Decode an entry, resolving delta’s as needed, while growing the out vector if there is not enough space to hold the result object.

The entry determines which object to decode, and is commonly obtained with the help of a pack index file or through pack iteration. inflate will be used for decompressing entries, and will not be reset after usage, but before first using it.

resolve is a function to lookup objects with the given ObjectId, in case the full object id is used to refer to a base object, instead of an in-pack offset.

delta_cache is a mechanism to avoid looking up base objects multiple times when decompressing multiple objects in a row. Use a Noop-Cache to disable caching all together at the cost of repeating work.

source§

impl File

Obtain object information quickly.

source

pub fn decode_header( &self, entry: Entry, inflate: &mut Inflate, resolve: &dyn Fn(&oid) -> Option<ResolvedBase> ) -> Result<Outcome, Error>

Resolve the object header information starting at entry, following the chain of entries as needed.

The entry determines which object to decode, and is commonly obtained with the help of a pack index file or through pack iteration. inflate will be used for (partially) decompressing entries, and will be reset before first use, but not after the last use.

resolve is a function to lookup objects with the given ObjectId, in case the full object id is used to refer to a base object, instead of an in-pack offset.

source§

impl File

source

pub fn streaming_iter(&self) -> Result<BytesToEntriesIter<impl BufRead>, Error>

Available on crate feature streaming-input only.

Returns an iterator over Entries, without making use of the memory mapping.

source§

impl File

Information about the pack data file itself

source

pub fn version(&self) -> Version

The pack data version of this file

source

pub fn num_objects(&self) -> u32

The number of objects stored in this pack data file

source

pub fn data_len(&self) -> usize

The length of all mapped data, including the pack header and the pack trailer

source

pub fn object_hash(&self) -> Kind

The kind of hash we use internally.

source

pub fn pack_end(&self) -> usize

The position of the byte one past the last pack entry, or in other terms, the first byte of the trailing hash.

source

pub fn path(&self) -> &Path

The path to the pack data file on disk

source

pub fn entry_slice(&self, slice: EntryRange) -> Option<&[u8]>

Returns the pack data at the given slice if its range is contained in the mapped pack data

source

pub fn entry_crc32(&self, pack_offset: Offset, size: usize) -> u32

Returns the CRC32 of the pack data indicated by pack_offset and the size of the mapped data.

Note: finding the right size is only possible by decompressing the pack entry beforehand, or by using the (to be sorted) offsets stored in an index file.

Panics

If pack_offset or size are pointing to a range outside of the mapped pack data.

Auto Trait Implementations§

§

impl RefUnwindSafe for File

§

impl Send for File

§

impl Sync for File

§

impl Unpin for File

§

impl UnwindSafe for File

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.