diff options
Diffstat (limited to 'vendor/gix-pack/src/index/util.rs')
-rw-r--r-- | vendor/gix-pack/src/index/util.rs | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/vendor/gix-pack/src/index/util.rs b/vendor/gix-pack/src/index/util.rs new file mode 100644 index 000000000..284ee6158 --- /dev/null +++ b/vendor/gix-pack/src/index/util.rs @@ -0,0 +1,47 @@ +use std::{io, time::Instant}; + +use gix_features::progress::{self, Progress}; + +pub(crate) fn index_entries_sorted_by_offset_ascending( + idx: &crate::index::File, + mut progress: impl Progress, +) -> Vec<crate::index::Entry> { + progress.init(Some(idx.num_objects as usize), progress::count("entries")); + let start = Instant::now(); + + let mut v = Vec::with_capacity(idx.num_objects as usize); + for entry in idx.iter() { + v.push(entry); + progress.inc(); + } + v.sort_by_key(|e| e.pack_offset); + + progress.show_throughput(start); + v +} + +pub(crate) struct Count<W> { + pub bytes: u64, + pub inner: W, +} + +impl<W> Count<W> { + pub fn new(inner: W) -> Self { + Count { bytes: 0, inner } + } +} + +impl<W> io::Write for Count<W> +where + W: io::Write, +{ + fn write(&mut self, buf: &[u8]) -> io::Result<usize> { + let written = self.inner.write(buf)?; + self.bytes += written as u64; + Ok(written) + } + + fn flush(&mut self) -> io::Result<()> { + self.inner.flush() + } +} |