From 46731eb56e0bd0ca675764f166d610c5aeab22a5 Mon Sep 17 00:00:00 2001 From: Anton Bulakh Date: Tue, 28 Nov 2023 22:15:56 +0200 Subject: [PATCH] sign: implement `jj sign` command Changes were taken from #3142 and slightly modified. --- cli/src/commands/mod.rs | 3 +++ cli/src/commands/sign.rs | 43 ++++++++++++++++++++++++++++++++ cli/tests/cli-reference@.md.snap | 22 ++++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 cli/src/commands/sign.rs diff --git a/cli/src/commands/mod.rs b/cli/src/commands/mod.rs index 7bf08b2b8..93b1ffced 100644 --- a/cli/src/commands/mod.rs +++ b/cli/src/commands/mod.rs @@ -47,6 +47,7 @@ mod restore; mod root; mod run; mod show; +mod sign; mod simplify_parents; mod sparse; mod split; @@ -149,6 +150,7 @@ enum Command { #[command(hide = true)] // TODO: Flesh out. Run(run::RunArgs), + Sign(sign::SignArgs), Show(show::ShowArgs), SimplifyParents(simplify_parents::SimplifyParentsArgs), #[command(subcommand)] @@ -239,6 +241,7 @@ pub fn run_command(ui: &mut Ui, command_helper: &CommandHelper) -> Result<(), Co Command::Revert(_args) => revert(), Command::Root(args) => root::cmd_root(ui, command_helper, args), Command::Run(args) => run::cmd_run(ui, command_helper, args), + Command::Sign(sub_args) => sign::cmd_sign(ui, command_helper, sub_args), Command::SimplifyParents(args) => { simplify_parents::cmd_simplify_parents(ui, command_helper, args) } diff --git a/cli/src/commands/sign.rs b/cli/src/commands/sign.rs new file mode 100644 index 000000000..291795205 --- /dev/null +++ b/cli/src/commands/sign.rs @@ -0,0 +1,43 @@ +// Copyright 2023 The Jujutsu Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +use crate::cli_util::CommandHelper; +use crate::cli_util::RevisionArg; +use crate::command_error::CommandError; +use crate::ui::Ui; + +/// Cryptographically sign a revision +#[derive(clap::Args, Clone, Debug)] +pub struct SignArgs { + /// What key to use, depends on the configured signing backend. + #[arg()] + key: Option, + /// What revision to sign + #[arg(long, short, default_value = "@")] + revision: RevisionArg, + /// Sign a commit that is not authored by you or was already signed. + #[arg(long, short)] + force: bool, + /// Drop the signature, explicitly "un-signing" the commit. + #[arg(long, short = 'D', conflicts_with = "force")] + drop: bool, +} + +pub fn cmd_sign( + _ui: &mut Ui, + _command: &CommandHelper, + _args: &SignArgs, +) -> Result<(), CommandError> { + todo!() +} diff --git a/cli/tests/cli-reference@.md.snap b/cli/tests/cli-reference@.md.snap index 0cd8d6e30..ec544c519 100644 --- a/cli/tests/cli-reference@.md.snap +++ b/cli/tests/cli-reference@.md.snap @@ -78,6 +78,7 @@ This document contains the help content for the `jj` command-line program. * [`jj resolve`↴](#jj-resolve) * [`jj restore`↴](#jj-restore) * [`jj root`↴](#jj-root) +* [`jj sign`↴](#jj-sign) * [`jj show`↴](#jj-show) * [`jj simplify-parents`↴](#jj-simplify-parents) * [`jj sparse`↴](#jj-sparse) @@ -146,6 +147,7 @@ To get started, see the tutorial at https://martinvonz.github.io/jj/latest/tutor * `resolve` — Resolve a conflicted file with an external merge tool * `restore` — Restore paths from another revision * `root` — Show the current workspace root directory +* `sign` — Cryptographically sign a revision * `show` — Show commit description and changes in a revision * `simplify-parents` — Simplify parent edges for the specified revision(s) * `sparse` — Manage which paths from the working-copy commit are present in the working copy @@ -1886,6 +1888,26 @@ Show the current workspace root directory +## `jj sign` + +Cryptographically sign a revision + +**Usage:** `jj sign [OPTIONS] [KEY]` + +###### **Arguments:** + +* `` — What key to use, depends on the configured signing backend + +###### **Options:** + +* `-r`, `--revision ` — What revision to sign + + Default value: `@` +* `-f`, `--force` — Sign a commit that is not authored by you or was already signed +* `-D`, `--drop` — Drop the signature, explicitly "un-signing" the commit + + + ## `jj show` Show commit description and changes in a revision