diff options
author | tummychow <tummychow@users.noreply.github.com> | 2018-02-16 13:49:23 -0800 |
---|---|---|
committer | tummychow <tummychow@users.noreply.github.com> | 2018-02-16 13:49:23 -0800 |
commit | 8b312c943a20f9b687aa06072a638a93adfa6c2f (patch) | |
tree | 25a4f28349d305d1be08f829d0908b16fd6d8768 | |
parent | 8d921bf88cb43d5d83f9655ad61bbcef060ca2ff (diff) |
compute diffs for stack
-rw-r--r-- | src/lib.rs | 29 |
1 files changed, 25 insertions, 4 deletions
@@ -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(()) |