Skip to content

Commit

Permalink
cli: add better error message when immutable_heads() cannot be resolved
Browse files Browse the repository at this point in the history
  • Loading branch information
noahmayr committed Apr 1, 2024
1 parent 320f50e commit 99a3191
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 4 deletions.
21 changes: 18 additions & 3 deletions cli/src/cli_util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ use jj_lib::repo::{
use jj_lib::repo_path::{FsPathParseError, RepoPath, RepoPathBuf};
use jj_lib::revset::{
RevsetAliasesMap, RevsetCommitRef, RevsetExpression, RevsetFilterPredicate, RevsetIteratorExt,
RevsetParseContext, RevsetWorkspaceContext,
RevsetParseContext, RevsetResolutionError, RevsetWorkspaceContext,
};
use jj_lib::rewrite::restore_tree;
use jj_lib::settings::{ConfigResultExt as _, UserSettings};
Expand Down Expand Up @@ -88,7 +88,7 @@ use crate::git_util::{
};
use crate::merge_tools::{DiffEditor, MergeEditor, MergeToolConfigError};
use crate::operation_templater::OperationTemplateLanguageExtension;
use crate::revset_util::RevsetExpressionEvaluator;
use crate::revset_util::{RevsetExpressionEvaluator, UserRevsetEvaluationError};
use crate::template_builder::TemplateLanguage;
use crate::template_parser::TemplateAliasesMap;
use crate::templater::{PropertyPlaceholder, TemplateRenderer};
Expand Down Expand Up @@ -1012,7 +1012,22 @@ impl WorkspaceCommandHelper {
let immutable = revset_util::parse_immutable_expression(&self.revset_parse_context())?;
let mut expression = self.attach_revset_evaluator(immutable)?;
expression.intersect_with(&to_rewrite_revset);
if let Some(commit_id) = expression.evaluate_to_commit_ids()?.next() {
if let Some(commit_id) = expression
.evaluate_to_commit_ids()
.map_err(|e| {
let UserRevsetEvaluationError::Resolution(RevsetResolutionError::NoSuchRevision {
name,
candidates: _,
}) = e
else {
return e.into();
};
user_error_with_hint(format!(
r#"The revision "{name}" used in immutable_heads() does not exist"#
), r#"If you configured specific branch names consider wrapping them with "present()" or using the functions "branches()" / "remote_branches()"."#)
})?
.next()
{
let error = if &commit_id == self.repo().store().root_commit_id() {
user_error(format!(
"The root commit {} is immutable",
Expand Down
2 changes: 1 addition & 1 deletion docs/contributing.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ You will probably also want to make the `gh-pages` branch immutable (and thereby
hidden from the default `jj log` output) by running the following in your repo:

```shell
jj config set --repo "revset-aliases.immutable_heads()" "main@origin | gh-pages@origin"
jj config set --repo "revset-aliases.immutable_heads()" 'remote_branches(exact:"main") | remote_branches(exact:"origin")'
```

### Summary
Expand Down

0 comments on commit 99a3191

Please sign in to comment.