From: Stephen Manz <smanz@xxxxxxxxxxxx> The default reason stored in the lock file, "added with --lock", is unlikely to be what the user would have given in a separate `git worktree lock` command. Allowing `--reason` to be specified along with `--lock` when adding a working tree gives the user control over the reason for locking without needing a second command. Signed-off-by: Stephen Manz <smanz@xxxxxxxxxxxx> --- worktree: teach add to accept --reason with --lock The default reason stored in the lock file, "added with --lock", is unlikely to be what the user would have given in a separate git worktree lock command. Allowing --reason to be specified along with --lock when adding a working tree gives the user control over the reason for locking without needing a second command. Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-992%2FSRManz%2Flock_reason-v1 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-992/SRManz/lock_reason-v1 Pull-Request: https://github.com/gitgitgadget/git/pull/992 Documentation/git-worktree.txt | 4 ++-- builtin/worktree.c | 16 +++++++++++++--- t/t2400-worktree-add.sh | 13 ++++++++++++- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/Documentation/git-worktree.txt b/Documentation/git-worktree.txt index f1bb1fa5f5a..720663746ba 100644 --- a/Documentation/git-worktree.txt +++ b/Documentation/git-worktree.txt @@ -9,7 +9,7 @@ git-worktree - Manage multiple working trees SYNOPSIS -------- [verse] -'git worktree add' [-f] [--detach] [--checkout] [--lock] [-b <new-branch>] <path> [<commit-ish>] +'git worktree add' [-f] [--detach] [--checkout] [--lock [--reason <string>]] [-b <new-branch>] <path> [<commit-ish>] 'git worktree list' [--porcelain] 'git worktree lock' [--reason <string>] <worktree> 'git worktree move' <worktree> <new-path> @@ -242,7 +242,7 @@ With `list`, annotate missing working trees as prunable if they are older than `<time>`. --reason <string>:: - With `lock`, an explanation why the working tree is locked. + With `lock` or with `add --lock`, an explanation why the working tree is locked. <worktree>:: Working trees can be identified by path, either relative or diff --git a/builtin/worktree.c b/builtin/worktree.c index 976bf8ed063..9f890af7243 100644 --- a/builtin/worktree.c +++ b/builtin/worktree.c @@ -31,6 +31,7 @@ struct add_opts { int quiet; int checkout; int keep_locked; + const char *lock_reason; }; static int show_only; @@ -302,10 +303,15 @@ static int add_worktree(const char *path, const char *refname, * after the preparation is over. */ strbuf_addf(&sb, "%s/locked", sb_repo.buf); - if (!opts->keep_locked) + if (!opts->keep_locked) { write_file(sb.buf, "initializing"); - else - write_file(sb.buf, "added with --lock"); + } + else { + if (opts->lock_reason) + write_file(sb.buf, "%s", opts->lock_reason); + else + write_file(sb.buf, _("added with --lock")); + } strbuf_addf(&sb_git, "%s/.git", path); if (safe_create_leading_directories_const(sb_git.buf)) @@ -486,6 +492,8 @@ static int add(int ac, const char **av, const char *prefix) OPT_BOOL('d', "detach", &opts.detach, N_("detach HEAD at named commit")), OPT_BOOL(0, "checkout", &opts.checkout, N_("populate the new working tree")), OPT_BOOL(0, "lock", &opts.keep_locked, N_("keep the new working tree locked")), + OPT_STRING(0, "reason", &opts.lock_reason, N_("string"), + N_("reason for locking")), OPT__QUIET(&opts.quiet, N_("suppress progress reporting")), OPT_PASSTHRU(0, "track", &opt_track, NULL, N_("set up tracking mode (see git-branch(1))"), @@ -500,6 +508,8 @@ static int add(int ac, const char **av, const char *prefix) ac = parse_options(ac, av, prefix, options, worktree_usage, 0); if (!!opts.detach + !!new_branch + !!new_branch_force > 1) die(_("-b, -B, and --detach are mutually exclusive")); + if (opts.lock_reason && !opts.keep_locked) + die(_("--reason requires --lock")); if (ac < 1 || ac > 2) usage_with_options(worktree_usage, options); diff --git a/t/t2400-worktree-add.sh b/t/t2400-worktree-add.sh index 96dfca15542..1f432d0f7d7 100755 --- a/t/t2400-worktree-add.sh +++ b/t/t2400-worktree-add.sh @@ -67,11 +67,22 @@ test_expect_success '"add" worktree' ' ' test_expect_success '"add" worktree with lock' ' - git rev-parse HEAD >expect && git worktree add --detach --lock here-with-lock main && test -f .git/worktrees/here-with-lock/locked ' +test_expect_success '"add" worktree with lock and reason' ' + git worktree add --detach --lock --reason "why not" here-with-lock-reason main && + test -f .git/worktrees/here-with-lock-reason/locked && + echo why not >expect && + test_cmp expect .git/worktrees/here-with-lock-reason/locked +' + +test_expect_failure '"add" worktree with reason but no lock' ' + git worktree add --detach --reason "why not" here-with-reason-only main && + test -f .git/worktrees/here-with-reason-only/locked +' + test_expect_success '"add" worktree from a subdir' ' ( mkdir sub && base-commit: 670b81a890388c60b7032a4f5b879f2ece8c4558 -- gitgitgadget