just playing with tangled
1// Copyright 2025 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::io::Write as _;
16
17use jj_lib::repo::Repo as _;
18use tracing::instrument;
19
20use crate::cli_util::CommandHelper;
21use crate::command_error::user_error;
22use crate::command_error::CommandError;
23use crate::ui::Ui;
24
25/// Show the underlying Git directory of a repository using the Git backend
26#[derive(clap::Args, Clone, Debug)]
27pub struct GitRootArgs {}
28
29#[instrument(skip_all)]
30pub fn cmd_git_root(
31 ui: &mut Ui,
32 command: &CommandHelper,
33 _args: &GitRootArgs,
34) -> Result<(), CommandError> {
35 let workspace_command = command.workspace_helper(ui)?;
36 let store = workspace_command.repo().store();
37 let git_backend = jj_lib::git::get_git_backend(store)?;
38 let root = git_backend
39 .git_repo_path()
40 .to_str()
41 .ok_or_else(|| user_error("The workspace root is not valid UTF-8"))?;
42 writeln!(ui.stdout(), "{root}")?;
43 Ok(())
44}