diff --git a/rust/chg/src/clientext.rs b/rust/chg/src/clientext.rs --- a/rust/chg/src/clientext.rs +++ b/rust/chg/src/clientext.rs @@ -5,15 +5,17 @@ //! cHg extensions to command server client. +use bytes::Bytes; use std::ffi::OsStr; +use std::io; use std::os::unix::ffi::OsStrExt; use std::os::unix::io::AsRawFd; use std::path::Path; -use tokio_hglib::protocol::OneShotRequest; +use tokio_hglib::protocol::{OneShotQuery, OneShotRequest}; use tokio_hglib::{Client, Connection}; use super::attachio::AttachIo; -use super::message; +use super::message::{self, Instruction}; use super::runcommand::ChgRunCommand; use super::uihandler::SystemHandler; @@ -45,6 +47,19 @@ I: IntoIterator, P: AsRef, H: SystemHandler; + + /// Validates if the server can run Mercurial commands with the expected + /// configuration. + /// + /// The `args` should contain early command arguments such as `--config` + /// and `-R`. + /// + /// Client-side environment must be sent prior to this request, by + /// `set_current_dir()` and `set_env_vars_os()`. + fn validate(self, args: I) -> OneShotQuery io::Result>> + where + I: IntoIterator, + P: AsRef; } impl ChgClientExt for Client @@ -83,4 +98,17 @@ { ChgRunCommand::with_client(self, handler, message::pack_args_os(args)) } + + fn validate(self, args: I) -> OneShotQuery io::Result>> + where + I: IntoIterator, + P: AsRef, + { + OneShotQuery::start_with_args( + self, + b"validate", + message::pack_args_os(args), + message::parse_instructions, + ) + } }