From 20319b54261dab1b7e71c0c29693e5e0e1a26caf Mon Sep 17 00:00:00 2001 From: link2xt Date: Fri, 24 Mar 2023 15:50:01 +0000 Subject: [PATCH] Add --version option to deltachat-rpc-server --- CHANGELOG.md | 2 ++ Cargo.lock | 1 + deltachat-rpc-server/Cargo.toml | 1 + deltachat-rpc-server/src/main.rs | 21 ++++++++++++++++++++- 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d867f30bb..5862fb8c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ ## [Unreleased] ### Changes +- Add support for `--version` argument to `deltachat-rpc-server`. #4224 + It can be used to check the installed version without starting the server. ### Fixes - deltachat-rpc-client: fix bug in `Chat.send_message()`: invalid `MessageData` field `quotedMsg` instead of `quotedMsgId` diff --git a/Cargo.lock b/Cargo.lock index 0bc5bab91..3ca53f8ef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1250,6 +1250,7 @@ name = "deltachat-rpc-server" version = "1.112.0" dependencies = [ "anyhow", + "deltachat", "deltachat-jsonrpc", "env_logger 0.10.0", "futures-lite", diff --git a/deltachat-rpc-server/Cargo.toml b/deltachat-rpc-server/Cargo.toml index 149a48210..74d8a17da 100644 --- a/deltachat-rpc-server/Cargo.toml +++ b/deltachat-rpc-server/Cargo.toml @@ -11,6 +11,7 @@ categories = ["cryptography", "std", "email"] [dependencies] deltachat-jsonrpc = { path = "../deltachat-jsonrpc", default-features = false } +deltachat = { path = "..", default-features = false } anyhow = "1" env_logger = { version = "0.10.0" } diff --git a/deltachat-rpc-server/src/main.rs b/deltachat-rpc-server/src/main.rs index 78ee49c37..1e957a38b 100644 --- a/deltachat-rpc-server/src/main.rs +++ b/deltachat-rpc-server/src/main.rs @@ -1,9 +1,11 @@ +use std::env; ///! Delta Chat core RPC server. ///! ///! It speaks JSON Lines over stdio. use std::path::PathBuf; -use anyhow::Result; +use anyhow::{anyhow, Context as _, Result}; +use deltachat::constants::DC_VERSION_STR; use deltachat_jsonrpc::api::events::event_to_json_rpc_notification; use deltachat_jsonrpc::api::{Accounts, CommandApi}; use futures_lite::stream::StreamExt; @@ -13,6 +15,23 @@ use yerpc::{RpcClient, RpcSession}; #[tokio::main(flavor = "multi_thread")] async fn main() -> Result<()> { + let mut args = env::args_os(); + let _program_name = args.next().context("no command line arguments found")?; + if let Some(first_arg) = args.next() { + if first_arg.to_str() == Some("--version") { + if let Some(arg) = args.next() { + return Err(anyhow!("Unrecognized argument {:?}", arg)); + } + eprintln!("{}", &*DC_VERSION_STR); + return Ok(()); + } else { + return Err(anyhow!("Unrecognized option {:?}", first_arg)); + } + } + if let Some(arg) = args.next() { + return Err(anyhow!("Unrecognized argument {:?}", arg)); + } + env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")).init(); let path = std::env::var("DC_ACCOUNTS_PATH").unwrap_or_else(|_| "accounts".to_string());