Skip to content

Commit 84a317a

Browse files
committed
operation: convert parents to async function
1 parent f5d33b9 commit 84a317a

15 files changed

Lines changed: 70 additions & 31 deletions

cli/src/commands/operation/abandon.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ pub async fn cmd_op_abandon(
8181
(root_op, head_ops)
8282
} else {
8383
let op = resolve_op(&args.operation).await?;
84-
let parent_ops: Vec<_> = op.parents().try_collect()?;
84+
let parent_ops: Vec<_> = op.parents().await?;
8585
let parent_op = match parent_ops.len() {
8686
0 => return Err(user_error("Cannot abandon the root operation")),
8787
1 => parent_ops.into_iter().next().unwrap(),

cli/src/commands/operation/diff.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ pub async fn cmd_op_diff(
101101
to_op = workspace_command.resolve_single_op(args.to.as_deref().unwrap_or("@"))?;
102102
} else {
103103
to_op = workspace_command.resolve_single_op(args.operation.as_deref().unwrap_or("@"))?;
104-
from_ops = to_op.parents().try_collect()?;
104+
from_ops = to_op.parents().await?;
105105
}
106106
let graph_style = GraphStyle::from_settings(settings)?;
107107
let with_content_format = LogContentFormat::new(ui, settings)?;

cli/src/commands/operation/log.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ use clap_complete::ArgValueCandidates;
1818
use futures::StreamExt as _;
1919
use futures::stream;
2020
use futures::stream::BoxStream;
21-
use itertools::Itertools as _;
2221
use jj_lib::graph::GraphEdge;
2322
use jj_lib::graph::reverse_graph;
2423
use jj_lib::op_store::OpStoreError;
@@ -160,7 +159,7 @@ async fn do_op_log(
160159
formatter: &mut dyn Formatter,
161160
op: &Operation,
162161
with_content_format: &LogContentFormat| {
163-
let parent_ops: Vec<_> = op.parents().try_collect()?;
162+
let parent_ops: Vec<_> = op.parents().await?;
164163
let merged_parent_op = repo_loader
165164
.merge_operations(parent_ops.clone(), None)
166165
.await?;

cli/src/commands/operation/revert.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ pub async fn cmd_op_revert(
5858
) -> Result<(), CommandError> {
5959
let mut workspace_command = command.workspace_helper(ui)?;
6060
let bad_op = workspace_command.resolve_single_op(&args.operation)?;
61-
let parent_of_bad_op = match bad_op.parents().at_most_one() {
62-
Ok(Some(parent_of_bad_op)) => parent_of_bad_op?,
61+
let parent_of_bad_op = match bad_op.parents().await?.into_iter().at_most_one() {
62+
Ok(Some(parent_of_bad_op)) => parent_of_bad_op,
6363
Ok(None) => return Err(user_error("Cannot revert root operation")),
6464
Err(_) => return Err(user_error("Cannot revert a merge operation")),
6565
};

cli/src/commands/operation/show.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
// limitations under the License.
1414

1515
use clap_complete::ArgValueCandidates;
16-
use itertools::Itertools as _;
1716
use jj_lib::operation::Operation;
1817

1918
use super::diff::show_op_diff;
@@ -81,7 +80,7 @@ pub async fn cmd_op_show(
8180
let repo_loader = workspace_command.workspace().repo_loader();
8281
let settings = workspace_command.settings();
8382
let op = workspace_command.resolve_single_op(&args.operation)?;
84-
let parent_ops: Vec<_> = op.parents().try_collect()?;
83+
let parent_ops: Vec<_> = op.parents().await?;
8584
let merged_parent_op = repo_loader
8685
.merge_operations(parent_ops.clone(), None)
8786
.await?;

cli/src/commands/redo.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,15 @@ pub async fn cmd_redo(
121121
return Err(user_error("Nothing to redo"));
122122
}
123123

124-
let mut op_to_restore = match op_to_redo.parents().at_most_one().ok().flatten() {
125-
Some(parent_of_op_to_redo) => parent_of_op_to_redo?,
124+
let mut op_to_restore = match op_to_redo
125+
.parents()
126+
.await?
127+
.into_iter()
128+
.at_most_one()
129+
.ok()
130+
.flatten()
131+
{
132+
Some(parent_of_op_to_redo) => parent_of_op_to_redo,
126133
None => {
127134
return Err(internal_error("Undo operation should have a single parent"));
128135
}

cli/src/commands/undo.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,8 +118,8 @@ pub async fn cmd_undo(
118118
writeln!(ui.hint_default(), "To avoid this, run `jj redo` now.")?;
119119
}
120120

121-
let mut op_to_restore = match op_to_undo.parents().at_most_one() {
122-
Ok(Some(parent_of_op_to_undo)) => parent_of_op_to_undo?,
121+
let mut op_to_restore = match op_to_undo.parents().await?.into_iter().at_most_one() {
122+
Ok(Some(parent_of_op_to_undo)) => parent_of_op_to_undo,
123123
Ok(None) => return Err(user_error("Cannot undo root operation")),
124124
Err(_) => {
125125
return Err(user_error("Cannot undo a merge operation")

cli/src/operation_templater.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ use jj_lib::op_store::OperationId;
2727
use jj_lib::operation::Operation;
2828
use jj_lib::repo::RepoLoader;
2929
use jj_lib::settings::UserSettings;
30+
use pollster::FutureExt;
3031

3132
use crate::template_builder;
3233
use crate::template_builder::BuildContext;
@@ -577,7 +578,7 @@ where
577578
|_language, _diagnostics, _build_ctx, self_property, function| {
578579
function.expect_no_arguments()?;
579580
let out_property = self_property.and_then(|op| {
580-
let ops: Vec<_> = op.parents().try_collect()?;
581+
let ops: Vec<_> = op.parents().block_on()?;
581582
Ok(ops)
582583
});
583584
Ok(out_property.into_dyn_wrapped())

lib/src/op_heads_store.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ use std::sync::Arc;
2222
use async_trait::async_trait;
2323
use futures::future::try_join_all;
2424
use itertools::Itertools as _;
25+
use pollster::FutureExt as _;
2526
use thiserror::Error;
2627

2728
use crate::dag_walk;
@@ -138,7 +139,10 @@ where
138139
let filtered_op_heads = dag_walk::heads_ok(
139140
op_heads.into_iter().map(Ok),
140141
|op: &Operation| op.id().clone(),
141-
|op: &Operation| op.parents().collect_vec(),
142+
|op: &Operation| match op.parents().block_on() {
143+
Ok(parents) => parents.into_iter().map(Ok).collect_vec(),
144+
Err(err) => vec![Err(err)],
145+
},
142146
)?;
143147
let op_head_ids_after: HashSet<_> =
144148
filtered_op_heads.iter().map(|op| op.id().clone()).collect();

lib/src/op_walk.rs

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ use futures::future::ready;
2727
use futures::future::try_join_all;
2828
use futures::stream;
2929
use itertools::Itertools as _;
30+
use pollster::FutureExt as _;
3031
use thiserror::Error;
3132

3233
use crate::dag_walk;
@@ -161,7 +162,7 @@ async fn resolve_single_op(
161162
}?;
162163
for (i, c) in op_postfix.chars().enumerate() {
163164
let mut neighbor_ops = match c {
164-
'-' => operation.parents().try_collect()?,
165+
'-' => operation.parents().await?,
165166
'+' => find_child_ops(head_ops.as_ref().unwrap(), operation.id()).await?,
166167
_ => unreachable!(),
167168
};
@@ -276,7 +277,13 @@ pub fn walk_ancestors(
276277
stream::iter(dag_walk::topo_order_reverse_lazy_ok(
277278
head_ops.into_iter().map(Ok),
278279
|OperationByEndTime(op)| op.id().clone(),
279-
|OperationByEndTime(op)| op.parents().map_ok(OperationByEndTime).collect_vec(),
280+
|OperationByEndTime(op)| match op.parents().block_on() {
281+
Ok(parents) => parents
282+
.into_iter()
283+
.map(|parent| Ok(OperationByEndTime(parent)))
284+
.collect_vec(),
285+
Err(err) => vec![Err(err)],
286+
},
280287
|_| panic!("graph has cycle"),
281288
))
282289
.map_ok(|OperationByEndTime(op)| op)
@@ -306,7 +313,13 @@ pub fn walk_ancestors_range(
306313
let trailing_iter = dag_walk::topo_order_reverse_lazy_ok(
307314
start_ops.into_iter().map(Ok),
308315
|OperationByEndTime(op)| op.id().clone(),
309-
|OperationByEndTime(op)| op.parents().map_ok(OperationByEndTime).collect_vec(),
316+
|OperationByEndTime(op)| match op.parents().block_on() {
317+
Ok(parents) => parents
318+
.into_iter()
319+
.map(|op| Ok(OperationByEndTime(op)))
320+
.collect_vec(),
321+
Err(err) => vec![Err(err)],
322+
},
310323
|_| panic!("graph has cycle"),
311324
)
312325
.map_ok(|OperationByEndTime(op)| op);
@@ -320,7 +333,13 @@ fn collect_ancestors_until_roots(
320333
let sorted_ops = match dag_walk::topo_order_reverse_chunked(
321334
start_ops,
322335
|OperationByEndTime(op)| op.id().clone(),
323-
|OperationByEndTime(op)| op.parents().map_ok(OperationByEndTime).collect_vec(),
336+
|OperationByEndTime(op)| match op.parents().block_on() {
337+
Ok(parents) => parents
338+
.into_iter()
339+
.map(|op| Ok(OperationByEndTime(op)))
340+
.collect_vec(),
341+
Err(err) => vec![Err(err)],
342+
},
324343
|_| panic!("graph has cycle"),
325344
) {
326345
Ok(sorted_ops) => sorted_ops,

0 commit comments

Comments
 (0)