diff --git a/bin/commands/patch.rs b/bin/commands/patch.rs index 314887a4..6ddb33e8 100644 --- a/bin/commands/patch.rs +++ b/bin/commands/patch.rs @@ -366,7 +366,7 @@ mod interface { let hunk = selection .hunk .ok_or_else(|| anyhow!("expected a selected hunk"))?; - let (_, item) = hunks + let item = hunks .get(hunk) .ok_or_else(|| anyhow!("expected a hunk to comment on"))?; diff --git a/bin/commands/patch/review.rs b/bin/commands/patch/review.rs index 6f1cd4ef..8ffe9f34 100644 --- a/bin/commands/patch/review.rs +++ b/bin/commands/patch/review.rs @@ -207,7 +207,7 @@ impl<'a> App<'a> { .collect::>(); let hunks = hunks .iter() - .map(|(_, item)| HunkItem::from((&repo, &review, StatefulHunkDiff::from(item)))) + .map(|item| HunkItem::from((&repo, &review, StatefulHunkDiff::from(item)))) .collect::>(); let mut app = App { @@ -267,42 +267,21 @@ impl<'a> App<'a> { pub fn reload_states(&mut self) -> anyhow::Result<()> { let repo = self.repo()?; let signer: &Box = &self.signer.lock().unwrap(); + let mut hunks = self.hunks.lock().unwrap(); let brain = Brain::load_or_new(self.patch, &self.revision, repo.raw(), signer)?; - let rejected_hunks = Hunks::new(DiffUtil::new(&repo).rejected_diffs(&brain, &self.revision)?); - let mut hunks = self.hunks.lock().unwrap(); - for hunk in &hunks.0 { - + for hunk in &mut hunks.0 { + let state = if rejected_hunks.contains(hunk.inner.hunk()) { + HunkState::Rejected + } else { + HunkState::Accepted + }; + *hunk.inner.state_mut() = state; } - // let (base_diff, queue_diff) = - // DiffUtil::new(&repo).base_queue(brain.clone(), &self.revision)?; - - // // Compute states - // let base_files = base_diff.into_files(); - // let queue_files = queue_diff.into_files(); - - // let states = base_files - // .iter() - // .map(|file| { - // if !queue_files.contains(file) { - // HunkState::Accepted - // } else { - // HunkState::Rejected - // } - // }) - // .collect::>(); - - // let mut queue = self.hunks.lock().unwrap(); - // for (idx, new_state) in states.iter().enumerate() { - // if let Some(hunk) = queue.0.get_mut(idx) { - // *hunk.inner.state_mut() = new_state.clone(); - // } - // } - Ok(()) } diff --git a/bin/commands/patch/review/builder.rs b/bin/commands/patch/review/builder.rs index b6dd41bf..c49bb7fe 100644 --- a/bin/commands/patch/review/builder.rs +++ b/bin/commands/patch/review/builder.rs @@ -10,7 +10,6 @@ //! matches the tree of the patch being reviewed (by accepting hunks), we can say that the patch has //! been fully reviewed. //! -use std::collections::VecDeque; use std::fmt::Write as _; use std::io; use std::ops::{Not, Range}; @@ -33,7 +32,7 @@ use crate::git::HunkDiff; /// Queue of items (usually hunks) left to review. #[derive(Clone, Default)] pub struct Hunks { - hunks: Vec<(usize, HunkDiff)>, + hunks: Vec, } impl Hunks { @@ -151,12 +150,14 @@ impl Hunks { } fn add_item(&mut self, item: HunkDiff) { - self.hunks.push((self.hunks.len(), item)); + self.hunks.push(item); } + + // pub fn contains(&self, ) } impl std::ops::Deref for Hunks { - type Target = Vec<(usize, HunkDiff)>; + type Target = Vec; fn deref(&self) -> &Self::Target { &self.hunks