cli: make jj branch --revision/--delete/--forget mutually-exclusive

This commit is contained in:
Waleed Khan 2022-05-02 13:03:34 -07:00
parent 7268e5608e
commit 7a99a17304
2 changed files with 38 additions and 4 deletions

View File

@ -1575,19 +1575,23 @@ struct BackoutArgs {
#[derive(clap::Args, Clone, Debug)]
struct BranchArgs {
/// The branch's target revision
#[clap(long, short, default_value = "@")]
#[clap(long, short, default_value = "@", group = "action")]
revision: String,
/// Allow moving the branch backwards or sideways
#[clap(long)]
#[clap(long, requires = "revision")]
allow_backwards: bool,
/// Delete the branch locally
///
/// The deletion will be propagated to remotes on push.
#[clap(long)]
#[clap(long, group = "action")]
delete: bool,
/// The name of the branch to move or delete
#[clap(long)]
#[clap(long, group = "action")]
forget: bool,
name: String,
}

View File

@ -0,0 +1,30 @@
// Copyright 2022 Google LLC
//
// 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::common::TestEnvironment;
pub mod common;
#[test]
fn test_branch_mutually_exclusive_actions() {
let test_env = TestEnvironment::default();
test_env.jj_cmd_success(test_env.env_root(), &["init", "repo", "--git"]);
let repo_path = test_env.env_root().join("repo");
test_env.jj_cmd_failure(&repo_path, &["branch", "--forget", "--delete", "foo"]);
test_env.jj_cmd_failure(
&repo_path,
&["branch", "--delete", "--allow-backwards", "foo"],
);
}