mirror of
https://seed.radicle.dev/rad:z39mP9rQAaGmERfUMPULfPUi473tY.git
synced 2026-11-02 01:40:33 +08:00
bin(patch): Fix hunk state reloading
This commit is contained in:
@@ -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"))?;
|
||||
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user