@ -30,7 +30,7 @@ struct add_opts {
int detach;
int detach;
int quiet;
int quiet;
int checkout;
int checkout;
int keep_locked;
const char *keep_locked;
};
};
static int show_only;
static int show_only;
@ -302,10 +302,10 @@ static int add_worktree(const char *path, const char *refname,
* after the preparation is over.
* after the preparation is over.
*/
*/
strbuf_addf(&sb, "%s/locked", sb_repo.buf);
strbuf_addf(&sb, "%s/locked", sb_repo.buf);
if (!opts->keep_locked)
if (opts->keep_locked)
write_file(sb.buf, _("initializing"));
write_file(sb.buf, "%s", opts->keep_locked);
else
else
write_file(sb.buf, _("added with --lock"));
write_file(sb.buf, _("initializing"));
strbuf_addf(&sb_git, "%s/.git", path);
strbuf_addf(&sb_git, "%s/.git", path);
if (safe_create_leading_directories_const(sb_git.buf))
if (safe_create_leading_directories_const(sb_git.buf))
@ -475,6 +475,8 @@ static int add(int ac, const char **av, const char *prefix)
const char *branch;
const char *branch;
const char *new_branch = NULL;
const char *new_branch = NULL;
const char *opt_track = NULL;
const char *opt_track = NULL;
const char *lock_reason = NULL;
int keep_locked = 0;
struct option options[] = {
struct option options[] = {
OPT__FORCE(&opts.force,
OPT__FORCE(&opts.force,
N_("checkout <branch> even if already checked out in other worktree"),
N_("checkout <branch> even if already checked out in other worktree"),
@ -485,7 +487,9 @@ static int add(int ac, const char **av, const char *prefix)
N_("create or reset a branch")),
N_("create or reset a branch")),
OPT_BOOL('d', "detach", &opts.detach, N_("detach HEAD at named commit")),
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, "checkout", &opts.checkout, N_("populate the new working tree")),
OPT_BOOL(0, "lock", &opts.keep_locked, N_("keep the new working tree locked")),
OPT_BOOL(0, "lock", &keep_locked, N_("keep the new working tree locked")),
OPT_STRING(0, "reason", &lock_reason, N_("string"),
N_("reason for locking")),
OPT__QUIET(&opts.quiet, N_("suppress progress reporting")),
OPT__QUIET(&opts.quiet, N_("suppress progress reporting")),
OPT_PASSTHRU(0, "track", &opt_track, NULL,
OPT_PASSTHRU(0, "track", &opt_track, NULL,
N_("set up tracking mode (see git-branch(1))"),
N_("set up tracking mode (see git-branch(1))"),
@ -500,6 +504,13 @@ static int add(int ac, const char **av, const char *prefix)
ac = parse_options(ac, av, prefix, options, worktree_usage, 0);
ac = parse_options(ac, av, prefix, options, worktree_usage, 0);
if (!!opts.detach + !!new_branch + !!new_branch_force > 1)
if (!!opts.detach + !!new_branch + !!new_branch_force > 1)
die(_("-b, -B, and --detach are mutually exclusive"));
die(_("-b, -B, and --detach are mutually exclusive"));
if (lock_reason && !keep_locked)
die(_("--reason requires --lock"));
if (lock_reason)
opts.keep_locked = lock_reason;
else if (keep_locked)
opts.keep_locked = _("added with --lock");
if (ac < 1 || ac > 2)
if (ac < 1 || ac > 2)
usage_with_options(worktree_usage, options);
usage_with_options(worktree_usage, options);