Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> writes: > diff --git a/builtin/worktree.c b/builtin/worktree.c > index f9dac37..84fe63b 100644 > --- a/builtin/worktree.c > +++ b/builtin/worktree.c > @@ -14,6 +14,7 @@ > static const char * const worktree_usage[] = { > N_("git worktree add [<options>] <path> [<branch>]"), > N_("git worktree list [<options>]"), > + N_("git worktree lock [<options>] <path>"), > N_("git worktree prune [<options>]"), > NULL > }; > @@ -459,6 +460,41 @@ static int list(int ac, const char **av, const char *prefix) > return 0; > } > > +static int lock_worktree(int ac, const char **av, const char *prefix) > +{ > + const char *reason = "", *old_reason; > + struct option options[] = { > + OPT_STRING(0, "reason", &reason, N_("string"), > + N_("reason for locking")), > + OPT_END() > + }; > + struct worktree **worktrees, *wt; > + > + ac = parse_options(ac, av, prefix, options, worktree_usage, 0); > + if (ac != 1) > + usage_with_options(worktree_usage, options); > + > + worktrees = get_worktrees(); > + wt = find_worktree(worktrees, prefix, av[0]); > + if (!wt) > + die(_("'%s' is not a working directory"), av[0]); > + if (is_main_worktree(wt)) > + die(_("'%s' is a main working directory"), av[0]); > + > + old_reason = wt->lock_reason; This use pattern suggests that the reading of lock_reason should be done lazily, doesn't it? The other user of the "is it locked?" information, which is builtin/worktree.c::prune_worktree(), does not even use the get_worktrees() interface and instead it just checks if the lock marker git_path("worktrees/*/locked") exists. Perhaps you want one of these as a public interface: int worktree_is_locked(const char *id, const char **reason); int worktree_is_locked(struct worktree *wt, const char **reason); where the caller can learn if a worktree is locked, and optionally why? -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html