just playing with tangled
at ig/vimdiffwarn 80 lines 2.8 kB view raw
1// Copyright 2023 The Jujutsu Authors 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// https://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15use std::fmt::Debug; 16use std::io::Write as _; 17 18use jj_lib::object_id::ObjectId as _; 19use jj_lib::revset; 20use jj_lib::revset::RevsetDiagnostics; 21 22use crate::cli_util::CommandHelper; 23use crate::command_error::print_parse_diagnostics; 24use crate::command_error::CommandError; 25use crate::revset_util; 26use crate::ui::Ui; 27 28/// Evaluate revset to full commit IDs 29#[derive(clap::Args, Clone, Debug)] 30pub struct DebugRevsetArgs { 31 revision: String, 32} 33 34pub fn cmd_debug_revset( 35 ui: &mut Ui, 36 command: &CommandHelper, 37 args: &DebugRevsetArgs, 38) -> Result<(), CommandError> { 39 let workspace_command = command.workspace_helper(ui)?; 40 let workspace_ctx = workspace_command.env().revset_parse_context(); 41 let repo = workspace_command.repo().as_ref(); 42 43 let mut diagnostics = RevsetDiagnostics::new(); 44 let expression = revset::parse(&mut diagnostics, &args.revision, &workspace_ctx)?; 45 print_parse_diagnostics(ui, "In revset expression", &diagnostics)?; 46 writeln!(ui.stdout(), "-- Parsed:")?; 47 writeln!(ui.stdout(), "{expression:#?}")?; 48 writeln!(ui.stdout())?; 49 50 let symbol_resolver = revset_util::default_symbol_resolver( 51 repo, 52 command.revset_extensions().symbol_resolvers(), 53 workspace_command.id_prefix_context(), 54 ); 55 let expression = expression.resolve_user_expression(repo, &symbol_resolver)?; 56 writeln!(ui.stdout(), "-- Resolved:")?; 57 writeln!(ui.stdout(), "{expression:#?}")?; 58 writeln!(ui.stdout())?; 59 60 let expression = revset::optimize(expression); 61 writeln!(ui.stdout(), "-- Optimized:")?; 62 writeln!(ui.stdout(), "{expression:#?}")?; 63 writeln!(ui.stdout())?; 64 65 let backend_expression = expression.to_backend_expression(repo); 66 writeln!(ui.stdout(), "-- Backend:")?; 67 writeln!(ui.stdout(), "{backend_expression:#?}")?; 68 writeln!(ui.stdout())?; 69 70 let revset = expression.evaluate_unoptimized(repo)?; 71 writeln!(ui.stdout(), "-- Evaluated:")?; 72 writeln!(ui.stdout(), "{revset:#?}")?; 73 writeln!(ui.stdout())?; 74 75 writeln!(ui.stdout(), "-- Commit IDs:")?; 76 for commit_id in revset.iter() { 77 writeln!(ui.stdout(), "{}", commit_id?.hex())?; 78 } 79 Ok(()) 80}