From: Shourya Shukla <shouryashukla.oo@gmail.com>
To: Eric Sunshine <sunshine@sunshineco.com>
Cc: pclouds@gmail.com, jonathanmueller.dev@gmail.com,
gitster@pobox.com, ramsay@ramsayjones.plus.com,
git@vger.kernel.org
Subject: Re: [PATCH v2 6/7] worktree: generalize candidate worktree path validation
Date: Wed, 10 Jun 2020 22:41:53 +0530 [thread overview]
Message-ID: <20200610171153.GA39055@konoha> (raw)
In-Reply-To: <20200610063049.74666-7-sunshine@sunshineco.com>
On 10/06 02:30, Eric Sunshine wrote:
> "git worktree add" checks that the specified path is a valid location
> for a new worktree by ensuring that the path does not already exist and
> is not already registered to another worktree (a path can be registered
> but missing, for instance, if it resides on removable media). Since "git
> worktree add" is not the only command which should perform such
> validation ("git worktree move" ought to also), generalize the the
> validation function for use by other callers, as well.
There is an extra 'the' after generalize.
> -static void validate_worktree_add(const char *path, const struct add_opts *opts)
> +/* check that path is viable location for worktree */
> +static void check_candidate_path(const char *path,
> + int force,
> + struct worktree **worktrees,
> + const char *cmd)
> {
> - struct worktree **worktrees;
> struct worktree *wt;
> int locked;
>
> if (file_exists(path) && !is_empty_dir(path))
> die(_("'%s' already exists"), path);
>
> - worktrees = get_worktrees(0);
> wt = find_worktree_by_path(worktrees, path);
> if (!wt)
> - goto done;
> + return;
Should we do a 'return 1' on failure instead of just a blank 'return' so
that we can denote failure of finding a worktree?
> locked = !!worktree_lock_reason(wt);
> - if ((!locked && opts->force) || (locked && opts->force > 1)) {
> + if ((!locked && force) || (locked && force > 1)) {
> if (delete_git_dir(wt->id))
> - die(_("unable to re-add worktree '%s'"), path);
> - goto done;
> + die(_("unusable worktree destination '%s'"), path);
> + return;
> }
>
> if (locked)
> - die(_("'%s' is a missing but locked worktree;\nuse 'add -f -f' to override, or 'unlock' and 'prune' or 'remove' to clear"), path);
> + die(_("'%s' is a missing but locked worktree;\nuse '%s -f -f' to override, or 'unlock' and 'prune' or 'remove' to clear"), cmd, path);
Let's wrap this to 72 characters at maximum per line maybe? Meaning that
the error message gets split into 2 lines.
> - die(_("'%s' is a missing but already registered worktree;\nuse 'add -f' to override, or 'prune' or 'remove' to clear"), path);
> -
> -done:
> - free_worktrees(worktrees);
> + die(_("'%s' is a missing but already registered worktree;\nuse '%s -f' to override, or 'prune' or 'remove' to clear"), cmd, path);
Similarly here.
>
> static int add_worktree(const char *path, const char *refname,
> @@ -324,8 +323,12 @@ static int add_worktree(const char *path, const char *refname,
> struct commit *commit = NULL;
> int is_branch = 0;
> struct strbuf sb_name = STRBUF_INIT;
> + struct worktree **worktrees;
>
> - validate_worktree_add(path, opts);
> + worktrees = get_worktrees(0);
> + check_candidate_path(path, opts->force, worktrees, "add");
> + free_worktrees(worktrees);
> + worktrees = NULL;
>
> /* is 'refname' a branch or commit? */
> if (!opts->detach && !strbuf_check_branch_ref(&symref, refname) &&
It is necessary to call 'free_worktrees(worktrees)' at the end right?
The 'get_worktrees()' function states that
The caller is responsible for freeing the memory from the returned
worktree(s).
next prev parent reply other threads:[~2020-06-10 17:12 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-10 6:30 [PATCH v2 0/7] worktree: tighten duplicate path detection Eric Sunshine
2020-06-10 6:30 ` [PATCH v2 1/7] worktree: factor out repeated string literal Eric Sunshine
2020-06-10 6:30 ` [PATCH v2 2/7] worktree: give "should be pruned?" function more meaningful name Eric Sunshine
2020-06-10 6:30 ` [PATCH v2 3/7] worktree: make high-level pruning re-usable Eric Sunshine
2020-06-10 6:30 ` [PATCH v2 4/7] worktree: prune duplicate entries referencing same worktree path Eric Sunshine
2020-06-10 11:50 ` Shourya Shukla
2020-06-10 15:21 ` Eric Sunshine
2020-06-10 17:34 ` Junio C Hamano
2020-06-10 6:30 ` [PATCH v2 5/7] worktree: prune linked worktree referencing main " Eric Sunshine
2020-06-10 6:30 ` [PATCH v2 6/7] worktree: generalize candidate worktree path validation Eric Sunshine
2020-06-10 17:11 ` Shourya Shukla [this message]
2020-06-10 17:18 ` Eric Sunshine
2020-06-10 6:30 ` [PATCH v2 7/7] worktree: make "move" refuse to move atop missing registered worktree Eric Sunshine
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200610171153.GA39055@konoha \
--to=shouryashukla.oo@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jonathanmueller.dev@gmail.com \
--cc=pclouds@gmail.com \
--cc=ramsay@ramsayjones.plus.com \
--cc=sunshine@sunshineco.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.