From: Victoria Dye <vdye@github.com>
To: Elijah Newren via GitGitGadget <gitgitgadget@gmail.com>,
git@vger.kernel.org
Cc: Lessley Dennington <lessleydennington@gmail.com>,
Derrick Stolee <derrickstolee@github.com>,
Elijah Newren <newren@gmail.com>
Subject: Re: [PATCH v2 0/9] sparse-checkout: make cone mode the default
Date: Mon, 14 Mar 2022 12:04:52 -0700 [thread overview]
Message-ID: <0f8b57d9-0ce2-da94-ecb8-4fa7f51d9fdb@github.com> (raw)
In-Reply-To: <pull.1148.v2.git.1647054681.gitgitgadget@gmail.com>
Elijah Newren via GitGitGadget wrote:
> == Updates Log ==
>
> Changes since v1:
>
> * rebased on master, to remove dependence on en/present-despite-skipped
> (which has since merged to master). Earlier version of series wasn't
> picked up anyway, so rebasing should be safe.
> * Wording and code style tweaks suggested by Stolee in his review
>
> == Overview ==
>
> This patch changes the default mode for sparse-checkout from non-cone mode
> to cone-mode, and marks non-cone mode as deprecated. There is no plan to
> remove non-cone mode, we are merely recommending against its use.
>
> The code change is pretty small, and most of this series is about
> documentation updates -- to focus on directories rather than patterns, to
> explain the new default, to explain why we are deprecating non-cone mode
> (the final patch), and to make other related cleanups to simplify the
> manual.
>
> Patch 1: Update tests to not assume cone-mode is the default Patch 2: Make
> cone-mode the default Patches 3-9: Various updates to
> git-sparse-checkout.txt, divided up for ease of review
>
After looking over the patches (and Stolee's prior feedback), I don't have
any additional comments - it all looks great!
I also ran through some scenarios going from "non-cone" to "cone mode" that
have been buggy in the past (e.g., non-cone directory patterns missing a
leading '/', then 'git sparse-checkout init --cone'), but it looks like the
checks added back in a3eca58445 (sparse-checkout: refuse to add to bad
patterns, 2021-12-16) prevent any unexplained behavior for a user that might
not be aware of the new default. In other words, changing the default looks
to be safe and overall pushes users towards a better experience using
sparse-checkout.
> == Alternative ==
>
> There is one primary alternative to this series: make sparse-checkout error
> when neither --cone nor --no-cone are specified (so that there is no
> default), and wait until a future date to make --cone the default. That'd be
> reasonable, but I had three reason to avoid going this route (note that item
> 2 means there's little practical difference between cone-mode-as-default and
> no-mode-is-default):
>
> 1. git-sparse-checkout.txt has the following huge warning early in the
> manual:
>
> """ THIS COMMAND IS EXPERIMENTAL. ITS BEHAVIOR, AND THE BEHAVIOR OF OTHER
> COMMANDS IN THE PRESENCE OF SPARSE-CHECKOUTS, WILL LIKELY CHANGE IN THE
> FUTURE. """
>
> 2. If users are unaware of the default change and attempt to provide
> patterns instead of directories, then they will get error messages added
> from en/sparse-checkout-fixes. They can learn at that time to get around
> the error messages by providing --no-cone.
>
> 3. If users are unaware of the default change and provide directories, then
> that's where non-cone mode and cone mode overlap and things happen to
> work. (There is a slight difference in that cone mode will include files
> from parent directories of any specified directory, but that means the
> user gets a few more files in their sparse-checkout with cone mode than
> they would with non-cone mode.)
>
Agreed with your comments here and Stolee's earlier that changing the
default is a better approach.
> == CCs ==
>
> Elijah Newren (9):
> tests: stop assuming --no-cone is the default mode for sparse-checkout
> sparse-checkout: make --cone the default
> git-sparse-checkout.txt: wording updates for the cone mode default
> git-sparse-checkout.txt: update docs for deprecation of 'init'
> git-sparse-checkout.txt: shuffle some sections and mark as internal
> git-sparse-checkout.txt: add a new EXAMPLES section
> git-sparse-checkout.txt: flesh out non-cone mode pattern discussion a
> bit
> git-sparse-checkout.txt: mark non-cone mode as deprecated
> Documentation: some sparsity wording clarifications
>
> Documentation/git-read-tree.txt | 9 +-
> Documentation/git-sparse-checkout.txt | 249 +++++++++++++++++++-------
> builtin/sparse-checkout.c | 2 +-
> t/t1091-sparse-checkout-builtin.sh | 15 +-
> t/t3602-rm-sparse-checkout.sh | 6 +-
> t/t3705-add-sparse-checkout.sh | 4 +-
> t/t6428-merge-conflicts-sparse.sh | 4 +-
> t/t7002-mv-sparse-checkout.sh | 2 +-
> t/t7012-skip-worktree-writing.sh | 2 +-
> 9 files changed, 207 insertions(+), 86 deletions(-)
>
>
> base-commit: 1a4874565fa3b6668042216189551b98b4dc0b1b
> Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1148%2Fnewren%2Fsparse-checkout-default-v2
> Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1148/newren/sparse-checkout-default-v2
> Pull-Request: https://github.com/gitgitgadget/git/pull/1148
>
> Range-diff vs v1:
>
> 1: 8c3e730e86b = 1: 05dba7069c5 tests: stop assuming --no-cone is the default mode for sparse-checkout
> 2: b174b42ed82 ! 2: a53179764bc sparse-checkout: make --cone the default
> @@ builtin/sparse-checkout.c: static int update_modes(int *cone_mode, int *sparse_i
> /* Set cone/non-cone mode appropriately */
> core_apply_sparse_checkout = 1;
> - if (*cone_mode == 1) {
> -+ if (*cone_mode == 1 || *cone_mode == -1) {
> ++ if (*cone_mode) { /* also handles "not specified" (value of -1) */
> mode = MODE_CONE_PATTERNS;
> core_sparse_checkout_cone = 1;
> } else {
> 3: f98b3fac78a = 3: 8eab21996c7 git-sparse-checkout.txt: wording updates for the cone mode default
> 4: cd871966c06 = 4: eb3b318b39e git-sparse-checkout.txt: update docs for deprecation of 'init'
> 5: fe37a966699 = 5: 7333198b778 git-sparse-checkout.txt: shuffle some sections and mark as internal
> 6: 3265f41bcab ! 6: a814ea9e8d2 git-sparse-checkout.txt: add a new EXAMPLES section
> @@ Documentation/git-sparse-checkout.txt: paths to pass to a subsequent 'set' or 'a
> +
> +`git sparse-checkout reapply`::
> +
> -+ It is possible for commands to update the working tree in a way
> -+ that does not respect the selected sparsity directories, either
> -+ because of special cases (such as hitting conflicts when
> -+ merging/rebasing), or because some commands didn't fully support
> -+ sparse checkouts (e.g. the old `recursive` merge backend had
> -+ only limited support). This command reapplies the existing
> -+ sparse directory specifications to make the working directory
> -+ match.
> ++ It is possible for commands to update the working tree in a
> ++ way that does not respect the selected sparsity directories.
> ++ This can come from tools external to Git writing files, or
> ++ even affect Git commands because of either special cases (such
> ++ as hitting conflicts when merging/rebasing), or because some
> ++ commands didn't fully support sparse checkouts (e.g. the old
> ++ `recursive` merge backend had only limited support). This
> ++ command reapplies the existing sparse directory specifications
> ++ to make the working directory match.
> +
> INTERNALS -- SPARSE CHECKOUT
> ----------------------------
> 7: bdbf61ee6a0 = 7: 78028ecaa58 git-sparse-checkout.txt: flesh out non-cone mode pattern discussion a bit
> 8: 3e35d62c5ee = 8: 2d2b81986a5 git-sparse-checkout.txt: mark non-cone mode as deprecated
> 9: e7d3ff70914 = 9: 4b89a3392b0 Documentation: some sparsity wording clarifications
>
next prev parent reply other threads:[~2022-03-14 19:04 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-08 7:39 [PATCH 0/9] sparse-checkout: make cone mode the default Elijah Newren via GitGitGadget
2022-03-08 7:39 ` [PATCH 1/9] tests: stop assuming --no-cone is the default mode for sparse-checkout Elijah Newren via GitGitGadget
2022-03-08 7:39 ` [PATCH 2/9] sparse-checkout: make --cone the default Elijah Newren via GitGitGadget
2022-03-08 14:26 ` Derrick Stolee
2022-03-12 2:01 ` Elijah Newren
2022-03-08 7:39 ` [PATCH 3/9] git-sparse-checkout.txt: wording updates for the cone mode default Elijah Newren via GitGitGadget
2022-03-08 7:39 ` [PATCH 4/9] git-sparse-checkout.txt: update docs for deprecation of 'init' Elijah Newren via GitGitGadget
2022-03-08 7:39 ` [PATCH 5/9] git-sparse-checkout.txt: shuffle some sections and mark as internal Elijah Newren via GitGitGadget
2022-03-08 7:39 ` [PATCH 6/9] git-sparse-checkout.txt: add a new EXAMPLES section Elijah Newren via GitGitGadget
2022-03-08 14:30 ` Derrick Stolee
2022-03-12 1:58 ` Elijah Newren
2022-03-08 7:39 ` [PATCH 7/9] git-sparse-checkout.txt: flesh out non-cone mode pattern discussion a bit Elijah Newren via GitGitGadget
2022-03-08 7:39 ` [PATCH 8/9] git-sparse-checkout.txt: mark non-cone mode as deprecated Elijah Newren via GitGitGadget
2022-03-08 7:39 ` [PATCH 9/9] Documentation: some sparsity wording clarifications Elijah Newren via GitGitGadget
2022-03-08 14:34 ` [PATCH 0/9] sparse-checkout: make cone mode the default Derrick Stolee
2022-03-12 3:11 ` [PATCH v2 " Elijah Newren via GitGitGadget
2022-03-12 3:11 ` [PATCH v2 1/9] tests: stop assuming --no-cone is the default mode for sparse-checkout Elijah Newren via GitGitGadget
2022-03-14 20:18 ` Junio C Hamano
2022-03-15 17:15 ` Derrick Stolee
2022-03-12 3:11 ` [PATCH v2 2/9] sparse-checkout: make --cone the default Elijah Newren via GitGitGadget
2022-03-14 20:34 ` Junio C Hamano
2022-04-22 2:29 ` Elijah Newren
2022-03-12 3:11 ` [PATCH v2 3/9] git-sparse-checkout.txt: wording updates for the cone mode default Elijah Newren via GitGitGadget
2022-03-14 20:39 ` Junio C Hamano
2022-03-12 3:11 ` [PATCH v2 4/9] git-sparse-checkout.txt: update docs for deprecation of 'init' Elijah Newren via GitGitGadget
2022-03-14 20:53 ` Junio C Hamano
2022-04-22 2:29 ` Elijah Newren
2022-04-22 6:09 ` Junio C Hamano
2022-03-12 3:11 ` [PATCH v2 5/9] git-sparse-checkout.txt: shuffle some sections and mark as internal Elijah Newren via GitGitGadget
2022-03-14 20:55 ` Junio C Hamano
2022-04-22 2:30 ` Elijah Newren
2022-03-12 3:11 ` [PATCH v2 6/9] git-sparse-checkout.txt: add a new EXAMPLES section Elijah Newren via GitGitGadget
2022-03-12 3:11 ` [PATCH v2 7/9] git-sparse-checkout.txt: flesh out non-cone mode pattern discussion a bit Elijah Newren via GitGitGadget
2022-03-14 20:57 ` Junio C Hamano
2022-04-22 2:30 ` Elijah Newren
2022-03-12 3:11 ` [PATCH v2 8/9] git-sparse-checkout.txt: mark non-cone mode as deprecated Elijah Newren via GitGitGadget
2022-03-14 21:13 ` Junio C Hamano
2022-04-22 2:31 ` Elijah Newren
2022-03-12 3:11 ` [PATCH v2 9/9] Documentation: some sparsity wording clarifications Elijah Newren via GitGitGadget
2022-03-14 15:25 ` [PATCH v2 0/9] sparse-checkout: make cone mode the default Derrick Stolee
2022-03-14 19:04 ` Victoria Dye [this message]
2022-03-14 20:12 ` Junio C Hamano
2022-03-14 23:19 ` Junio C Hamano
2022-04-22 2:32 ` [PATCH v3 " Elijah Newren via GitGitGadget
2022-04-22 2:32 ` [PATCH v3 1/9] tests: stop assuming --no-cone is the default mode for sparse-checkout Elijah Newren via GitGitGadget
2022-04-22 2:32 ` [PATCH v3 2/9] sparse-checkout: make --cone the default Elijah Newren via GitGitGadget
2022-04-22 2:32 ` [PATCH v3 3/9] git-sparse-checkout.txt: wording updates for the cone mode default Elijah Newren via GitGitGadget
2022-04-22 2:32 ` [PATCH v3 4/9] git-sparse-checkout.txt: update docs for deprecation of 'init' Elijah Newren via GitGitGadget
2022-04-22 2:32 ` [PATCH v3 5/9] git-sparse-checkout.txt: shuffle some sections and mark as internal Elijah Newren via GitGitGadget
2022-04-22 2:32 ` [PATCH v3 6/9] git-sparse-checkout.txt: add a new EXAMPLES section Elijah Newren via GitGitGadget
2022-04-22 2:32 ` [PATCH v3 7/9] git-sparse-checkout.txt: flesh out pattern set sections a bit Elijah Newren via GitGitGadget
2022-04-22 2:32 ` [PATCH v3 8/9] git-sparse-checkout.txt: mark non-cone mode as deprecated Elijah Newren via GitGitGadget
2022-04-22 2:32 ` [PATCH v3 9/9] Documentation: some sparsity wording clarifications Elijah Newren via GitGitGadget
2022-04-25 14:38 ` [PATCH v3 0/9] sparse-checkout: make cone mode the default Derrick Stolee
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=0f8b57d9-0ce2-da94-ecb8-4fa7f51d9fdb@github.com \
--to=vdye@github.com \
--cc=derrickstolee@github.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=lessleydennington@gmail.com \
--cc=newren@gmail.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 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 NNTP newsgroup(s).