Remo Senekowitschop: undo: rename to revert36ee36c1 year agoHistory
70 lines · 2.6 KB · Rust
RawDownload
// Copyright 2020-2023 The Jujutsu Authors//// Licensed under the Apache License, Version 2.0 (the "License");// you may not use this file except in compliance with the License.// You may obtain a copy of the License at//// https://www.apache.org/licenses/LICENSE-2.0//// Unless required by applicable law or agreed to in writing, software// distributed under the License is distributed on an "AS IS" BASIS,// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.// See the License for the specific language governing permissions and// limitations under the License. use clap_complete::ArgValueCandidates;use jj_lib::object_id::ObjectId as _; use super::DEFAULT_REVERT_WHAT;use super::RevertWhatToRestore;use super::view_with_desired_portions_restored;use crate::cli_util::CommandHelper;use crate::command_error::CommandError;use crate::complete;use crate::ui::Ui; /// Create a new operation that restores the repo to an earlier state////// This restores the repo to the state at the specified operation, effectively/// undoing all later operations. It does so by creating a new operation.#[derive(clap::Args, Clone, Debug)]pub struct OperationRestoreArgs {    /// The operation to restore to    ///    /// Use `jj op log` to find an operation to restore to. Use e.g. `jj    /// --at-op=<operation ID> log` before restoring to an operation to see the    /// state of the repo at that operation.    #[arg(add = ArgValueCandidates::new(complete::operations))]    operation: String,     /// What portions of the local state to restore (can be repeated)    ///    /// This option is EXPERIMENTAL.    #[arg(long, value_enum, default_values_t = DEFAULT_REVERT_WHAT)]    what: Vec<RevertWhatToRestore>,} pub fn cmd_op_restore(    ui: &mut Ui,    command: &CommandHelper,    args: &OperationRestoreArgs,) -> Result<(), CommandError> {    let mut workspace_command = command.workspace_helper(ui)?;    let target_op = workspace_command.resolve_single_op(&args.operation)?;    let mut tx = workspace_command.start_transaction();    let new_view = view_with_desired_portions_restored(        target_op.view()?.store_view(),        tx.base_repo().view().store_view(),        &args.what,    );    tx.repo_mut().set_view(new_view);    if let Some(mut formatter) = ui.status_formatter() {        write!(formatter, "Restored to operation: ")?;        let template = tx.base_workspace_helper().operation_summary_template();        template.format(&target_op, formatter.as_mut())?;        writeln!(formatter)?;    }    tx.finish(ui, format!("restore to operation {}", target_op.id().hex()))?;     Ok(())}