[PATCH v2 0/3] worktree: teach add to accept --reason with --lock
From: Stephen Manz via GitGitGadget <hidden>
Date: 2021-07-08 15:50:48
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.
Changes since v1:
* Split changes into 3 commits. The first commit is removal of git
rev-parse in the test above the ones I'm adding. The second is wrapping
the "added with --lock" string with _() to mark it for translation. The
third commit is the main change.
* Reworked the if-else-if-else to if-else if-else
* Added test_when_finished ... command to unlock the working tree
* Changed test_expect_failure to test_expect_success and embedded
test_must_fail and test_path_is_missing commands
Note: I don't see how to disambiguate --lock with no --reason from no --lock
at all. I still think that the original keep_locked boolean is needed along
with the new lock_reason char array. If I don't add lock_reason and change
keep_locked to a char array, it will start as NULL. But it will remain NULL
if --lock alone is given or if --lock isn't given at all.
Stephen Manz (3):
t2400: remove unneeded `git rev-parse` from '"add" worktree with lock'
test
worktree: default lock string should be marked with `_()` for
translation
worktree: teach `add` to accept --reason <string> with --lock
Documentation/git-worktree.txt | 4 ++--
builtin/worktree.c | 9 ++++++++-
t/t2400-worktree-add.sh | 14 +++++++++++++-
3 files changed, 23 insertions(+), 4 deletions(-)
base-commit: 670b81a890388c60b7032a4f5b879f2ece8c4558
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-992%2FSRManz%2Flock_reason-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-992/SRManz/lock_reason-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/992
Range-diff vs v1:
-: ----------- > 1: 5459e5bb421 t2400: remove unneeded `git rev-parse` from '"add" worktree with lock' test
-: ----------- > 2: 30196cc9369 worktree: default lock string should be marked with `_()` for translation
1: 233a580b212 ! 3: 4d17b31921a worktree: teach `add` to accept --reason <string> with --lock
@@ builtin/worktree.c: struct add_opts {
static int show_only;
@@ builtin/worktree.c: 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) {
+ 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"));
-+ }
++ 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))
@@ builtin/worktree.c: 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")),
@@ builtin/worktree.c: static int add(int ac, const char **av, const char *prefix)
## t/t2400-worktree-add.sh ##
-@@ t/t2400-worktree-add.sh: 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 &&
+@@ t/t2400-worktree-add.sh: test_expect_success '"add" worktree with lock' '
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_when_finished "git worktree unlock here-with-lock-reason || :" &&
+ 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 with reason but no lock' '
++ test_must_fail git worktree add --detach --reason "why not" here-with-reason-only main &&
++ test_path_is_missing .git/worktrees/here-with-reason-only/locked
+'
+
test_expect_success '"add" worktree from a subdir' '
--
gitgitgadget