Radish alpha
r
rad:z39mP9rQAaGmERfUMPULfPUi473tY
Radicle terminal user interface
Radicle
Git
bin(patch): Fix hunk state reloading
Erik Kundt committed 1 year ago
commit 7dc5cda508e05033d81e34737ca06285326dc0ea
parent 03d1b6f
3 files changed +15 -35
modified 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"))?;

modified bin/commands/patch/review.rs
@@ -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(())
    }

modified 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<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