forked from mirrors/jj
cli: have WorkspaceCommandHelper return &WorkspaceId, clone it by caller
I didn't make this change before because there are many immutable/mutable borrow conflicts. Now most of the problems are consolidated to the transaction wrapper, we can simply make it return a reference.
This commit is contained in:
parent
3d5eb970da
commit
1b8ecef968
3 changed files with 26 additions and 26 deletions
|
@ -513,7 +513,7 @@ impl WorkspaceCommandHelper {
|
|||
// If the Git HEAD has changed, abandon our old checkout and check out the new
|
||||
// Git HEAD.
|
||||
if new_git_head != old_git_head && new_git_head.is_some() {
|
||||
let workspace_id = self.workspace_id();
|
||||
let workspace_id = self.workspace_id().to_owned();
|
||||
let mut locked_working_copy = self.workspace.working_copy_mut().start_mutation();
|
||||
if let Some(old_wc_commit_id) = self.repo.view().get_wc_commit_id(&workspace_id) {
|
||||
tx.mut_repo()
|
||||
|
@ -554,7 +554,7 @@ impl WorkspaceCommandHelper {
|
|||
.peel_to_commit()
|
||||
.ok()
|
||||
.map(|commit| commit.id());
|
||||
if let Some(wc_commit_id) = mut_repo.view().get_wc_commit_id(&self.workspace_id()) {
|
||||
if let Some(wc_commit_id) = mut_repo.view().get_wc_commit_id(self.workspace_id()) {
|
||||
let first_parent_id = mut_repo
|
||||
.index()
|
||||
.entry_by_id(wc_commit_id)
|
||||
|
@ -591,7 +591,7 @@ impl WorkspaceCommandHelper {
|
|||
&mut self,
|
||||
) -> Result<(LockedWorkingCopy, Commit), CommandError> {
|
||||
self.check_working_copy_writable()?;
|
||||
let wc_commit_id = self.repo.view().get_wc_commit_id(&self.workspace_id());
|
||||
let wc_commit_id = self.repo.view().get_wc_commit_id(self.workspace_id());
|
||||
let wc_commit = if let Some(wc_commit_id) = wc_commit_id {
|
||||
self.repo.store().get_commit(wc_commit_id)?
|
||||
} else {
|
||||
|
@ -617,8 +617,8 @@ impl WorkspaceCommandHelper {
|
|||
self.workspace.workspace_root()
|
||||
}
|
||||
|
||||
pub fn workspace_id(&self) -> WorkspaceId {
|
||||
self.workspace.workspace_id().clone()
|
||||
pub fn workspace_id(&self) -> &WorkspaceId {
|
||||
self.workspace.workspace_id()
|
||||
}
|
||||
|
||||
pub fn working_copy_shared_with_git(&self) -> bool {
|
||||
|
@ -756,7 +756,7 @@ impl WorkspaceCommandHelper {
|
|||
fn revset_context(&self) -> RevsetWorkspaceContext {
|
||||
RevsetWorkspaceContext {
|
||||
cwd: &self.cwd,
|
||||
workspace_id: self.workspace.workspace_id(),
|
||||
workspace_id: self.workspace_id(),
|
||||
workspace_root: self.workspace.workspace_root(),
|
||||
}
|
||||
}
|
||||
|
@ -779,7 +779,7 @@ impl WorkspaceCommandHelper {
|
|||
write_commit_summary(
|
||||
formatter,
|
||||
self.repo.as_repo_ref(),
|
||||
self.workspace.workspace_id(),
|
||||
self.workspace_id(),
|
||||
commit,
|
||||
&self.settings,
|
||||
)
|
||||
|
@ -801,8 +801,8 @@ impl WorkspaceCommandHelper {
|
|||
|
||||
pub fn commit_working_copy(&mut self, ui: &mut Ui) -> Result<(), CommandError> {
|
||||
let repo = self.repo.clone();
|
||||
let workspace_id = self.workspace_id();
|
||||
let wc_commit_id = match repo.view().get_wc_commit_id(&self.workspace_id()) {
|
||||
let workspace_id = self.workspace_id().to_owned();
|
||||
let wc_commit_id = match repo.view().get_wc_commit_id(&workspace_id) {
|
||||
Some(wc_commit_id) => wc_commit_id.clone(),
|
||||
None => {
|
||||
// If the workspace has been deleted, it's unclear what to do, so we just skip
|
||||
|
@ -974,15 +974,16 @@ impl WorkspaceCommandHelper {
|
|||
let maybe_old_commit = tx
|
||||
.base_repo()
|
||||
.view()
|
||||
.get_wc_commit_id(&self.workspace_id())
|
||||
.get_wc_commit_id(self.workspace_id())
|
||||
.map(|commit_id| store.get_commit(commit_id))
|
||||
.transpose()?;
|
||||
self.repo = tx.commit();
|
||||
if self.may_update_working_copy {
|
||||
let workspace_id = self.workspace_id().to_owned();
|
||||
let stats = update_working_copy(
|
||||
ui,
|
||||
&self.repo,
|
||||
&self.workspace_id(),
|
||||
&workspace_id,
|
||||
self.workspace.working_copy_mut(),
|
||||
maybe_old_commit.as_ref(),
|
||||
&self.settings,
|
||||
|
@ -1031,13 +1032,13 @@ impl WorkspaceCommandTransaction<'_> {
|
|||
}
|
||||
|
||||
pub fn check_out(&mut self, commit: &Commit) -> Result<Commit, CheckOutCommitError> {
|
||||
let workspace_id = self.helper.workspace_id();
|
||||
let workspace_id = self.helper.workspace_id().to_owned();
|
||||
let settings = &self.helper.settings;
|
||||
self.tx.mut_repo().check_out(workspace_id, settings, commit)
|
||||
}
|
||||
|
||||
pub fn edit(&mut self, commit: &Commit) -> Result<(), EditCommitError> {
|
||||
let workspace_id = self.helper.workspace_id();
|
||||
let workspace_id = self.helper.workspace_id().to_owned();
|
||||
self.tx.mut_repo().edit(workspace_id, commit)
|
||||
}
|
||||
|
||||
|
@ -1047,7 +1048,7 @@ impl WorkspaceCommandTransaction<'_> {
|
|||
commit: &Commit,
|
||||
) -> std::io::Result<()> {
|
||||
let repo = self.tx.repo().as_repo_ref();
|
||||
let workspace_id = self.helper.workspace.workspace_id();
|
||||
let workspace_id = self.helper.workspace_id();
|
||||
let settings = &self.helper.settings;
|
||||
write_commit_summary(formatter, repo, workspace_id, commit, settings)
|
||||
}
|
||||
|
|
|
@ -612,7 +612,7 @@ fn cmd_git_push(
|
|||
match workspace_command
|
||||
.repo()
|
||||
.view()
|
||||
.get_wc_commit_id(&workspace_command.workspace_id())
|
||||
.get_wc_commit_id(workspace_command.workspace_id())
|
||||
{
|
||||
None => {
|
||||
return Err(user_error("Nothing checked out in this workspace"));
|
||||
|
|
|
@ -1243,7 +1243,7 @@ fn cmd_show(ui: &mut Ui, command: &CommandHelper, args: &ShowArgs) -> Result<(),
|
|||
);
|
||||
let template = crate::template_parser::parse_commit_template(
|
||||
workspace_command.repo().as_repo_ref(),
|
||||
&workspace_command.workspace_id(),
|
||||
workspace_command.workspace_id(),
|
||||
&template_string,
|
||||
);
|
||||
ui.request_pager();
|
||||
|
@ -1269,7 +1269,7 @@ fn cmd_status(
|
|||
let repo = workspace_command.repo();
|
||||
let maybe_checkout_id = repo
|
||||
.view()
|
||||
.get_wc_commit_id(&workspace_command.workspace_id());
|
||||
.get_wc_commit_id(workspace_command.workspace_id());
|
||||
let maybe_checkout = maybe_checkout_id
|
||||
.map(|id| repo.store().get_commit(id))
|
||||
.transpose()?;
|
||||
|
@ -1409,7 +1409,7 @@ fn cmd_log(ui: &mut Ui, command: &CommandHelper, args: &LogArgs) -> Result<(), C
|
|||
workspace_command.parse_revset(args.revisions.as_deref().unwrap_or(&default_revset))?;
|
||||
let repo = workspace_command.repo();
|
||||
let workspace_id = workspace_command.workspace_id();
|
||||
let checkout_id = repo.view().get_wc_commit_id(&workspace_id);
|
||||
let checkout_id = repo.view().get_wc_commit_id(workspace_id);
|
||||
let matcher = workspace_command.matcher_from_values(&args.paths)?;
|
||||
let revset = workspace_command.evaluate_revset(&revset_expression)?;
|
||||
let revset = if !args.paths.is_empty() {
|
||||
|
@ -1428,7 +1428,7 @@ fn cmd_log(ui: &mut Ui, command: &CommandHelper, args: &LogArgs) -> Result<(), C
|
|||
};
|
||||
let template = crate::template_parser::parse_commit_template(
|
||||
repo.as_repo_ref(),
|
||||
&workspace_id,
|
||||
workspace_id,
|
||||
&template_string,
|
||||
);
|
||||
let format_commit_template = |commit: &Commit, formatter: &mut dyn Formatter| {
|
||||
|
@ -1561,7 +1561,7 @@ fn cmd_obslog(ui: &mut Ui, command: &CommandHelper, args: &ObslogArgs) -> Result
|
|||
let wc_commit_id = workspace_command
|
||||
.repo()
|
||||
.view()
|
||||
.get_wc_commit_id(&workspace_id);
|
||||
.get_wc_commit_id(workspace_id);
|
||||
|
||||
let diff_formats =
|
||||
diff_util::diff_formats_for_log(command.settings(), &args.diff_format, args.patch);
|
||||
|
@ -1572,7 +1572,7 @@ fn cmd_obslog(ui: &mut Ui, command: &CommandHelper, args: &ObslogArgs) -> Result
|
|||
};
|
||||
let template = crate::template_parser::parse_commit_template(
|
||||
workspace_command.repo().as_repo_ref(),
|
||||
&workspace_id,
|
||||
workspace_id,
|
||||
&template_string,
|
||||
);
|
||||
|
||||
|
@ -1786,7 +1786,7 @@ fn cmd_commit(ui: &mut Ui, command: &CommandHelper, args: &CommitArgs) -> Result
|
|||
let commit_id = workspace_command
|
||||
.repo()
|
||||
.view()
|
||||
.get_wc_commit_id(&workspace_command.workspace_id())
|
||||
.get_wc_commit_id(workspace_command.workspace_id())
|
||||
.ok_or_else(|| user_error("This command requires a working copy"))?;
|
||||
let commit = workspace_command.repo().store().get_commit(commit_id)?;
|
||||
let description = if let Some(message) = &args.message {
|
||||
|
@ -1943,11 +1943,10 @@ fn cmd_edit(ui: &mut Ui, command: &CommandHelper, args: &EditArgs) -> Result<(),
|
|||
let mut workspace_command = command.workspace_helper(ui)?;
|
||||
let new_commit = workspace_command.resolve_single_rev(&args.revision)?;
|
||||
workspace_command.check_rewriteable(&new_commit)?;
|
||||
let workspace_id = workspace_command.workspace_id();
|
||||
if workspace_command
|
||||
.repo()
|
||||
.view()
|
||||
.get_wc_commit_id(&workspace_id)
|
||||
.get_wc_commit_id(workspace_command.workspace_id())
|
||||
== Some(new_commit.id())
|
||||
{
|
||||
ui.write("Already editing that commit\n")?;
|
||||
|
@ -3048,7 +3047,7 @@ fn cmd_workspace_add(
|
|||
let new_wc_commit = if let Some(old_checkout_id) = tx
|
||||
.base_repo()
|
||||
.view()
|
||||
.get_wc_commit_id(&old_workspace_command.workspace_id())
|
||||
.get_wc_commit_id(old_workspace_command.workspace_id())
|
||||
{
|
||||
tx.base_repo()
|
||||
.store()
|
||||
|
@ -3073,7 +3072,7 @@ fn cmd_workspace_forget(
|
|||
let workspace_id = if let Some(workspace_str) = &args.workspace {
|
||||
WorkspaceId::new(workspace_str.to_string())
|
||||
} else {
|
||||
workspace_command.workspace_id()
|
||||
workspace_command.workspace_id().to_owned()
|
||||
};
|
||||
if workspace_command
|
||||
.repo()
|
||||
|
|
Loading…
Reference in a new issue