summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortummychow <tummychow@users.noreply.github.com>2018-02-16 13:49:23 -0800
committertummychow <tummychow@users.noreply.github.com>2018-02-16 13:49:23 -0800
commit8b312c943a20f9b687aa06072a638a93adfa6c2f (patch)
tree25a4f28349d305d1be08f829d0908b16fd6d8768
parent8d921bf88cb43d5d83f9655ad61bbcef060ca2ff (diff)
compute diffs for stack
-rw-r--r--src/lib.rs29
1 files changed, 25 insertions, 4 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 98b830d..f77a47a 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -25,15 +25,36 @@ pub fn run(config: &Config) -> Result<(), failure::Error> {
None => None,
};
- let stack = working_stack(&repo, base, config.logger)?;
+ let stack: Vec<_> = {
+ let stack = working_stack(&repo, base, config.logger)?;
+ let mut diffs = Vec::with_capacity(stack.len());
+ for commit in &stack {
+ let diff = owned::parse_diff(&repo.diff_tree_to_tree(
+ if commit.parents().len() == 0 {
+ None
+ } else {
+ Some(commit.parent(0)?.tree()?)
+ }.as_ref(),
+ Some(&commit.tree()?),
+ Some(&mut diff_options()),
+ )?)?;
+ debug!(config.logger, "parsed commit diff";
+ "commit" => commit.id().to_string(),
+ "diff" => format!("{:?}", diff),
+ );
+ diffs.push(diff);
+ }
+
+ stack.into_iter().zip(diffs.into_iter()).collect()
+ };
- let index = repo.diff_tree_to_index(
+ let index = owned::parse_diff(&repo.diff_tree_to_index(
Some(&repo.head()?.peel_to_tree()?),
None,
Some(&mut diff_options()),
- )?;
+ )?)?;
debug!(config.logger, "parsed index";
- "index" => format!("{:?}", owned::parse_diff(&index)?),
+ "index" => format!("{:?}", index),
);
Ok(())