Sebastian Thielmake fmt8ef1cb23 years agoHistory
55 lines · 1.3 KB · Rust
RawDownload
use std::collections::VecDeque; use gix_hash::ObjectId;use gix_object::{bstr::BString, TreeRefIter}; /// The state required to visit [Changes] to be instantiated with `State::default()`.#[derive(Default, Clone)]pub struct State {    buf1: Vec<u8>,    buf2: Vec<u8>,    trees: VecDeque<TreeInfoPair>,} type TreeInfoPair = (Option<ObjectId>, Option<ObjectId>); impl State {    fn clear(&mut self) {        self.trees.clear();        self.buf1.clear();        self.buf2.clear();    }} /// An iterator over changes of a tree, instantiated using `Changes::from(…)`.pub struct Changes<'a>(Option<TreeRefIter<'a>>); impl<'a, T> From<T> for Changes<'a>where    T: Into<Option<TreeRefIter<'a>>>,{    fn from(v: T) -> Self {        Changes(v.into())    }} ///pub mod changes; ///pub mod visit;#[doc(inline)]pub use visit::Visit; /// A [Visit][visit::Visit] implementation to record every observed change and keep track of the changed paths.#[derive(Clone, Debug)]pub struct Recorder {    path_deque: VecDeque<BString>,    path: BString,    location: Option<recorder::Location>,    /// The observed changes.    pub records: Vec<recorder::Change>,} /// Useful for use as delegate implementing [`Visit`] to keep track of all seen changes. Useful for debugging or printing primarily.pub mod recorder;