bin(patch): Fix hunk state reloading

This commit is contained in:
Erik Kundt
2024-12-17 14:30:31 +01:00
parent 03d1b6f116
commit 7dc5cda508
3 changed files with 15 additions and 35 deletions
+1 -1
View File
@@ -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"))?;
+9 -30
View File
@@ -207,7 +207,7 @@ impl<'a> App<'a> {
.collect::<Vec<_>>();
let hunks = hunks
.iter()
.map(|(_, item)| HunkItem::from((&repo, &review, StatefulHunkDiff::from(item))))
.map(|item| HunkItem::from((&repo, &review, StatefulHunkDiff::from(item))))
.collect::<Vec<_>>();
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<dyn Signer> = &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::<Vec<_>>();
// 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(())
}
+5 -4
View File
@@ -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<HunkDiff>,
}
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<HunkDiff>;
fn deref(&self) -> &Self::Target {
&self.hunks