From 99e5a28d17cda752d3f32012a16bf17cdbadf9e9 Mon Sep 17 00:00:00 2001 From: Martin von Zweigbergk Date: Sat, 6 Nov 2021 15:36:54 -0700 Subject: [PATCH] cli: don't materialize conflicts when editing diffs The diff-editing code shares the `TreeState` functionality with the working-copy code. That means we can now let the user edit conflicts without materializing them first. So now the user can do e.g. `jj edit -r ` and resolve only some of the conflicts. --- src/diff_edit.rs | 27 +++------------------------ 1 file changed, 3 insertions(+), 24 deletions(-) diff --git a/src/diff_edit.rs b/src/diff_edit.rs index 046cb3f71..eb083ff6a 100644 --- a/src/diff_edit.rs +++ b/src/diff_edit.rs @@ -18,12 +18,11 @@ use std::path::{Path, PathBuf}; use std::process::Command; use std::sync::Arc; -use jujutsu_lib::backend::{BackendError, TreeId, TreeValue}; +use jujutsu_lib::backend::{BackendError, TreeId}; use jujutsu_lib::matchers::EverythingMatcher; use jujutsu_lib::repo_path::RepoPath; use jujutsu_lib::store::Store; use jujutsu_lib::tree::{merge_trees, Tree}; -use jujutsu_lib::tree_builder::TreeBuilder; use jujutsu_lib::working_copy::{CheckoutError, TreeState}; use tempfile::tempdir; use thiserror::Error; @@ -52,26 +51,6 @@ impl From for DiffEditError { } } -fn add_to_tree( - store: &Store, - tree_builder: &mut TreeBuilder, - repo_path: &RepoPath, - value: &TreeValue, -) -> Result<(), BackendError> { - match value { - TreeValue::Conflict(conflict_id) => { - let conflict = store.read_conflict(conflict_id)?; - let materialized_value = - jujutsu_lib::conflicts::conflict_to_materialized_value(store, repo_path, &conflict); - tree_builder.set(repo_path.clone(), materialized_value); - } - _ => { - tree_builder.set(repo_path.clone(), (*value).clone()); - } - } - Ok(()) -} - fn check_out( store: Arc, wc_dir: PathBuf, @@ -110,10 +89,10 @@ pub fn edit_diff( for (file_path, diff) in left_tree.diff(right_tree, &EverythingMatcher) { let (left_value, right_value) = diff.as_options(); if let Some(value) = left_value { - add_to_tree(store, &mut left_tree_builder, &file_path, value).unwrap(); + left_tree_builder.set(file_path.clone(), value.clone()); } if let Some(value) = right_value { - add_to_tree(store, &mut right_tree_builder, &file_path, value).unwrap(); + right_tree_builder.set(file_path.clone(), value.clone()); } } let left_partial_tree_id = left_tree_builder.write_tree();