Skip to content

Commit

Permalink
sign: Implement the jj sign command
Browse files Browse the repository at this point in the history
Cannot make it accept multiple revisions easily, that'd have to be done
with a rebaser
  • Loading branch information
necauqua authored and pylbrecht committed Jan 4, 2025
1 parent 50e707a commit 45be04d
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 1 deletion.
3 changes: 3 additions & 0 deletions cli/src/commands/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ mod restore;
mod root;
mod run;
mod show;
mod sign;
mod simplify_parents;
mod sparse;
mod split;
Expand Down Expand Up @@ -128,6 +129,7 @@ enum Command {
// TODO: Flesh out.
Run(run::RunArgs),
Show(show::ShowArgs),
Sign(sign::SignArgs),
SimplifyParents(simplify_parents::SimplifyParentsArgs),
#[command(subcommand)]
Sparse(sparse::SparseCommand),
Expand Down Expand Up @@ -207,6 +209,7 @@ pub fn run_command(ui: &mut Ui, command_helper: &CommandHelper) -> Result<(), Co
simplify_parents::cmd_simplify_parents(ui, command_helper, args)
}
Command::Show(args) => show::cmd_show(ui, command_helper, args),
Command::Sign(args) => sign::cmd_sign(ui, command_helper, args),
Command::Sparse(args) => sparse::cmd_sparse(ui, command_helper, args),
Command::Split(args) => split::cmd_split(ui, command_helper, args),
Command::Squash(args) => squash::cmd_squash(ui, command_helper, args),
Expand Down
43 changes: 43 additions & 0 deletions cli/src/commands/sign.rs
Original file line number Diff line number Diff line change
@@ -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<String>,
/// What revision to sign
#[arg(long, short, default_value = "@")]
revisions: Vec<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!()
}
23 changes: 23 additions & 0 deletions cli/tests/[email protected]
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
source: cli/tests/test_generate_md_cli_help.rs
description: "AUTO-GENERATED FILE, DO NOT EDIT. This cli reference is generated by a test as an `insta` snapshot. MkDocs includes this snapshot from docs/cli-reference.md."
snapshot_kind: text
---
<!-- BEGIN MARKDOWN-->

Expand Down Expand Up @@ -79,6 +80,7 @@ This document contains the help content for the `jj` command-line program.
* [`jj restore`↴](#jj-restore)
* [`jj root`↴](#jj-root)
* [`jj show`↴](#jj-show)
* [`jj sign`↴](#jj-sign)
* [`jj simplify-parents`↴](#jj-simplify-parents)
* [`jj sparse`↴](#jj-sparse)
* [`jj sparse edit`↴](#jj-sparse-edit)
Expand Down Expand Up @@ -149,6 +151,7 @@ To get started, see the tutorial at https://jj-vcs.github.io/jj/latest/tutorial/
* `restore`Restore paths from another revision
* `root`Show the current workspace root directory
* `show`Show commit description and changes in a revision
* `sign`Cryptographically sign 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
* `split`Split a revision in two
Expand Down Expand Up @@ -1980,6 +1983,26 @@ Show commit description and changes in a revision
## `jj sign`
Cryptographically sign a revision
**Usage:** `jj sign [OPTIONS] [KEY]`
###### **Arguments:**
* `<KEY>` — What key to use, depends on the configured signing backend
###### **Options:**
* `-r`, `--revision <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 simplify-parents`
Simplify parent edges for the specified revision(s).
Expand Down
2 changes: 1 addition & 1 deletion lib/src/commit_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ impl DetachedCommitBuilder {
}

pub fn set_sign_key(&mut self, sign_key: Option<String>) -> &mut Self {
self.sign_settings.key = sign_key;
self.sign_settings.key = sign_key.or(self.sign_settings.key.clone());
self
}

Expand Down

0 comments on commit 45be04d

Please sign in to comment.