rhg: raise wdir specific error for `hg debugdata`
authorPulkit Goyal <7895pulkit@gmail.com>
Tue, 23 Mar 2021 19:58:49 +0530
changeset 46821 e8ae91b1a63d
parent 46820 821929d59e01
child 46822 c71e8d9e7f2a
rhg: raise wdir specific error for `hg debugdata` Helps remove the conditional in `test-debugcommands.t` for rhg. Differential Revision: https://phab.mercurial-scm.org/D10254
rust/hg-core/src/revlog.rs
rust/hg-core/src/revlog/revlog.rs
rust/hg-core/src/revset.rs
rust/rhg/src/error.rs
tests/test-debugcommands.t
--- a/rust/hg-core/src/revlog.rs	Sat Mar 20 02:03:57 2021 +0530
+++ b/rust/hg-core/src/revlog.rs	Tue Mar 23 19:58:49 2021 +0530
@@ -35,6 +35,9 @@
 #[allow(clippy::unreadable_literal)]
 pub const WORKING_DIRECTORY_REVISION: Revision = 0x7fffffff;
 
+pub const WORKING_DIRECTORY_HEX: &str =
+    "ffffffffffffffffffffffffffffffffffffffff";
+
 /// The simplest expression of what we need of Mercurial DAGs.
 pub trait Graph {
     /// Return the two parents of the given `Revision`.
--- a/rust/hg-core/src/revlog/revlog.rs	Sat Mar 20 02:03:57 2021 +0530
+++ b/rust/hg-core/src/revlog/revlog.rs	Tue Mar 23 19:58:49 2021 +0530
@@ -23,6 +23,8 @@
 #[derive(derive_more::From)]
 pub enum RevlogError {
     InvalidRevision,
+    /// Working directory is not supported
+    WDirUnsupported,
     /// Found more than one entry whose ID match the requested prefix
     AmbiguousPrefix,
     #[from]
--- a/rust/hg-core/src/revset.rs	Sat Mar 20 02:03:57 2021 +0530
+++ b/rust/hg-core/src/revset.rs	Tue Mar 23 19:58:49 2021 +0530
@@ -7,7 +7,8 @@
 use crate::revlog::changelog::Changelog;
 use crate::revlog::revlog::{Revlog, RevlogError};
 use crate::revlog::NodePrefix;
-use crate::revlog::{Revision, NULL_REVISION};
+use crate::revlog::{Revision, NULL_REVISION, WORKING_DIRECTORY_HEX};
+use crate::Node;
 
 /// Resolve a query string into a single revision.
 ///
@@ -51,6 +52,10 @@
         }
     }
     if let Ok(prefix) = NodePrefix::from_hex(input) {
+        if prefix.is_prefix_of(&Node::from_hex(WORKING_DIRECTORY_HEX).unwrap())
+        {
+            return Err(RevlogError::WDirUnsupported);
+        }
         return revlog.get_node_rev(prefix);
     }
     Err(RevlogError::InvalidRevision)
--- a/rust/rhg/src/error.rs	Sat Mar 20 02:03:57 2021 +0530
+++ b/rust/rhg/src/error.rs	Tue Mar 23 19:58:49 2021 +0530
@@ -157,6 +157,9 @@
 impl From<(RevlogError, &str)> for CommandError {
     fn from((err, rev): (RevlogError, &str)) -> CommandError {
         match err {
+            RevlogError::WDirUnsupported => CommandError::abort(
+                "abort: working directory revision cannot be specified",
+            ),
             RevlogError::InvalidRevision => CommandError::abort(format!(
                 "abort: invalid revision identifier: {}",
                 rev
--- a/tests/test-debugcommands.t	Sat Mar 20 02:03:57 2021 +0530
+++ b/tests/test-debugcommands.t	Tue Mar 23 19:58:49 2021 +0530
@@ -531,17 +531,9 @@
 
 Test WdirUnsupported exception
 
-#if no-rhg
   $ hg debugdata -c ffffffffffffffffffffffffffffffffffffffff
   abort: working directory revision cannot be specified
   [255]
-#else
-TODO: add rhg support for (at least parsing) the working directory pseudo-changeset
-  $ hg debugdata -c ffffffffffffffffffffffffffffffffffffffff
-  abort: working directory revision cannot be specified (missing-correct-output !)
-  abort: invalid revision identifier: ffffffffffffffffffffffffffffffffffffffff (known-bad-output !)
-  [255]
-#endif
 
 Test cache warming command