From: Taylor Blau <me@ttaylorr.com>
To: Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, newren@gmail.com, delphij@google.com,
peff@peff.net, Derrick Stolee <derrickstolee@github.com>,
Derrick Stolee <dstolee@microsoft.com>
Subject: Re: [PATCH] setup: warn if extensions exist on old format
Date: Mon, 13 Jul 2020 15:34:05 -0400 [thread overview]
Message-ID: <20200713193405.GC77607@syl.lan> (raw)
In-Reply-To: <pull.674.git.1594668051847.gitgitgadget@gmail.com>
On Mon, Jul 13, 2020 at 07:20:51PM +0000, Derrick Stolee via GitGitGadget wrote:
> From: Derrick Stolee <dstolee@microsoft.com>
>
> Prior to 14c7fa269e4 (check_repository_format_gently(): refuse extensions
> for old repositories, 2020-06-05), Git was honoring configured
> extensions, even if core.repositoryFormatVersion was 0 (or unset). This
> was incorrect, and is now fixed.
>
> The issue now is that users who relied on that previously bad behavior
> will upgrade to the next version of Git and suddently be in a bad
> situation. In particular, users of the 'git sparse-checkout' builting
> will rely on the extensions.worktreeConfig for the core.sparseCheckout
> and core.sparseCheckoutCone config options. Without that extension,
> these users will suddenly have repositories stop acting like a sparse
> repo.
>
> What is worse is that a user will be confronted with the following
> error if they try to run 'git sparse-checkout init' again:
>
> warning: unable to upgrade repository format from 0 to 1
>
> This is because the logic in 14c7fa269e4 refuses to upgrae repos when
s/upgrae/upgrade
> the version is unset but extensions exist.
I'm not sure that I want to get into a discussion about whether or not
this logic is right while -rc0 is already out, but it seems like
14c7fa269e4 could be tweaked to be a little more tolerant of this case.
On the other hand, I think that the approach here is perfectly sensible,
absent of a more invasive change to the logic in 14c7fa269e4.
> While it is important to correct this improper behavior, create a
> warning so users in this situation can correct themselves without too
> much guesswork. By creating a warning in
> check_repository_format_gently(), we can alert the user if they have a
> ocnfigured extension but not a configured repository version.
s/ocnfigured/configured
> Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
> ---
> setup: warn if extensions exist on old format
>
> This is based on xl/upgrade-repo-format.
>
> Can this be considered for v2.28.0-rc1? I think this is an important
> shift in behavior that will disrupt many users if they upgrade without
> it!
I would be happy to see something like this in -rc1, unless Junio has
reservations about making this change at this point in the release cycle
(I do not have any such concerns).
> If not this warning or change, then how else can we help users who are
> in this situation? How can we save those who adopted the sparse-checkout
> builtin in recent versions from terrible post-upgrade headaches?
>
> Thanks, -Stolee
>
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-674%2Fderrickstolee%2Fsparse-checkout-warning-v1
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-674/derrickstolee/sparse-checkout-warning-v1
> Pull-Request: https://github.com/gitgitgadget/git/pull/674
>
> setup.c | 5 +++++
> t/t1091-sparse-checkout-builtin.sh | 9 +++++++++
> 2 files changed, 14 insertions(+)
>
> diff --git a/setup.c b/setup.c
> index eb066db6d8..6ff6c54d39 100644
> --- a/setup.c
> +++ b/setup.c
> @@ -542,6 +542,11 @@ static int check_repository_format_gently(const char *gitdir, struct repository_
> }
> }
>
> + if (candidate->version == 0 && candidate->has_extensions) {
> + warning(_("some extensions are enabled, but core.repositoryFormatVersion=0"));
> + warning(_("if you intended to use extensions, run 'git config core.repositoryFormatVersion 1'"));
> + }
> +
> return 0;
> }
>
> diff --git a/t/t1091-sparse-checkout-builtin.sh b/t/t1091-sparse-checkout-builtin.sh
> index 88cdde255c..d249428f44 100755
> --- a/t/t1091-sparse-checkout-builtin.sh
> +++ b/t/t1091-sparse-checkout-builtin.sh
> @@ -68,6 +68,15 @@ test_expect_success 'git sparse-checkout init' '
> check_files repo a
> '
>
> +test_expect_success 'warning about core.repositoryFormatVersion' '
> + test_when_finished git -C repo config core.repositoryFormatVersion 1 &&
> + git -C repo status 2>err &&
> + test_must_be_empty err &&
> + git -C repo config --local core.repositoryFormatVersion 0 &&
I don't think it's that difficult to see that this patch is correct, but
it might be worth testing this for the case that
'core.repositoryFormatVersion' is unset, too.
> + git -C repo status 2>err &&
> + test_i18ngrep "some extensions are enabled, but core.repositoryFormatVersion=0" err
> +'
> +
> test_expect_success 'git sparse-checkout list after init' '
> git -C repo sparse-checkout list >actual &&
> cat >expect <<-\EOF &&
>
> base-commit: 14c7fa269e42df4133edd9ae7763b678ed6594cd
> --
> gitgitgadget
Thanks,
Taylor
next prev parent reply other threads:[~2020-07-13 19:34 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-13 19:20 [PATCH] setup: warn if extensions exist on old format Derrick Stolee via GitGitGadget
2020-07-13 19:34 ` Taylor Blau [this message]
2020-07-13 19:41 ` Derrick Stolee
2020-07-13 19:36 ` Junio C Hamano
2020-07-13 20:00 ` Junio C Hamano
2020-07-13 20:18 ` [PATCH] setup: tweak upgrade policy to grandfather worktreeconfig Junio C Hamano
2020-07-13 20:46 ` Derrick Stolee
2020-07-13 21:45 ` Junio C Hamano
2020-07-14 4:06 ` Jonathan Nieder
2020-07-14 4:27 ` Junio C Hamano
2020-07-14 1:26 ` [PATCH v2 0/2] setup: warn if extensions exist on old format Derrick Stolee via GitGitGadget
2020-07-14 1:26 ` [PATCH v2 1/2] setup: tweak upgrade policy to grandfather worktreeconfig Derrick Stolee via GitGitGadget
2020-07-14 20:22 ` Johannes Schindelin
2020-07-14 1:26 ` [PATCH v2 2/2] config: provide extra detail about worktree config Derrick Stolee via GitGitGadget
2020-07-14 20:24 ` [PATCH v2 0/2] setup: warn if extensions exist on old format Johannes Schindelin
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=20200713193405.GC77607@syl.lan \
--to=me@ttaylorr.com \
--cc=delphij@google.com \
--cc=derrickstolee@github.com \
--cc=dstolee@microsoft.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=newren@gmail.com \
--cc=peff@peff.net \
/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.