/// A diff between two commits /// /// At the moment this type doesn't properly express a Diff, and is /// only used to compute the change set between commits to generate a /// file history. pub struct Diff { paths: Vec, } impl Diff { /// Generate a new Diff from a git2::Diff pub(crate) fn from(d: git2::Diff) -> Self { Self { paths: d.deltas().fold(vec![], |mut vec, delta| { append(&mut vec, delta.old_file()); append(&mut vec, delta.new_file()); vec }), } } /// Get all paths touched by a diff pub fn get_paths(&self) -> Vec { self.paths.clone() } } fn append(vec: &mut Vec, f: git2::DiffFile) { if let Some(path) = f.path().map(|p| p.to_str().unwrap().into()) { vec.push(path); } }