ok/jj
1
0
Fork 0
forked from mirrors/jj

cli: get repo path from WorkspaceCommandHelper, not from ReadonlyRepo

I'd like to remove `ReadonlyRepo::repo_path()` since it doesn't make
sense when the repo is stored in a database.
This commit is contained in:
Martin von Zweigbergk 2024-08-27 21:34:35 -07:00 committed by Martin von Zweigbergk
parent b22d8fefd9
commit bfb16a4c54
10 changed files with 36 additions and 22 deletions

View file

@ -785,6 +785,10 @@ impl WorkspaceCommandHelper {
&self.user_repo.repo &self.user_repo.repo
} }
pub fn repo_path(&self) -> &Path {
self.workspace.repo_path()
}
pub fn working_copy(&self) -> &dyn WorkingCopy { pub fn working_copy(&self) -> &dyn WorkingCopy {
self.workspace.working_copy() self.workspace.working_copy()
} }

View file

@ -115,7 +115,7 @@ new working-copy commit.
} }
let temp_commit = commit_builder.write_hidden()?; let temp_commit = commit_builder.write_hidden()?;
let template = description_template(&tx, "", &temp_commit)?; let template = description_template(&tx, "", &temp_commit)?;
edit_description(tx.base_repo(), &template, command.settings())? edit_description(tx.base_workspace_helper(), &template, command.settings())?
}; };
commit_builder.set_description(description); commit_builder.set_description(description);
let new_commit = commit_builder.write(tx.repo_mut())?; let new_commit = commit_builder.write(tx.repo_mut())?;

View file

@ -123,7 +123,6 @@ pub(crate) fn cmd_describe(
}) })
.collect() .collect()
} else { } else {
let repo = tx.base_repo().clone();
let temp_commits: Vec<(_, _)> = commits let temp_commits: Vec<(_, _)> = commits
.iter() .iter()
// Edit descriptions in topological order // Edit descriptions in topological order
@ -147,7 +146,8 @@ pub(crate) fn cmd_describe(
if let [(_, temp_commit)] = &*temp_commits { if let [(_, temp_commit)] = &*temp_commits {
let template = description_template(&tx, "", temp_commit)?; let template = description_template(&tx, "", temp_commit)?;
let description = edit_description(&repo, &template, command.settings())?; let description =
edit_description(tx.base_workspace_helper(), &template, command.settings())?;
vec![(&commits[0], description)] vec![(&commits[0], description)]
} else { } else {
@ -156,7 +156,7 @@ pub(crate) fn cmd_describe(
missing, missing,
duplicates, duplicates,
unexpected, unexpected,
} = edit_multiple_descriptions(&mut tx, &repo, &temp_commits, command.settings())?; } = edit_multiple_descriptions(&mut tx, &temp_commits, command.settings())?;
if !missing.is_empty() { if !missing.is_empty() {
return Err(user_error(format!( return Err(user_error(format!(
"The description for the following commits were not found in the edited \ "The description for the following commits were not found in the edited \

View file

@ -158,7 +158,7 @@ pub fn cmd_git_clone(
let (mut workspace_command, stats) = clone_result?; let (mut workspace_command, stats) = clone_result?;
if let Some(default_branch) = &stats.default_branch { if let Some(default_branch) = &stats.default_branch {
// Set repository level `trunk()` alias to the default remote branch. // Set repository level `trunk()` alias to the default remote branch.
let config_path = workspace_command.repo().repo_path().join("config.toml"); let config_path = workspace_command.repo_path().join("config.toml");
write_config_value_to_file( write_config_value_to_file(
&ConfigNamePathBuf::from_iter(["revset-aliases", "trunk()"]), &ConfigNamePathBuf::from_iter(["revset-aliases", "trunk()"]),
format!("{default_branch}@{remote_name}").into(), format!("{default_branch}@{remote_name}").into(),

View file

@ -28,6 +28,7 @@ use jj_lib::workspace::Workspace;
use crate::cli_util::print_trackable_remote_branches; use crate::cli_util::print_trackable_remote_branches;
use crate::cli_util::start_repo_transaction; use crate::cli_util::start_repo_transaction;
use crate::cli_util::CommandHelper; use crate::cli_util::CommandHelper;
use crate::cli_util::WorkspaceCommandHelper;
use crate::command_error::cli_error; use crate::command_error::cli_error;
use crate::command_error::user_error_with_hint; use crate::command_error::user_error_with_hint;
use crate::command_error::user_error_with_message; use crate::command_error::user_error_with_message;
@ -171,7 +172,7 @@ pub fn do_init(
let mut workspace_command = command.for_workable_repo(ui, workspace, repo)?; let mut workspace_command = command.for_workable_repo(ui, workspace, repo)?;
maybe_add_gitignore(&workspace_command)?; maybe_add_gitignore(&workspace_command)?;
workspace_command.maybe_snapshot(ui)?; workspace_command.maybe_snapshot(ui)?;
maybe_set_repository_level_trunk_alias(ui, workspace_command.repo())?; maybe_set_repository_level_trunk_alias(ui, &workspace_command)?;
if !workspace_command.working_copy_shared_with_git() { if !workspace_command.working_copy_shared_with_git() {
let mut tx = workspace_command.start_transaction(); let mut tx = workspace_command.start_transaction();
jj_lib::git::import_head(tx.repo_mut())?; jj_lib::git::import_head(tx.repo_mut())?;
@ -234,9 +235,9 @@ fn init_git_refs(
// Set repository level `trunk()` alias to the default branch for "origin". // Set repository level `trunk()` alias to the default branch for "origin".
pub fn maybe_set_repository_level_trunk_alias( pub fn maybe_set_repository_level_trunk_alias(
ui: &Ui, ui: &Ui,
repo: &Arc<ReadonlyRepo>, workspace_command: &WorkspaceCommandHelper,
) -> Result<(), CommandError> { ) -> Result<(), CommandError> {
let git_repo = get_git_repo(repo.store())?; let git_repo = get_git_repo(workspace_command.repo().store())?;
if let Ok(reference) = git_repo.find_reference("refs/remotes/origin/HEAD") { if let Ok(reference) = git_repo.find_reference("refs/remotes/origin/HEAD") {
if let Some(reference_name) = reference.symbolic_target() { if let Some(reference_name) = reference.symbolic_target() {
if let Some(RefName::RemoteBranch { if let Some(RefName::RemoteBranch {
@ -244,7 +245,7 @@ pub fn maybe_set_repository_level_trunk_alias(
.. ..
}) = parse_git_ref(reference_name) }) = parse_git_ref(reference_name)
{ {
let config_path = repo.repo_path().join("config.toml"); let config_path = workspace_command.repo_path().join("config.toml");
write_config_value_to_file( write_config_value_to_file(
&ConfigNamePathBuf::from_iter(["revset-aliases", "trunk()"]), &ConfigNamePathBuf::from_iter(["revset-aliases", "trunk()"]),
format!("{default_branch}@origin").into(), format!("{default_branch}@origin").into(),

View file

@ -154,7 +154,7 @@ fn cmd_sparse_edit(
_args: &SparseEditArgs, _args: &SparseEditArgs,
) -> Result<(), CommandError> { ) -> Result<(), CommandError> {
let mut workspace_command = command.workspace_helper(ui)?; let mut workspace_command = command.workspace_helper(ui)?;
let repo_path = workspace_command.repo().repo_path().to_owned(); let repo_path = workspace_command.repo_path().to_owned();
update_sparse_patterns_with(ui, &mut workspace_command, |_ui, old_patterns| { update_sparse_patterns_with(ui, &mut workspace_command, |_ui, old_patterns| {
let mut new_patterns = edit_sparse(&repo_path, old_patterns, command.settings())?; let mut new_patterns = edit_sparse(&repo_path, old_patterns, command.settings())?;
new_patterns.sort_unstable(); new_patterns.sort_unstable();

View file

@ -140,7 +140,8 @@ the operation will be aborted.
"Enter a description for the first commit.", "Enter a description for the first commit.",
&temp_commit, &temp_commit,
)?; )?;
let description = edit_description(tx.base_repo(), &template, command.settings())?; let description =
edit_description(tx.base_workspace_helper(), &template, command.settings())?;
commit_builder.set_description(description); commit_builder.set_description(description);
commit_builder.write(tx.repo_mut())? commit_builder.write(tx.repo_mut())?
}; };
@ -182,7 +183,7 @@ the operation will be aborted.
"Enter a description for the second commit.", "Enter a description for the second commit.",
&temp_commit, &temp_commit,
)?; )?;
edit_description(tx.base_repo(), &template, command.settings())? edit_description(tx.base_workspace_helper(), &template, command.settings())?
}; };
commit_builder.set_description(description); commit_builder.set_description(description);
commit_builder.write(tx.repo_mut())? commit_builder.write(tx.repo_mut())?

View file

@ -307,7 +307,12 @@ from the source will be moved into the destination.
.iter() .iter()
.filter_map(|source| source.abandon.then_some(source.commit)) .filter_map(|source| source.abandon.then_some(source.commit))
.collect_vec(); .collect_vec();
combine_messages(tx.base_repo(), &abandoned_commits, destination, settings)? combine_messages(
tx.base_workspace_helper(),
&abandoned_commits,
destination,
settings,
)?
} }
}; };
let mut predecessors = vec![destination.id().clone()]; let mut predecessors = vec![destination.id().clone()];

View file

@ -107,8 +107,12 @@ aborted.
// case). // case).
if new_parent_tree_id == parent_base_tree.id() { if new_parent_tree_id == parent_base_tree.id() {
tx.repo_mut().record_abandoned_commit(parent.id().clone()); tx.repo_mut().record_abandoned_commit(parent.id().clone());
let description = let description = combine_messages(
combine_messages(tx.base_repo(), &[&parent], &commit, command.settings())?; tx.base_workspace_helper(),
&[&parent],
&commit,
command.settings(),
)?;
// Commit the new child on top of the parent's parents. // Commit the new child on top of the parent's parents.
tx.repo_mut() tx.repo_mut()
.rewrite_commit(command.settings(), &commit) .rewrite_commit(command.settings(), &commit)

View file

@ -7,12 +7,12 @@ use indoc::indoc;
use itertools::Itertools; use itertools::Itertools;
use jj_lib::backend::CommitId; use jj_lib::backend::CommitId;
use jj_lib::commit::Commit; use jj_lib::commit::Commit;
use jj_lib::repo::ReadonlyRepo;
use jj_lib::settings::UserSettings; use jj_lib::settings::UserSettings;
use thiserror::Error; use thiserror::Error;
use crate::cli_util::edit_temp_file; use crate::cli_util::edit_temp_file;
use crate::cli_util::short_commit_hash; use crate::cli_util::short_commit_hash;
use crate::cli_util::WorkspaceCommandHelper;
use crate::cli_util::WorkspaceCommandTransaction; use crate::cli_util::WorkspaceCommandTransaction;
use crate::command_error::CommandError; use crate::command_error::CommandError;
use crate::formatter::PlainTextFormatter; use crate::formatter::PlainTextFormatter;
@ -33,7 +33,7 @@ where
} }
pub fn edit_description( pub fn edit_description(
repo: &ReadonlyRepo, workspace_command: &WorkspaceCommandHelper,
description: &str, description: &str,
settings: &UserSettings, settings: &UserSettings,
) -> Result<String, CommandError> { ) -> Result<String, CommandError> {
@ -47,7 +47,7 @@ JJ: Lines starting with "JJ: " (like this one) will be removed.
let description = edit_temp_file( let description = edit_temp_file(
"description", "description",
".jjdescription", ".jjdescription",
repo.repo_path(), workspace_command.repo_path(),
&description, &description,
settings, settings,
)?; )?;
@ -58,7 +58,6 @@ JJ: Lines starting with "JJ: " (like this one) will be removed.
/// Edits the descriptions of the given commits in a single editor session. /// Edits the descriptions of the given commits in a single editor session.
pub fn edit_multiple_descriptions( pub fn edit_multiple_descriptions(
tx: &mut WorkspaceCommandTransaction, tx: &mut WorkspaceCommandTransaction,
repo: &ReadonlyRepo,
commits: &[(&CommitId, Commit)], commits: &[(&CommitId, Commit)],
settings: &UserSettings, settings: &UserSettings,
) -> Result<ParsedBulkEditMessage<CommitId>, CommandError> { ) -> Result<ParsedBulkEditMessage<CommitId>, CommandError> {
@ -87,7 +86,7 @@ pub fn edit_multiple_descriptions(
let bulk_message = edit_temp_file( let bulk_message = edit_temp_file(
"description", "description",
".jjdescription", ".jjdescription",
repo.repo_path(), tx.base_workspace_helper().repo_path(),
&bulk_message, &bulk_message,
settings, settings,
)?; )?;
@ -178,7 +177,7 @@ where
/// then that one is used. Otherwise we concatenate the messages and ask the /// then that one is used. Otherwise we concatenate the messages and ask the
/// user to edit the result in their editor. /// user to edit the result in their editor.
pub fn combine_messages( pub fn combine_messages(
repo: &ReadonlyRepo, workspace_command: &WorkspaceCommandHelper,
sources: &[&Commit], sources: &[&Commit],
destination: &Commit, destination: &Commit,
settings: &UserSettings, settings: &UserSettings,
@ -208,7 +207,7 @@ pub fn combine_messages(
combined.push_str("\nJJ: Description from source commit:\n"); combined.push_str("\nJJ: Description from source commit:\n");
combined.push_str(commit.description()); combined.push_str(commit.description());
} }
edit_description(repo, &combined, settings) edit_description(workspace_command, &combined, settings)
} }
/// Create a description from a list of paragraphs. /// Create a description from a list of paragraphs.