mirror of
https://github.com/martinvonz/jj.git
synced 2025-01-18 02:04:19 +00:00
cli: move ui.settings() to CommandHelper, disown UserSettings from Ui
Still UserSettings is cloned to WorkspaceCommandHelper, but I think this is slightly better since CommandHelper and WorkspaceCommandHelper are scoped based on call stack. Perhaps, UserSettings can be shared by Arc or immutable reference.
This commit is contained in:
parent
71102a7d4a
commit
42a044b7c7
5 changed files with 121 additions and 113 deletions
|
@ -44,7 +44,7 @@ fn create_store_factories() -> StoreFactories {
|
|||
}
|
||||
|
||||
fn run_custom_command(
|
||||
ui: &mut Ui,
|
||||
_ui: &mut Ui,
|
||||
command_helper: &CommandHelper,
|
||||
command: CustomCommands,
|
||||
) -> Result<(), CommandError> {
|
||||
|
@ -52,7 +52,7 @@ fn run_custom_command(
|
|||
CustomCommands::InitJit => {
|
||||
let wc_path = command_helper.cwd();
|
||||
// Initialize a workspace with the custom backend
|
||||
Workspace::init_with_backend(ui.settings(), wc_path, |store_path| {
|
||||
Workspace::init_with_backend(command_helper.settings(), wc_path, |store_path| {
|
||||
Box::new(JitBackend::init(store_path))
|
||||
})?;
|
||||
Ok(())
|
||||
|
|
|
@ -40,7 +40,7 @@ fn run_custom_command(
|
|||
let mut tx = workspace_command.start_transaction("Frobnicate");
|
||||
let new_commit = tx
|
||||
.mut_repo()
|
||||
.rewrite_commit(ui.settings(), &commit)
|
||||
.rewrite_commit(command_helper.settings(), &commit)
|
||||
.set_description("Frobnicated!")
|
||||
.write()?;
|
||||
workspace_command.finish_transaction(ui, tx)?;
|
||||
|
|
|
@ -263,6 +263,7 @@ pub struct CommandHelper {
|
|||
cwd: PathBuf,
|
||||
string_args: Vec<String>,
|
||||
global_args: GlobalArgs,
|
||||
settings: UserSettings,
|
||||
store_factories: StoreFactories,
|
||||
}
|
||||
|
||||
|
@ -272,6 +273,7 @@ impl CommandHelper {
|
|||
cwd: PathBuf,
|
||||
string_args: Vec<String>,
|
||||
global_args: GlobalArgs,
|
||||
settings: UserSettings,
|
||||
store_factories: StoreFactories,
|
||||
) -> Self {
|
||||
Self {
|
||||
|
@ -279,6 +281,7 @@ impl CommandHelper {
|
|||
cwd,
|
||||
string_args,
|
||||
global_args,
|
||||
settings,
|
||||
store_factories,
|
||||
}
|
||||
}
|
||||
|
@ -299,17 +302,21 @@ impl CommandHelper {
|
|||
&self.global_args
|
||||
}
|
||||
|
||||
pub fn settings(&self) -> &UserSettings {
|
||||
&self.settings
|
||||
}
|
||||
|
||||
pub fn workspace_helper(&self, ui: &mut Ui) -> Result<WorkspaceCommandHelper, CommandError> {
|
||||
let workspace = self.load_workspace(ui)?;
|
||||
let workspace = self.load_workspace()?;
|
||||
let mut workspace_command = self.resolve_operation(ui, workspace)?;
|
||||
workspace_command.snapshot(ui)?;
|
||||
Ok(workspace_command)
|
||||
}
|
||||
|
||||
pub fn load_workspace(&self, ui: &Ui) -> Result<Workspace, CommandError> {
|
||||
pub fn load_workspace(&self) -> Result<Workspace, CommandError> {
|
||||
let wc_path_str = self.global_args.repository.as_deref().unwrap_or(".");
|
||||
let wc_path = self.cwd.join(wc_path_str);
|
||||
Workspace::load(ui.settings(), &wc_path, &self.store_factories).map_err(|err| match err {
|
||||
Workspace::load(&self.settings, &wc_path, &self.store_factories).map_err(|err| match err {
|
||||
WorkspaceLoadError::NoWorkspaceHere(wc_path) => {
|
||||
let message = format!("There is no jj repo in \"{wc_path_str}\"");
|
||||
let git_dir = wc_path.join(".git");
|
||||
|
@ -363,7 +370,7 @@ jj init --git-repo=.",
|
|||
let mut tx = workspace_command.start_transaction("resolve concurrent operations");
|
||||
for other_op_head in op_heads.into_iter().skip(1) {
|
||||
tx.merge_operation(other_op_head);
|
||||
let num_rebased = tx.mut_repo().rebase_descendants(ui.settings())?;
|
||||
let num_rebased = tx.mut_repo().rebase_descendants(&self.settings)?;
|
||||
if num_rebased > 0 {
|
||||
writeln!(
|
||||
ui,
|
||||
|
@ -393,6 +400,7 @@ jj init --git-repo=.",
|
|||
self.cwd.clone(),
|
||||
self.string_args.clone(),
|
||||
&self.global_args,
|
||||
self.settings.clone(),
|
||||
repo,
|
||||
)
|
||||
}
|
||||
|
@ -419,9 +427,9 @@ impl WorkspaceCommandHelper {
|
|||
cwd: PathBuf,
|
||||
string_args: Vec<String>,
|
||||
global_args: &GlobalArgs,
|
||||
settings: UserSettings,
|
||||
repo: Arc<ReadonlyRepo>,
|
||||
) -> Result<Self, CommandError> {
|
||||
let settings = ui.settings().clone();
|
||||
let revset_aliases_map = load_revset_aliases(ui, &settings)?;
|
||||
let loaded_at_head = &global_args.at_operation == "@";
|
||||
let may_update_working_copy = loaded_at_head && !global_args.no_commit_working_copy;
|
||||
|
@ -509,7 +517,7 @@ impl WorkspaceCommandHelper {
|
|||
self.repo = tx.commit();
|
||||
locked_working_copy.finish(self.repo.op_id().clone());
|
||||
} else {
|
||||
let num_rebased = tx.mut_repo().rebase_descendants(ui.settings())?;
|
||||
let num_rebased = tx.mut_repo().rebase_descendants(&self.settings)?;
|
||||
if num_rebased > 0 {
|
||||
writeln!(
|
||||
ui,
|
||||
|
@ -938,7 +946,7 @@ impl WorkspaceCommandHelper {
|
|||
writeln!(ui, "Nothing changed.")?;
|
||||
return Ok(());
|
||||
}
|
||||
let num_rebased = mut_repo.rebase_descendants(ui.settings())?;
|
||||
let num_rebased = mut_repo.rebase_descendants(&self.settings)?;
|
||||
if num_rebased > 0 {
|
||||
writeln!(ui, "Rebased {num_rebased} descendant commits")?;
|
||||
}
|
||||
|
@ -968,7 +976,7 @@ impl WorkspaceCommandHelper {
|
|||
print_checkout_stats(ui, stats)?;
|
||||
}
|
||||
}
|
||||
let settings = ui.settings();
|
||||
let settings = &self.settings;
|
||||
if settings.user_name() == UserSettings::user_name_placeholder()
|
||||
|| settings.user_email() == UserSettings::user_email_placeholder()
|
||||
{
|
||||
|
@ -1615,7 +1623,7 @@ fn handle_early_args(
|
|||
}
|
||||
if !args.config_toml.is_empty() {
|
||||
settings.incorporate_toml_strings(&args.config_toml)?;
|
||||
ui.reset(settings.clone()); // TODO: disown UserSettings from Ui
|
||||
ui.reset(settings);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
@ -1776,7 +1784,7 @@ impl CliRunner {
|
|||
pub fn run(self, ui: &mut Ui) -> Result<(), CommandError> {
|
||||
let cwd = env::current_dir().unwrap(); // TODO: maybe map_err to CommandError?
|
||||
let mut settings = crate::config::read_config()?;
|
||||
ui.reset(settings.clone()); // TODO: disown UserSettings from Ui
|
||||
ui.reset(&settings);
|
||||
let string_args = expand_args(&self.app, std::env::args_os(), &settings)?;
|
||||
let (matches, args) = parse_args(
|
||||
ui,
|
||||
|
@ -1791,6 +1799,7 @@ impl CliRunner {
|
|||
cwd,
|
||||
string_args,
|
||||
args.global_args,
|
||||
settings,
|
||||
self.store_factories.unwrap_or_default(),
|
||||
);
|
||||
(self.dispatch_fn)(ui, &command_helper, &matches)
|
||||
|
|
181
src/commands.rs
181
src/commands.rs
|
@ -1157,7 +1157,7 @@ fn cmd_init(ui: &mut Ui, command: &CommandHelper, args: &InitArgs) -> Result<(),
|
|||
.join(relative_path);
|
||||
}
|
||||
let (workspace, repo) =
|
||||
Workspace::init_external_git(ui.settings(), &wc_path, &git_store_path)?;
|
||||
Workspace::init_external_git(command.settings(), &wc_path, &git_store_path)?;
|
||||
let git_repo = repo.store().git_repo().unwrap();
|
||||
let mut workspace_command = command.for_loaded_repo(ui, workspace, repo)?;
|
||||
workspace_command.snapshot(ui)?;
|
||||
|
@ -1170,7 +1170,7 @@ fn cmd_init(ui: &mut Ui, command: &CommandHelper, args: &InitArgs) -> Result<(),
|
|||
let git_head_commit = tx.mut_repo().store().get_commit(&git_head_id)?;
|
||||
tx.mut_repo().check_out(
|
||||
workspace_command.workspace_id(),
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
&git_head_commit,
|
||||
)?;
|
||||
}
|
||||
|
@ -1179,16 +1179,16 @@ fn cmd_init(ui: &mut Ui, command: &CommandHelper, args: &InitArgs) -> Result<(),
|
|||
}
|
||||
}
|
||||
} else if args.git {
|
||||
Workspace::init_internal_git(ui.settings(), &wc_path)?;
|
||||
Workspace::init_internal_git(command.settings(), &wc_path)?;
|
||||
} else {
|
||||
if !ui.settings().allow_native_backend() {
|
||||
if !command.settings().allow_native_backend() {
|
||||
return Err(user_error_with_hint(
|
||||
"The native backend is disallowed by default.",
|
||||
"Did you mean to pass `--git`?
|
||||
Set `ui.allow-init-native` to allow initializing a repo with the native backend.",
|
||||
));
|
||||
}
|
||||
Workspace::init_local(ui.settings(), &wc_path)?;
|
||||
Workspace::init_local(command.settings(), &wc_path)?;
|
||||
};
|
||||
let cwd = command.cwd().canonicalize().unwrap();
|
||||
let relative_wc_path = file_util::relative_path(&cwd, &wc_path);
|
||||
|
@ -1206,25 +1206,24 @@ Set `ui.allow-init-native` to allow initializing a repo with the native backend.
|
|||
|
||||
fn cmd_config(
|
||||
ui: &mut Ui,
|
||||
_command: &CommandHelper,
|
||||
command: &CommandHelper,
|
||||
subcommand: &ConfigSubcommand,
|
||||
) -> Result<(), CommandError> {
|
||||
ui.request_pager();
|
||||
match subcommand {
|
||||
ConfigSubcommand::List { name } => {
|
||||
let raw_values = match name {
|
||||
Some(name) => {
|
||||
ui.settings()
|
||||
.config()
|
||||
.get::<config::Value>(name)
|
||||
.map_err(|e| match e {
|
||||
config::ConfigError::NotFound { .. } => {
|
||||
user_error("key not found in config")
|
||||
}
|
||||
_ => e.into(),
|
||||
})?
|
||||
}
|
||||
None => ui.settings().config().collect()?.into(),
|
||||
Some(name) => command
|
||||
.settings()
|
||||
.config()
|
||||
.get::<config::Value>(name)
|
||||
.map_err(|e| match e {
|
||||
config::ConfigError::NotFound { .. } => {
|
||||
user_error("key not found in config")
|
||||
}
|
||||
_ => e.into(),
|
||||
})?,
|
||||
None => command.settings().config().collect()?.into(),
|
||||
};
|
||||
write_config_entry(ui, name.as_deref().unwrap_or(""), raw_values)?;
|
||||
}
|
||||
|
@ -1246,7 +1245,7 @@ fn cmd_checkout(
|
|||
let commit_builder = tx
|
||||
.mut_repo()
|
||||
.new_commit(
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
vec![target.id().clone()],
|
||||
target.tree_id().clone(),
|
||||
)
|
||||
|
@ -1309,10 +1308,10 @@ Make sure they're ignored, then try again.",
|
|||
}
|
||||
}
|
||||
tx.mut_repo()
|
||||
.rewrite_commit(ui.settings(), &wc_commit)
|
||||
.rewrite_commit(command.settings(), &wc_commit)
|
||||
.set_tree(new_tree_id)
|
||||
.write()?;
|
||||
let num_rebased = tx.mut_repo().rebase_descendants(ui.settings())?;
|
||||
let num_rebased = tx.mut_repo().rebase_descendants(command.settings())?;
|
||||
if num_rebased > 0 {
|
||||
writeln!(ui, "Rebased {num_rebased} descendant commits")?;
|
||||
}
|
||||
|
@ -1384,7 +1383,7 @@ fn cmd_diff(ui: &mut Ui, command: &CommandHelper, args: &DiffArgs) -> Result<(),
|
|||
&from_tree,
|
||||
&to_tree,
|
||||
matcher.as_ref(),
|
||||
&diff_util::diff_formats_for(ui.settings(), &args.format),
|
||||
&diff_util::diff_formats_for(command.settings(), &args.format),
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
@ -1395,7 +1394,7 @@ fn cmd_show(ui: &mut Ui, command: &CommandHelper, args: &ShowArgs) -> Result<(),
|
|||
// TODO: Add branches, tags, etc
|
||||
// TODO: Indent the description like Git does
|
||||
let (author_timestamp_template, committer_timestamp_template) =
|
||||
if ui.settings().relative_timestamps() {
|
||||
if command.settings().relative_timestamps() {
|
||||
("author.timestamp().ago()", "committer.timestamp().ago()")
|
||||
} else {
|
||||
("author.timestamp()", "committer.timestamp()")
|
||||
|
@ -1424,7 +1423,7 @@ fn cmd_show(ui: &mut Ui, command: &CommandHelper, args: &ShowArgs) -> Result<(),
|
|||
&workspace_command,
|
||||
&commit,
|
||||
&EverythingMatcher,
|
||||
&diff_util::diff_formats_for(ui.settings(), &args.format),
|
||||
&diff_util::diff_formats_for(command.settings(), &args.format),
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
@ -1454,7 +1453,7 @@ fn cmd_status(
|
|||
repo.as_repo_ref(),
|
||||
&workspace_id,
|
||||
&parent,
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
)?;
|
||||
formatter.write_str("\n")?;
|
||||
}
|
||||
|
@ -1464,7 +1463,7 @@ fn cmd_status(
|
|||
repo.as_repo_ref(),
|
||||
&workspace_id,
|
||||
wc_commit,
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
)?;
|
||||
formatter.write_str("\n")?;
|
||||
} else {
|
||||
|
@ -1579,7 +1578,7 @@ fn log_template(settings: &UserSettings) -> String {
|
|||
fn cmd_log(ui: &mut Ui, command: &CommandHelper, args: &LogArgs) -> Result<(), CommandError> {
|
||||
let workspace_command = command.workspace_helper(ui)?;
|
||||
|
||||
let default_revset = ui.settings().default_revset();
|
||||
let default_revset = command.settings().default_revset();
|
||||
let revset_expression =
|
||||
workspace_command.parse_revset(args.revisions.as_deref().unwrap_or(&default_revset))?;
|
||||
let repo = workspace_command.repo();
|
||||
|
@ -1595,11 +1594,11 @@ fn cmd_log(ui: &mut Ui, command: &CommandHelper, args: &LogArgs) -> Result<(), C
|
|||
|
||||
let store = repo.store();
|
||||
let diff_formats =
|
||||
diff_util::diff_formats_for_log(ui.settings(), &args.diff_format, args.patch);
|
||||
diff_util::diff_formats_for_log(command.settings(), &args.diff_format, args.patch);
|
||||
|
||||
let template_string = match &args.template {
|
||||
Some(value) => value.to_string(),
|
||||
None => log_template(ui.settings()),
|
||||
None => log_template(command.settings()),
|
||||
};
|
||||
let template = crate::template_parser::parse_commit_template(
|
||||
repo.as_repo_ref(),
|
||||
|
@ -1736,11 +1735,11 @@ fn cmd_obslog(ui: &mut Ui, command: &CommandHelper, args: &ObslogArgs) -> Result
|
|||
.get_wc_commit_id(&workspace_id);
|
||||
|
||||
let diff_formats =
|
||||
diff_util::diff_formats_for_log(ui.settings(), &args.diff_format, args.patch);
|
||||
diff_util::diff_formats_for_log(command.settings(), &args.diff_format, args.patch);
|
||||
|
||||
let template_string = match &args.template {
|
||||
Some(value) => value.to_string(),
|
||||
None => log_template(ui.settings()),
|
||||
None => log_template(command.settings()),
|
||||
};
|
||||
let template = crate::template_parser::parse_commit_template(
|
||||
workspace_command.repo().as_repo_ref(),
|
||||
|
@ -1841,7 +1840,7 @@ fn cmd_interdiff(
|
|||
&from_tree,
|
||||
&to.tree(),
|
||||
matcher.as_ref(),
|
||||
&diff_util::diff_formats_for(ui.settings(), &args.format),
|
||||
&diff_util::diff_formats_for(command.settings(), &args.format),
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -1944,7 +1943,7 @@ fn cmd_describe(
|
|||
message.into()
|
||||
} else {
|
||||
let template = description_template_for_commit(&workspace_command, &commit)?;
|
||||
edit_description(workspace_command.repo(), &template, ui.settings())?
|
||||
edit_description(workspace_command.repo(), &template, command.settings())?
|
||||
};
|
||||
if description == *commit.description() {
|
||||
ui.write("Nothing changed.\n")?;
|
||||
|
@ -1952,7 +1951,7 @@ fn cmd_describe(
|
|||
let mut tx =
|
||||
workspace_command.start_transaction(&format!("describe commit {}", commit.id().hex()));
|
||||
tx.mut_repo()
|
||||
.rewrite_commit(ui.settings(), &commit)
|
||||
.rewrite_commit(command.settings(), &commit)
|
||||
.set_description(description)
|
||||
.write()?;
|
||||
workspace_command.finish_transaction(ui, tx)?;
|
||||
|
@ -1971,12 +1970,12 @@ fn cmd_commit(ui: &mut Ui, command: &CommandHelper, args: &CommitArgs) -> Result
|
|||
let commit = workspace_command.repo().store().get_commit(commit_id)?;
|
||||
|
||||
let mut tx = workspace_command.start_transaction(&format!("commit {}", commit.id().hex()));
|
||||
let mut commit_builder = tx.mut_repo().rewrite_commit(ui.settings(), &commit);
|
||||
let mut commit_builder = tx.mut_repo().rewrite_commit(command.settings(), &commit);
|
||||
let description = if let Some(message) = &args.message {
|
||||
message.into()
|
||||
} else {
|
||||
let template = description_template_for_commit(&workspace_command, &commit)?;
|
||||
edit_description(workspace_command.repo(), &template, ui.settings())?
|
||||
edit_description(workspace_command.repo(), &template, command.settings())?
|
||||
};
|
||||
commit_builder = commit_builder.set_description(description);
|
||||
let new_commit = commit_builder.write()?;
|
||||
|
@ -1988,7 +1987,7 @@ fn cmd_commit(ui: &mut Ui, command: &CommandHelper, args: &CommitArgs) -> Result
|
|||
let new_checkout = tx
|
||||
.mut_repo()
|
||||
.new_commit(
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
vec![new_commit.id().clone()],
|
||||
new_commit.tree_id().clone(),
|
||||
)
|
||||
|
@ -2012,7 +2011,7 @@ fn cmd_duplicate(
|
|||
.start_transaction(&format!("duplicate commit {}", predecessor.id().hex()));
|
||||
let mut_repo = tx.mut_repo();
|
||||
let new_commit = mut_repo
|
||||
.rewrite_commit(ui.settings(), &predecessor)
|
||||
.rewrite_commit(command.settings(), &predecessor)
|
||||
.generate_new_change_id()
|
||||
.write()?;
|
||||
ui.write("Created: ")?;
|
||||
|
@ -2021,7 +2020,7 @@ fn cmd_duplicate(
|
|||
mut_repo.as_repo_ref(),
|
||||
&workspace_command.workspace_id(),
|
||||
&new_commit,
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
)?;
|
||||
ui.write("\n")?;
|
||||
workspace_command.finish_transaction(ui, tx)?;
|
||||
|
@ -2059,7 +2058,7 @@ fn cmd_abandon(
|
|||
for commit in to_abandon {
|
||||
tx.mut_repo().record_abandoned_commit(commit.id().clone());
|
||||
}
|
||||
let num_rebased = tx.mut_repo().rebase_descendants(ui.settings())?;
|
||||
let num_rebased = tx.mut_repo().rebase_descendants(command.settings())?;
|
||||
if num_rebased > 0 {
|
||||
writeln!(
|
||||
ui,
|
||||
|
@ -2102,7 +2101,7 @@ fn cmd_new(ui: &mut Ui, command: &CommandHelper, args: &NewArgs) -> Result<(), C
|
|||
let merged_tree = merge_commit_trees(workspace_command.repo().as_repo_ref(), &commits);
|
||||
let new_commit = tx
|
||||
.mut_repo()
|
||||
.new_commit(ui.settings(), parent_ids, merged_tree.id().clone())
|
||||
.new_commit(command.settings(), parent_ids, merged_tree.id().clone())
|
||||
.set_description(&args.message)
|
||||
.write()?;
|
||||
let workspace_id = workspace_command.workspace_id();
|
||||
|
@ -2194,7 +2193,7 @@ from the source will be moved into the destination.
|
|||
mut_repo.record_abandoned_commit(source.id().clone());
|
||||
} else {
|
||||
mut_repo
|
||||
.rewrite_commit(ui.settings(), &source)
|
||||
.rewrite_commit(command.settings(), &source)
|
||||
.set_tree(new_source_tree_id)
|
||||
.write()?;
|
||||
}
|
||||
|
@ -2203,7 +2202,7 @@ from the source will be moved into the destination.
|
|||
// rewritten source. Otherwise it will likely already have the content
|
||||
// changes we're moving, so applying them will have no effect and the
|
||||
// changes will disappear.
|
||||
let mut rebaser = mut_repo.create_descendant_rebaser(ui.settings());
|
||||
let mut rebaser = mut_repo.create_descendant_rebaser(command.settings());
|
||||
rebaser.rebase_all()?;
|
||||
let rebased_destination_id = rebaser.rebased().get(destination.id()).unwrap().clone();
|
||||
destination = mut_repo.store().get_commit(&rebased_destination_id)?;
|
||||
|
@ -2214,11 +2213,11 @@ from the source will be moved into the destination.
|
|||
workspace_command.repo(),
|
||||
&source,
|
||||
&destination,
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
abandon_source,
|
||||
)?;
|
||||
mut_repo
|
||||
.rewrite_commit(ui.settings(), &destination)
|
||||
.rewrite_commit(command.settings(), &destination)
|
||||
.set_tree(new_destination_tree_id)
|
||||
.set_description(description)
|
||||
.write()?;
|
||||
|
@ -2274,11 +2273,11 @@ from the source will be moved into the parent.
|
|||
workspace_command.repo(),
|
||||
&commit,
|
||||
parent,
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
abandon_child,
|
||||
)?;
|
||||
let new_parent = mut_repo
|
||||
.rewrite_commit(ui.settings(), parent)
|
||||
.rewrite_commit(command.settings(), parent)
|
||||
.set_tree(new_parent_tree_id)
|
||||
.set_predecessors(vec![parent.id().clone(), commit.id().clone()])
|
||||
.set_description(description)
|
||||
|
@ -2288,7 +2287,7 @@ from the source will be moved into the parent.
|
|||
} else {
|
||||
// Commit the remainder on top of the new parent commit.
|
||||
mut_repo
|
||||
.rewrite_commit(ui.settings(), &commit)
|
||||
.rewrite_commit(command.settings(), &commit)
|
||||
.set_parents(vec![new_parent.id().clone()])
|
||||
.write()?;
|
||||
}
|
||||
|
@ -2347,25 +2346,25 @@ aborted.
|
|||
workspace_command.repo(),
|
||||
parent,
|
||||
&commit,
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
true,
|
||||
)?;
|
||||
// Commit the new child on top of the parent's parents.
|
||||
tx.mut_repo()
|
||||
.rewrite_commit(ui.settings(), &commit)
|
||||
.rewrite_commit(command.settings(), &commit)
|
||||
.set_parents(parent.parent_ids().to_vec())
|
||||
.set_description(description)
|
||||
.write()?;
|
||||
} else {
|
||||
let new_parent = tx
|
||||
.mut_repo()
|
||||
.rewrite_commit(ui.settings(), parent)
|
||||
.rewrite_commit(command.settings(), parent)
|
||||
.set_tree(new_parent_tree_id)
|
||||
.set_predecessors(vec![parent.id().clone(), commit.id().clone()])
|
||||
.write()?;
|
||||
// Commit the new child on top of the new parent.
|
||||
tx.mut_repo()
|
||||
.rewrite_commit(ui.settings(), &commit)
|
||||
.rewrite_commit(command.settings(), &commit)
|
||||
.set_parents(vec![new_parent.id().clone()])
|
||||
.write()?;
|
||||
}
|
||||
|
@ -2421,7 +2420,7 @@ fn cmd_resolve(
|
|||
));
|
||||
let new_tree_id = workspace_command.run_mergetool(ui, &commit.tree(), repo_path)?;
|
||||
tx.mut_repo()
|
||||
.rewrite_commit(ui.settings(), &commit)
|
||||
.rewrite_commit(command.settings(), &commit)
|
||||
.set_tree(new_tree_id)
|
||||
.write()?;
|
||||
workspace_command.finish_transaction(ui, tx)
|
||||
|
@ -2469,7 +2468,7 @@ fn cmd_restore(
|
|||
.start_transaction(&format!("restore into commit {}", to_commit.id().hex()));
|
||||
let mut_repo = tx.mut_repo();
|
||||
let new_commit = mut_repo
|
||||
.rewrite_commit(ui.settings(), &to_commit)
|
||||
.rewrite_commit(command.settings(), &to_commit)
|
||||
.set_tree(tree_id)
|
||||
.write()?;
|
||||
ui.write("Created ")?;
|
||||
|
@ -2478,7 +2477,7 @@ fn cmd_restore(
|
|||
mut_repo.as_repo_ref(),
|
||||
&workspace_command.workspace_id(),
|
||||
&new_commit,
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
)?;
|
||||
ui.write("\n")?;
|
||||
workspace_command.finish_transaction(ui, tx)?;
|
||||
|
@ -2533,7 +2532,7 @@ don't make any changes, then the operation will be aborted.",
|
|||
.start_transaction(&format!("edit commit {}", target_commit.id().hex()));
|
||||
let mut_repo = tx.mut_repo();
|
||||
let new_commit = mut_repo
|
||||
.rewrite_commit(ui.settings(), &target_commit)
|
||||
.rewrite_commit(command.settings(), &target_commit)
|
||||
.set_tree(tree_id)
|
||||
.write()?;
|
||||
ui.write("Created ")?;
|
||||
|
@ -2542,7 +2541,7 @@ don't make any changes, then the operation will be aborted.",
|
|||
mut_repo.as_repo_ref(),
|
||||
&workspace_command.workspace_id(),
|
||||
&new_commit,
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
)?;
|
||||
ui.write("\n")?;
|
||||
workspace_command.finish_transaction(ui, tx)?;
|
||||
|
@ -2643,10 +2642,11 @@ don't make any changes, then the operation will be aborted.
|
|||
&base_tree,
|
||||
&middle_tree,
|
||||
)?;
|
||||
let first_description = edit_description(tx.base_repo(), &first_template, ui.settings())?;
|
||||
let first_description =
|
||||
edit_description(tx.base_repo(), &first_template, command.settings())?;
|
||||
let first_commit = tx
|
||||
.mut_repo()
|
||||
.rewrite_commit(ui.settings(), &commit)
|
||||
.rewrite_commit(command.settings(), &commit)
|
||||
.set_tree(tree_id)
|
||||
.set_description(first_description)
|
||||
.write()?;
|
||||
|
@ -2657,17 +2657,18 @@ don't make any changes, then the operation will be aborted.
|
|||
&middle_tree,
|
||||
&commit.tree(),
|
||||
)?;
|
||||
let second_description = edit_description(tx.base_repo(), &second_template, ui.settings())?;
|
||||
let second_description =
|
||||
edit_description(tx.base_repo(), &second_template, command.settings())?;
|
||||
let second_commit = tx
|
||||
.mut_repo()
|
||||
.rewrite_commit(ui.settings(), &commit)
|
||||
.rewrite_commit(command.settings(), &commit)
|
||||
.set_parents(vec![first_commit.id().clone()])
|
||||
.set_tree(commit.tree_id().clone())
|
||||
.generate_new_change_id()
|
||||
.set_description(second_description)
|
||||
.write()?;
|
||||
let mut rebaser = DescendantRebaser::new(
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
tx.mut_repo(),
|
||||
hashmap! { commit.id().clone() => hashset!{second_commit.id().clone()} },
|
||||
hashset! {},
|
||||
|
@ -2683,7 +2684,7 @@ don't make any changes, then the operation will be aborted.
|
|||
tx.repo().as_repo_ref(),
|
||||
&workspace_command.workspace_id(),
|
||||
&first_commit,
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
)?;
|
||||
ui.write("\nSecond part: ")?;
|
||||
write_commit_summary(
|
||||
|
@ -2691,7 +2692,7 @@ don't make any changes, then the operation will be aborted.
|
|||
tx.repo().as_repo_ref(),
|
||||
&workspace_command.workspace_id(),
|
||||
&second_commit,
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
)?;
|
||||
ui.write("\n")?;
|
||||
workspace_command.finish_transaction(ui, tx)?;
|
||||
|
@ -2736,7 +2737,7 @@ fn cmd_rebase(ui: &mut Ui, command: &CommandHelper, args: &RebaseArgs) -> Result
|
|||
|
||||
fn rebase_branch(
|
||||
ui: &mut Ui,
|
||||
_command: &CommandHelper,
|
||||
command: &CommandHelper,
|
||||
workspace_command: &mut WorkspaceCommandHelper,
|
||||
new_parents: &[Commit],
|
||||
branch_str: &str,
|
||||
|
@ -2763,10 +2764,10 @@ fn rebase_branch(
|
|||
{
|
||||
let root_commit = root_result?;
|
||||
workspace_command.check_rewriteable(&root_commit)?;
|
||||
rebase_commit(ui.settings(), tx.mut_repo(), &root_commit, new_parents)?;
|
||||
rebase_commit(command.settings(), tx.mut_repo(), &root_commit, new_parents)?;
|
||||
num_rebased += 1;
|
||||
}
|
||||
num_rebased += tx.mut_repo().rebase_descendants(ui.settings())?;
|
||||
num_rebased += tx.mut_repo().rebase_descendants(command.settings())?;
|
||||
writeln!(ui, "Rebased {num_rebased} commits")?;
|
||||
workspace_command.finish_transaction(ui, tx)?;
|
||||
Ok(())
|
||||
|
@ -2774,7 +2775,7 @@ fn rebase_branch(
|
|||
|
||||
fn rebase_descendants(
|
||||
ui: &mut Ui,
|
||||
_command: &CommandHelper,
|
||||
command: &CommandHelper,
|
||||
workspace_command: &mut WorkspaceCommandHelper,
|
||||
new_parents: &[Commit],
|
||||
source_str: &str,
|
||||
|
@ -2786,8 +2787,8 @@ fn rebase_descendants(
|
|||
"rebase commit {} and descendants",
|
||||
old_commit.id().hex()
|
||||
));
|
||||
rebase_commit(ui.settings(), tx.mut_repo(), &old_commit, new_parents)?;
|
||||
let num_rebased = tx.mut_repo().rebase_descendants(ui.settings())? + 1;
|
||||
rebase_commit(command.settings(), tx.mut_repo(), &old_commit, new_parents)?;
|
||||
let num_rebased = tx.mut_repo().rebase_descendants(command.settings())? + 1;
|
||||
writeln!(ui, "Rebased {num_rebased} commits")?;
|
||||
workspace_command.finish_transaction(ui, tx)?;
|
||||
Ok(())
|
||||
|
@ -2795,7 +2796,7 @@ fn rebase_descendants(
|
|||
|
||||
fn rebase_revision(
|
||||
ui: &mut Ui,
|
||||
_command: &CommandHelper,
|
||||
command: &CommandHelper,
|
||||
workspace_command: &mut WorkspaceCommandHelper,
|
||||
new_parents: &[Commit],
|
||||
rev_str: &str,
|
||||
|
@ -2805,7 +2806,7 @@ fn rebase_revision(
|
|||
check_rebase_destinations(workspace_command, new_parents, &old_commit)?;
|
||||
let mut tx =
|
||||
workspace_command.start_transaction(&format!("rebase commit {}", old_commit.id().hex()));
|
||||
rebase_commit(ui.settings(), tx.mut_repo(), &old_commit, new_parents)?;
|
||||
rebase_commit(command.settings(), tx.mut_repo(), &old_commit, new_parents)?;
|
||||
// Manually rebase children because we don't want to rebase them onto the
|
||||
// rewritten commit. (But we still want to record the commit as rewritten so
|
||||
// branches and the working copy get updated to the rewritten commit.)
|
||||
|
@ -2852,14 +2853,14 @@ fn rebase_revision(
|
|||
.try_collect()?;
|
||||
|
||||
rebase_commit(
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
tx.mut_repo(),
|
||||
&child_commit,
|
||||
&new_child_parents,
|
||||
)?;
|
||||
num_rebased_descendants += 1;
|
||||
}
|
||||
num_rebased_descendants += tx.mut_repo().rebase_descendants(ui.settings())?;
|
||||
num_rebased_descendants += tx.mut_repo().rebase_descendants(command.settings())?;
|
||||
if num_rebased_descendants > 0 {
|
||||
writeln!(
|
||||
ui,
|
||||
|
@ -2908,7 +2909,12 @@ fn cmd_backout(
|
|||
"back out commit {}",
|
||||
commit_to_back_out.id().hex()
|
||||
));
|
||||
back_out_commit(ui.settings(), tx.mut_repo(), &commit_to_back_out, &parents)?;
|
||||
back_out_commit(
|
||||
command.settings(),
|
||||
tx.mut_repo(),
|
||||
&commit_to_back_out,
|
||||
&parents,
|
||||
)?;
|
||||
workspace_command.finish_transaction(ui, tx)?;
|
||||
|
||||
Ok(())
|
||||
|
@ -3081,7 +3087,7 @@ fn cmd_branch(
|
|||
|
||||
fn list_branches(
|
||||
ui: &mut Ui,
|
||||
_command: &CommandHelper,
|
||||
command: &CommandHelper,
|
||||
workspace_command: &WorkspaceCommandHelper,
|
||||
) -> Result<(), CommandError> {
|
||||
let repo = workspace_command.repo();
|
||||
|
@ -3099,7 +3105,7 @@ fn list_branches(
|
|||
repo.as_repo_ref(),
|
||||
&workspace_id,
|
||||
&commit,
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
)?;
|
||||
writeln!(formatter)?;
|
||||
}
|
||||
|
@ -3115,7 +3121,7 @@ fn list_branches(
|
|||
repo.as_repo_ref(),
|
||||
&workspace_id,
|
||||
&commit,
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
)?;
|
||||
writeln!(formatter)?;
|
||||
}
|
||||
|
@ -3127,7 +3133,7 @@ fn list_branches(
|
|||
repo.as_repo_ref(),
|
||||
&workspace_id,
|
||||
&commit,
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
)?;
|
||||
writeln!(formatter)?;
|
||||
}
|
||||
|
@ -3470,7 +3476,7 @@ fn cmd_workspace_add(
|
|||
)));
|
||||
}
|
||||
let (new_workspace, repo) = Workspace::init_workspace_with_existing_repo(
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
&destination_path,
|
||||
repo,
|
||||
workspace_id,
|
||||
|
@ -3488,6 +3494,7 @@ fn cmd_workspace_add(
|
|||
command.cwd().to_owned(),
|
||||
command.string_args().clone(),
|
||||
command.global_args(),
|
||||
command.settings().clone(),
|
||||
repo,
|
||||
)?;
|
||||
let mut tx = new_workspace_command.start_transaction(&format!(
|
||||
|
@ -3512,7 +3519,7 @@ fn cmd_workspace_add(
|
|||
};
|
||||
tx.mut_repo().check_out(
|
||||
new_workspace_command.workspace_id(),
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
&new_wc_commit,
|
||||
)?;
|
||||
new_workspace_command.finish_transaction(ui, tx)?;
|
||||
|
@ -3562,7 +3569,7 @@ fn cmd_workspace_list(
|
|||
repo.as_repo_ref(),
|
||||
workspace_id,
|
||||
&commit,
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
)?;
|
||||
writeln!(ui)?;
|
||||
}
|
||||
|
@ -3574,7 +3581,7 @@ fn cmd_workspace_update_stale(
|
|||
command: &CommandHelper,
|
||||
_args: &WorkspaceUpdateStaleArgs,
|
||||
) -> Result<(), CommandError> {
|
||||
let workspace = command.load_workspace(ui)?;
|
||||
let workspace = command.load_workspace()?;
|
||||
let mut workspace_command = command.resolve_operation(ui, workspace)?;
|
||||
let repo = workspace_command.repo().clone();
|
||||
let workspace_id = workspace_command.workspace_id();
|
||||
|
@ -3603,7 +3610,7 @@ fn cmd_workspace_update_stale(
|
|||
repo.as_repo_ref(),
|
||||
&workspace_id,
|
||||
&desired_wc_commit,
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
)?;
|
||||
ui.write("\n")?;
|
||||
print_checkout_stats(ui, stats)?;
|
||||
|
@ -3861,7 +3868,7 @@ fn cmd_git_clone(
|
|||
if let Ok(commit) = workspace_command.repo().store().get_commit(&commit_id) {
|
||||
checkout_tx.mut_repo().check_out(
|
||||
workspace_command.workspace_id(),
|
||||
ui.settings(),
|
||||
command.settings(),
|
||||
&commit,
|
||||
)?;
|
||||
}
|
||||
|
@ -3877,7 +3884,7 @@ fn do_git_clone(
|
|||
source: &str,
|
||||
wc_path: &Path,
|
||||
) -> Result<(WorkspaceCommandHelper, Option<String>), CommandError> {
|
||||
let (workspace, repo) = Workspace::init_internal_git(ui.settings(), wc_path)?;
|
||||
let (workspace, repo) = Workspace::init_internal_git(command.settings(), wc_path)?;
|
||||
let git_repo = get_git_repo(repo.store())?;
|
||||
writeln!(ui, r#"Fetching into new repo in "{}""#, wc_path.display())?;
|
||||
let mut workspace_command = command.for_loaded_repo(ui, workspace, repo)?;
|
||||
|
@ -4079,7 +4086,7 @@ fn cmd_git_push(
|
|||
for (change_str, commit) in std::iter::zip(args.change.iter(), commits) {
|
||||
let branch_name = format!(
|
||||
"{}{}",
|
||||
ui.settings().push_branch_prefix(),
|
||||
command.settings().push_branch_prefix(),
|
||||
commit.change_id().hex()
|
||||
);
|
||||
if !seen_branches.insert(branch_name.clone()) {
|
||||
|
|
18
src/ui.rs
18
src/ui.rs
|
@ -30,7 +30,6 @@ pub struct Ui {
|
|||
progress_indicator: bool,
|
||||
formatter_factory: FormatterFactory,
|
||||
output: UiOutput,
|
||||
settings: UserSettings,
|
||||
}
|
||||
|
||||
fn progress_indicator_setting(settings: &UserSettings) -> bool {
|
||||
|
@ -132,17 +131,14 @@ impl Ui {
|
|||
paginate: PaginationChoice::Auto,
|
||||
progress_indicator,
|
||||
output: UiOutput::new_terminal(),
|
||||
settings,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn reset(&mut self, settings: UserSettings) {
|
||||
// TODO: maybe Ui shouldn't take ownership of UserSettings
|
||||
self.color = use_color(color_setting(&settings));
|
||||
self.pager_cmd = pager_setting(&settings);
|
||||
self.progress_indicator = progress_indicator_setting(&settings);
|
||||
self.formatter_factory = FormatterFactory::prepare(&settings, self.color);
|
||||
self.settings = settings;
|
||||
pub fn reset(&mut self, settings: &UserSettings) {
|
||||
self.color = use_color(color_setting(settings));
|
||||
self.pager_cmd = pager_setting(settings);
|
||||
self.progress_indicator = progress_indicator_setting(settings);
|
||||
self.formatter_factory = FormatterFactory::prepare(settings, self.color);
|
||||
}
|
||||
|
||||
/// Sets the pagination value.
|
||||
|
@ -179,10 +175,6 @@ impl Ui {
|
|||
self.color
|
||||
}
|
||||
|
||||
pub fn settings(&self) -> &UserSettings {
|
||||
&self.settings
|
||||
}
|
||||
|
||||
pub fn new_formatter<'output, W: Write + 'output>(
|
||||
&self,
|
||||
output: W,
|
||||
|
|
Loading…
Reference in a new issue