From: Junio C Hamano <gitster@pobox.com>
To: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Cc: sunshine@sunshineco.com, git@vger.kernel.org
Subject: Re: [PATCH v2] worktree: allow to (re)move worktrees with uninitialized submodules
Date: Fri, 04 Jan 2019 14:51:01 -0800 [thread overview]
Message-ID: <xmqqftu8avfu.fsf@gitster-ct.c.googlers.com> (raw)
In-Reply-To: <20181216144657.31181-1-pclouds@gmail.com> ("Nguyễn Thái Ngọc Duy"'s message of "Sun, 16 Dec 2018 15:46:57 +0100")
Nguyễn Thái Ngọc Duy <pclouds@gmail.com> writes:
> Uninitialized submodules have nothing valueable for us to be worried
> about. They are just SHA-1. Let "worktree remove" and "worktree move"
> continue in this case so that people can still use multiple worktrees
> on repos with optional submodules that are never populated, like
> sha1collisiondetection in git.git when checked out by doc-diff script.
>
> Note that for "worktree remove", it is possible that a user
> initializes a submodule (*), makes some commits (but not push), then
> deinitializes it. At that point, the submodule is unpopulated, but the
> precious new commits are still in
>
> $GIT_COMMON_DIR/worktrees/<worktree>/modules/<submodule>
>
> directory and we should not allow removing the worktree or we lose
> those commits forever. The new directory check is added to prevent
> this.
>
> (*) yes they are screwed anyway by doing this since "git submodule"
> would add submodule.* in $GIT_COMMON_DIR/config, which is shared
> across multiple worktrees. But it does not mean we let them be
> screwed even more.
>
> Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
> ---
> Fixed Eric's comment. I was a bit annoyed by the duplicate die() too
> but didn't think of adding "else" in front of "if (read_index"
>
> builtin/worktree.c | 29 +++++++++++++++++++++++------
> 1 file changed, 23 insertions(+), 6 deletions(-)
Is this a fair description for this 1-patch topic?
"git worktree remove" and "git worktree move" failed to work
when there is an uninitialized submodule, which has been fixed.
If so, can we have a test case to cover this fix?
Thanks.
> diff --git a/builtin/worktree.c b/builtin/worktree.c
> index 5e84026177..3f9907fcc9 100644
> --- a/builtin/worktree.c
> +++ b/builtin/worktree.c
> @@ -9,6 +9,7 @@
> #include "refs.h"
> #include "run-command.h"
> #include "sigchain.h"
> +#include "submodule.h"
> #include "refs.h"
> #include "utf8.h"
> #include "worktree.h"
> @@ -724,20 +725,36 @@ static int unlock_worktree(int ac, const char **av, const char *prefix)
> static void validate_no_submodules(const struct worktree *wt)
> {
> struct index_state istate = { NULL };
> + struct strbuf path = STRBUF_INIT;
> int i, found_submodules = 0;
>
> - if (read_index_from(&istate, worktree_git_path(wt, "index"),
> - get_worktree_git_dir(wt)) > 0) {
> + if (is_directory(worktree_git_path(wt, "modules"))) {
> + /*
> + * There could be false positives, e.g. the "modules"
> + * directory exists but is empty. But it's a rare case and
> + * this simpler check is probably good enough for now.
> + */
> + found_submodules = 1;
> + } else if (read_index_from(&istate, worktree_git_path(wt, "index"),
> + get_worktree_git_dir(wt)) > 0) {
> for (i = 0; i < istate.cache_nr; i++) {
> struct cache_entry *ce = istate.cache[i];
> + int err;
>
> - if (S_ISGITLINK(ce->ce_mode)) {
> - found_submodules = 1;
> - break;
> - }
> + if (!S_ISGITLINK(ce->ce_mode))
> + continue;
> +
> + strbuf_reset(&path);
> + strbuf_addf(&path, "%s/%s", wt->path, ce->name);
> + if (!is_submodule_populated_gently(path.buf, &err))
> + continue;
> +
> + found_submodules = 1;
> + break;
> }
> }
> discard_index(&istate);
> + strbuf_release(&path);
>
> if (found_submodules)
> die(_("working trees containing submodules cannot be moved or removed"));
next prev parent reply other threads:[~2019-01-04 22:51 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-16 12:12 [PATCH] worktree: allow to (re)move worktrees with uninitialized submodules Nguyễn Thái Ngọc Duy
2018-12-16 13:18 ` Eric Sunshine
2018-12-16 14:46 ` [PATCH v2] " Nguyễn Thái Ngọc Duy
2019-01-04 22:51 ` Junio C Hamano [this message]
2019-01-06 7:01 ` Eric Sunshine
2019-01-05 5:08 ` [PATCH v3] " Nguyễn Thái Ngọc Duy
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqftu8avfu.fsf@gitster-ct.c.googlers.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=pclouds@gmail.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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).