mirror of
https://github.com/martinvonz/jj.git
synced 2024-12-27 06:27:43 +00:00
revset: merge AmbiguousChange/CommitIdPrefix error into one
Follows up c5ed3e1477
. Now change/commit ids are resolved at the same
precedence, which means there are at least three types of ambiguity.
I don't think we would need to discriminate these.
This commit is contained in:
parent
c5ed3e1477
commit
e40c041384
2 changed files with 13 additions and 23 deletions
|
@ -45,10 +45,8 @@ use crate::store::Store;
|
|||
pub enum RevsetError {
|
||||
#[error("Revision \"{0}\" doesn't exist")]
|
||||
NoSuchRevision(String),
|
||||
#[error("Commit id prefix \"{0}\" is ambiguous")]
|
||||
AmbiguousCommitIdPrefix(String),
|
||||
#[error("Change id prefix \"{0}\" is ambiguous")]
|
||||
AmbiguousChangeIdPrefix(String),
|
||||
#[error("Commit or change id prefix \"{0}\" is ambiguous")]
|
||||
AmbiguousIdPrefix(String),
|
||||
#[error("Unexpected error from store: {0}")]
|
||||
StoreError(#[from] BackendError),
|
||||
}
|
||||
|
@ -107,7 +105,7 @@ fn resolve_short_commit_id(
|
|||
match repo.index().resolve_prefix(&prefix) {
|
||||
PrefixResolution::NoMatch => Ok(None),
|
||||
PrefixResolution::AmbiguousMatch => {
|
||||
Err(RevsetError::AmbiguousCommitIdPrefix(symbol.to_owned()))
|
||||
Err(RevsetError::AmbiguousIdPrefix(symbol.to_owned()))
|
||||
}
|
||||
PrefixResolution::SingleMatch(commit_id) => Ok(Some(vec![commit_id])),
|
||||
}
|
||||
|
@ -129,9 +127,7 @@ fn resolve_change_id(
|
|||
if change_id.hex().starts_with(hex_prefix.hex()) {
|
||||
if let Some(previous_change_id) = found_change_id.replace(change_id.clone()) {
|
||||
if previous_change_id != change_id {
|
||||
return Err(RevsetError::AmbiguousChangeIdPrefix(
|
||||
change_id_prefix.to_owned(),
|
||||
));
|
||||
return Err(RevsetError::AmbiguousIdPrefix(change_id_prefix.to_owned()));
|
||||
}
|
||||
}
|
||||
commit_ids.push(index_entry.commit_id());
|
||||
|
@ -197,8 +193,7 @@ pub fn resolve_symbol(
|
|||
) {
|
||||
// Likely a root_commit_id, but not limited to it.
|
||||
(Some(ids1), Some(ids2)) if ids1 == ids2 => Ok(ids1),
|
||||
// TODO: maybe unify Ambiguous*IdPrefix error variants?
|
||||
(Some(_), Some(_)) => Err(RevsetError::AmbiguousCommitIdPrefix(symbol.to_owned())),
|
||||
(Some(_), Some(_)) => Err(RevsetError::AmbiguousIdPrefix(symbol.to_owned())),
|
||||
(Some(ids), None) | (None, Some(ids)) => Ok(ids),
|
||||
(None, None) => Err(RevsetError::NoSuchRevision(symbol.to_owned())),
|
||||
}
|
||||
|
@ -1718,11 +1713,7 @@ pub fn evaluate_expression<'repo>(
|
|||
RevsetExpression::Present(candidates) => match candidates.evaluate(repo, workspace_ctx) {
|
||||
Ok(set) => Ok(set),
|
||||
Err(RevsetError::NoSuchRevision(_)) => Ok(Box::new(EagerRevset::empty())),
|
||||
r @ Err(
|
||||
RevsetError::AmbiguousCommitIdPrefix(_)
|
||||
| RevsetError::AmbiguousChangeIdPrefix(_)
|
||||
| RevsetError::StoreError(_),
|
||||
) => r,
|
||||
r @ Err(RevsetError::AmbiguousIdPrefix(_) | RevsetError::StoreError(_)) => r,
|
||||
},
|
||||
RevsetExpression::Union(expression1, expression2) => {
|
||||
let set1 = expression1.evaluate(repo, workspace_ctx)?;
|
||||
|
|
|
@ -106,7 +106,7 @@ fn test_resolve_symbol_commit_id() {
|
|||
// Test empty commit id
|
||||
assert_eq!(
|
||||
resolve_symbol(repo_ref, "", None),
|
||||
Err(RevsetError::AmbiguousCommitIdPrefix("".to_string()))
|
||||
Err(RevsetError::AmbiguousIdPrefix("".to_string()))
|
||||
);
|
||||
|
||||
// Test commit id prefix
|
||||
|
@ -116,11 +116,11 @@ fn test_resolve_symbol_commit_id() {
|
|||
);
|
||||
assert_eq!(
|
||||
resolve_symbol(repo_ref, "04", None),
|
||||
Err(RevsetError::AmbiguousCommitIdPrefix("04".to_string()))
|
||||
Err(RevsetError::AmbiguousIdPrefix("04".to_string()))
|
||||
);
|
||||
assert_eq!(
|
||||
resolve_symbol(repo_ref, "", None),
|
||||
Err(RevsetError::AmbiguousCommitIdPrefix("".to_string()))
|
||||
Err(RevsetError::AmbiguousIdPrefix("".to_string()))
|
||||
);
|
||||
assert_eq!(
|
||||
resolve_symbol(repo_ref, "040", None),
|
||||
|
@ -139,7 +139,7 @@ fn test_resolve_symbol_commit_id() {
|
|||
optimize(parse("present(04)", &RevsetAliasesMap::new(), None).unwrap())
|
||||
.evaluate(repo_ref, None)
|
||||
.map(|_| ()),
|
||||
Err(RevsetError::AmbiguousCommitIdPrefix("04".to_string()))
|
||||
Err(RevsetError::AmbiguousIdPrefix("04".to_string()))
|
||||
);
|
||||
assert_eq!(
|
||||
resolve_commit_ids(repo_ref, "present(046)"),
|
||||
|
@ -247,12 +247,11 @@ fn test_resolve_symbol_change_id() {
|
|||
);
|
||||
assert_eq!(
|
||||
resolve_symbol(repo_ref, "04e1", None),
|
||||
Err(RevsetError::AmbiguousChangeIdPrefix("04e1".to_string()))
|
||||
Err(RevsetError::AmbiguousIdPrefix("04e1".to_string()))
|
||||
);
|
||||
assert_eq!(
|
||||
resolve_symbol(repo_ref, "", None),
|
||||
// Commit id is checked first, so this is considered an ambiguous commit id
|
||||
Err(RevsetError::AmbiguousCommitIdPrefix("".to_string()))
|
||||
Err(RevsetError::AmbiguousIdPrefix("".to_string()))
|
||||
);
|
||||
assert_eq!(
|
||||
resolve_symbol(repo_ref, "04e13", None),
|
||||
|
@ -268,7 +267,7 @@ fn test_resolve_symbol_change_id() {
|
|||
);
|
||||
assert_eq!(
|
||||
resolve_symbol(repo_ref, "040", None),
|
||||
Err(RevsetError::AmbiguousCommitIdPrefix("040".to_string()))
|
||||
Err(RevsetError::AmbiguousIdPrefix("040".to_string()))
|
||||
);
|
||||
|
||||
// Test non-hex string
|
||||
|
|
Loading…
Reference in a new issue