diff --git a/cli/src/merge_tools/builtin.rs b/cli/src/merge_tools/builtin.rs index 2fe4c16be..8b33aa8c5 100644 --- a/cli/src/merge_tools/builtin.rs +++ b/cli/src/merge_tools/builtin.rs @@ -2,6 +2,7 @@ use std::borrow::Cow; use std::path::Path; use std::sync::Arc; +use futures::{StreamExt, TryStreamExt}; use itertools::Itertools; use jj_lib::backend::{BackendError, FileId, MergedTreeId, ObjectId, TreeValue}; use jj_lib::diff::{find_line_ranges, Diff, DiffHunk}; @@ -11,6 +12,7 @@ use jj_lib::merge::Merge; use jj_lib::merged_tree::{MergedTree, MergedTreeBuilder}; use jj_lib::repo_path::RepoPath; use jj_lib::store::Store; +use pollster::FutureExt; use thiserror::Error; #[derive(Debug, Error)] @@ -409,9 +411,10 @@ pub fn edit_diff_builtin( ) -> Result { let store = left_tree.store().clone(); let changed_files: Vec<_> = left_tree - .diff(right_tree, matcher) + .diff_stream(right_tree, matcher) .map(|(path, diff)| diff.map(|_| path)) - .try_collect()?; + .try_collect() + .block_on()?; let files = make_diff_files(&store, left_tree, right_tree, &changed_files)?; let recorder = scm_record::Recorder::new( scm_record::RecordState { diff --git a/cli/src/merge_tools/external.rs b/cli/src/merge_tools/external.rs index de592c97c..96dcf8fda 100644 --- a/cli/src/merge_tools/external.rs +++ b/cli/src/merge_tools/external.rs @@ -6,6 +6,7 @@ use std::process::{Command, ExitStatus, Stdio}; use std::sync::Arc; use config::ConfigError; +use futures::StreamExt; use itertools::Itertools; use jj_lib::backend::{FileId, MergedTreeId, TreeValue}; use jj_lib::conflicts::{self, materialize_merge_result}; @@ -238,10 +239,11 @@ fn check_out_trees( matcher: &dyn Matcher, output_is: Option, ) -> Result { - let changed_files = left_tree - .diff(right_tree, matcher) + let changed_files: Vec<_> = left_tree + .diff_stream(right_tree, matcher) .map(|(path, _diff)| path) - .collect_vec(); + .collect() + .block_on(); let temp_dir = new_utf8_temp_dir("jj-diff-").map_err(DiffCheckoutError::SetUpDir)?; let left_wc_dir = temp_dir.path().join("left");