git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "Derrick Stolee via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: newren@gmail.com, gitster@pobox.com, matheus.bernardino@usp.br,
	stolee@gmail.com, vdye@github.com,
	"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
	"Derrick Stolee" <derrickstolee@github.com>
Subject: [PATCH v3 00/14] Sparse-checkout: modify 'git add', 'git rm', and 'git add' behavior
Date: Mon, 20 Sep 2021 17:45:23 +0000	[thread overview]
Message-ID: <pull.1018.v3.git.1632159937.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1018.v2.git.1631453010.gitgitgadget@gmail.com>

This series is based on ds/mergies-with-sparse-index.

As requested, this series looks to update the behavior of git add, git rm,
and git mv when they attempt to modify paths outside of the sparse-checkout
cone. In particular, this care is expanded to not just cache entries with
the SKIP_WORKTREE bit, but also paths that do not match the sparse-checkout
definition.

This means that commands that worked before this series can now fail. In
particular, if 'git merge' results in a conflict outside of the
sparse-checkout cone, then 'git add ' will now fail.

In order to allow users to circumvent these protections, a new '--sparse'
option is added that ignores the sparse-checkout patterns and the
SKIP_WORKTREE bit. The message for advice.updateSparsePath is adjusted to
assist with discovery of this option.

There is a subtle issue with git mv in that it does not check the index
until it discovers a directory and then uses the index to find the contained
entries. This means that in non-cone-mode patterns, a pattern such as
"sub/dir" will not match the path "sub" and this can cause an issue.

In order to allow for checking arbitrary paths against the sparse-checkout
patterns, some changes to the underlying pattern matching code is required.
It turns out that there are some bugs in the methods as advertised, but
these bugs were never discovered because of the way methods like
unpack_trees() will check a directory for a pattern match before checking
its contained paths. Our new "check patterns on-demand" approach pokes holes
in that approach, specifically with patterns that match entire directories.


Updates in v3
=============

 * Fixed an incorrectly-squashed commit. Spread out some changes in a better
   way. For example, I don't add --sparse to tests before introducing the
   option.

 * Use a NULL struct strbuf pointer to indicate an uninitialized value
   instead of relying on an internal member.

 * Use grep over test_i18ngrep.

 * Fixed line wrapping for error messages.

 * Use strbuf_setlen() over modifying the len member manually.


Updates in v2
=============

 * I got no complaints about these restrictions, so this is now a full
   series, not RFC.

 * Thanks to Matheus, several holes are filled with extra testing and
   bugfixes.

 * New patches add --chmod and --renormalize improvements. These are added
   after the --sparse option to make them be one change each.

Thanks, -Stolee

Derrick Stolee (14):
  t3705: test that 'sparse_entry' is unstaged
  t1092: behavior for adding sparse files
  dir: extract directory-matching logic
  dir: select directories correctly
  dir: fix pattern matching on dirs
  add: fail when adding an untracked sparse file
  add: skip tracked paths outside sparse-checkout cone
  add: implement the --sparse option
  add: update --chmod to skip sparse paths
  add: update --renormalize to skip sparse paths
  rm: add --sparse option
  rm: skip sparse paths with missing SKIP_WORKTREE
  mv: refuse to move sparse paths
  advice: update message to suggest '--sparse'

 Documentation/git-add.txt                |   9 +-
 Documentation/git-rm.txt                 |   6 +
 advice.c                                 |  11 +-
 builtin/add.c                            |  32 +++-
 builtin/mv.c                             |  52 +++++--
 builtin/rm.c                             |  10 +-
 dir.c                                    |  56 ++++++-
 pathspec.c                               |   5 +-
 t/t1091-sparse-checkout-builtin.sh       |   4 +-
 t/t1092-sparse-checkout-compatibility.sh |  75 +++++++--
 t/t3602-rm-sparse-checkout.sh            |  40 ++++-
 t/t3705-add-sparse-checkout.sh           |  68 +++++++-
 t/t7002-mv-sparse-checkout.sh            | 189 +++++++++++++++++++++++
 13 files changed, 505 insertions(+), 52 deletions(-)
 create mode 100755 t/t7002-mv-sparse-checkout.sh


base-commit: 516680ba7704c473bb21628aa19cabbd787df4db
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1018%2Fderrickstolee%2Fsparse-index%2Fadd-rm-mv-behavior-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1018/derrickstolee/sparse-index/add-rm-mv-behavior-v3
Pull-Request: https://github.com/gitgitgadget/git/pull/1018

Range-diff vs v2:

  1:  8aefce6254c !  1:  ea940f10a7c t3705: test that 'sparse_entry' is unstaged
     @@ Commit message
          correctly.
      
          We need to modify setup_sparse_entry to actually commit the sparse_entry
     -    file so it exists at HEAD but is not already staged in the index.
     +    file so it exists at HEAD and as an entry in the index, but its exact
     +    contents are not staged in the index.
      
          Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
      
     @@ t/t3705-add-sparse-checkout.sh: setup_gitignore () {
       
      +test_sparse_entry_unstaged () {
      +	git status --porcelain >actual &&
     -+	! grep "^M  sparse_entry\$" actual
     ++	! grep "^[MDARCU][M ] sparse_entry\$" actual
      +}
      +
       test_expect_success 'setup' "
  2:  61c23dc59a6 !  2:  c7dedb41291 t1092: behavior for adding sparse files
     @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_success 'add, commit, chec
      +	run_on_sparse ../edit-contents folder1/a &&
      +	run_on_sparse ../edit-contents folder1/newfile &&
      +	test_sparse_match test_must_fail git add folder1/a &&
     -+	test_i18ngrep "Disable or modify the sparsity rules" sparse-checkout-err &&
     ++	grep "Disable or modify the sparsity rules" sparse-checkout-err &&
      +	test_sparse_unstaged folder1/a &&
      +	test_sparse_match git add folder1/newfile
      +'
     @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_success 'status/add: outsi
       
       	# Adding the path outside of the sparse-checkout cone should fail.
       	test_sparse_match test_must_fail git add folder1/a &&
     -+	test_i18ngrep "Disable or modify the sparsity rules" sparse-checkout-err &&
     ++	grep "Disable or modify the sparsity rules" sparse-checkout-err &&
      +	test_sparse_unstaged folder1/a &&
       	test_sparse_match test_must_fail git add --refresh folder1/a &&
     -+	test_i18ngrep "Disable or modify the sparsity rules" sparse-checkout-err &&
     ++	grep "Disable or modify the sparsity rules" sparse-checkout-err &&
      +	test_sparse_unstaged folder1/a &&
       
       	# NEEDSWORK: Adding a newly-tracked file outside the cone succeeds
  3:  747b52e7bde =  3:  b1f6468f9cd dir: extract directory-matching logic
  4:  723de4e4258 !  4:  0252c7ee15c dir: select directories correctly
     @@ Commit message
          contained files. However, other commands will start matching individual
          files against pattern lists without that recursive approach.
      
     -    We modify path_matches_dir_pattern() to take a strbuf 'path_parent' that
     -    is used to store the parent directory of 'pathname' between multiple
     -    pattern matching tests. This is loaded lazily, only on the first pattern
     -    it finds that has the PATTERN_FLAG_MUSTBEDIR flag.
     +    We modify path_matches_dir_pattern() to take a strbuf pointer
     +    'path_parent' that is used to store the parent directory of 'pathname'
     +    between multiple pattern matching tests. This is loaded lazily, only on
     +    the first pattern it finds that has the PATTERN_FLAG_MUSTBEDIR flag.
      
          If we find that a path has a parent directory, we start by checking to
          see if that parent directory matches the pattern. If so, then we do not
     @@ Commit message
          the more general -- and slower -- full pattern set. Thus, this does not
          affect the sparse index.
      
     +    Helped-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
          Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
      
       ## dir.c ##
     @@ dir.c: int match_pathname(const char *pathname, int pathlen,
       
       static int path_matches_dir_pattern(const char *pathname,
       				    int pathlen,
     -+				    struct strbuf *path_parent,
     ++				    struct strbuf **path_parent,
       				    int *dtype,
       				    struct path_pattern *pattern,
       				    struct index_state *istate)
       {
     -+	/*
     -+	 * Use 'alloc' as an indicator that the string has not been
     -+	 * initialized, in case the parent is the root directory.
     -+	 */
     -+	if (!path_parent->alloc) {
     ++	if (!*path_parent) {
      +		char *slash;
     -+		strbuf_addstr(path_parent, pathname);
     -+		slash = find_last_dir_sep(path_parent->buf);
     ++		CALLOC_ARRAY(*path_parent, 1);
     ++		strbuf_add(*path_parent, pathname, pathlen);
     ++		slash = find_last_dir_sep((*path_parent)->buf);
      +
      +		if (slash)
     -+			*slash = '\0';
     ++			strbuf_setlen(*path_parent, slash - (*path_parent)->buf);
      +		else
     -+			strbuf_setlen(path_parent, 0);
     ++			strbuf_setlen(*path_parent, 0);
      +	}
      +
      +	/*
      +	 * If the parent directory matches the pattern, then we do not
      +	 * need to check for dtype.
      +	 */
     -+	if (path_parent->len &&
     -+	    match_pathname(path_parent->buf, path_parent->len,
     ++	if ((*path_parent)->len &&
     ++	    match_pathname((*path_parent)->buf, (*path_parent)->len,
      +			   pattern->base,
      +			   pattern->baselen ? pattern->baselen - 1 : 0,
      +			   pattern->pattern, pattern->nowildcardlen,
     @@ dir.c: static struct path_pattern *last_matching_pattern_from_list(const char *p
       {
       	struct path_pattern *res = NULL; /* undecided */
       	int i;
     -+	struct strbuf path_parent = STRBUF_INIT;
     ++	struct strbuf *path_parent = NULL;
       
       	if (!pl->nr)
       		return NULL;	/* undefined */
     @@ dir.c: static struct path_pattern *last_matching_pattern_from_list(const char *p
       			break;
       		}
       	}
     -+	strbuf_release(&path_parent);
     ++
     ++	if (path_parent) {
     ++		strbuf_release(path_parent);
     ++		free(path_parent);
     ++	}
     ++
       	return res;
       }
       
  5:  ed2472d33f1 =  5:  c6d17df5e5d dir: fix pattern matching on dirs
  6:  bac6cedfc8d !  6:  3dd1d6c228c add: fail when adding an untracked sparse file
     @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_success 'add, commit, chec
       
      @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_success 'add outside sparse cone' '
       	test_sparse_match test_must_fail git add folder1/a &&
     - 	test_i18ngrep "Disable or modify the sparsity rules" sparse-checkout-err &&
     + 	grep "Disable or modify the sparsity rules" sparse-checkout-err &&
       	test_sparse_unstaged folder1/a &&
      -	test_sparse_match git add folder1/newfile
      +	test_sparse_match test_must_fail git add folder1/newfile &&
     -+	test_i18ngrep "Disable or modify the sparsity rules" sparse-checkout-err &&
     ++	grep "Disable or modify the sparsity rules" sparse-checkout-err &&
      +	test_sparse_unstaged folder1/newfile
       '
       
     @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_success 'commit including
       	# folder1 is at HEAD, but outside the sparse cone
      @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_success 'status/add: outside sparse cone' '
       	test_sparse_match test_must_fail git add --refresh folder1/a &&
     - 	test_i18ngrep "Disable or modify the sparsity rules" sparse-checkout-err &&
     + 	grep "Disable or modify the sparsity rules" sparse-checkout-err &&
       	test_sparse_unstaged folder1/a &&
      +	test_sparse_match test_must_fail git add folder1/new &&
     -+	test_i18ngrep "Disable or modify the sparsity rules" sparse-checkout-err &&
     ++	grep "Disable or modify the sparsity rules" sparse-checkout-err &&
      +	test_sparse_unstaged folder1/new &&
       
      -	# NEEDSWORK: Adding a newly-tracked file outside the cone succeeds
  7:  d4706e17cae !  7:  15039e031e5 add: skip tracked paths outside sparse-checkout cone
     @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_failure 'merge with confli
      -	# warn that this is a problematic add.
      -	test_all_match git add folder1/a &&
      +	test_sparse_match test_must_fail git add folder1/a &&
     -+	test_i18ngrep "Disable or modify the sparsity rules" sparse-checkout-err &&
     ++	grep "Disable or modify the sparsity rules" sparse-checkout-err &&
      +	test_sparse_unstaged folder1/a &&
     -+	test_all_match git add --sparse folder1/a &&
       	test_all_match git status --porcelain=v2 &&
       
       	# 3. Rename the file to another sparse filename and
     @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_failure 'merge with confli
       	# existing index entry with the SKIP_WORKTREE bit cleared.
      -	test_all_match git add folder2 &&
      +	test_sparse_match test_must_fail git add folder2 &&
     -+	test_i18ngrep "Disable or modify the sparsity rules" sparse-checkout-err &&
     ++	grep "Disable or modify the sparsity rules" sparse-checkout-err &&
      +	test_sparse_unstaged folder2/z &&
     -+	test_all_match git add --sparse folder2 &&
       	test_all_match git status --porcelain=v2 &&
       
       	test_all_match git merge --continue &&
     @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_failure 'cherry-pick/rebas
       		# warn that this is a problematic add.
      -		test_all_match git add folder1/a &&
      +		test_sparse_match test_must_fail git add folder1/a &&
     -+		test_i18ngrep "Disable or modify the sparsity rules" sparse-checkout-err &&
     ++		grep "Disable or modify the sparsity rules" sparse-checkout-err &&
      +		test_sparse_unstaged folder1/a &&
       		test_all_match git status --porcelain=v2 &&
       
     @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_failure 'cherry-pick/rebas
       		run_on_all mv folder2/a folder2/z &&
      -		test_all_match git add folder2 &&
      +		test_sparse_match test_must_fail git add folder2 &&
     -+		test_i18ngrep "Disable or modify the sparsity rules" sparse-checkout-err &&
     ++		grep "Disable or modify the sparsity rules" sparse-checkout-err &&
      +		test_sparse_unstaged folder2/z &&
       		test_all_match git status --porcelain=v2 &&
       
  8:  944ae2cffa8 !  8:  6014ac8ab9e add: implement the --sparse option
     @@ Documentation/git-add.txt: in linkgit:gitglossary[7].
      +	Normally, `git add` refuses to update index entries whose paths do
      +	not fit within the sparse-checkout cone, since those files might
      +	be removed from the working tree without warning. See
     -+	linkgit:git-sparse-checkout[1] for more.
     ++	linkgit:git-sparse-checkout[1] for more details.
      +
       -i::
       --interactive::
     @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_success 'commit including
       	# folder1 is at HEAD, but outside the sparse cone
      @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_failure 'status/add: outside sparse cone' '
       	test_sparse_match test_must_fail git add folder1/new &&
     - 	test_i18ngrep "Disable or modify the sparsity rules" sparse-checkout-err &&
     + 	grep "Disable or modify the sparsity rules" sparse-checkout-err &&
       	test_sparse_unstaged folder1/new &&
      +	test_sparse_match git add --sparse folder1/a &&
      +	test_sparse_match git add --sparse folder1/new &&
     @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_success 'merge, cherry-pic
       
       	test_all_match git checkout -b merge-tip merge-left &&
      @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_failure 'merge with conflict outside cone' '
     + 	test_sparse_match test_must_fail git add folder1/a &&
     + 	grep "Disable or modify the sparsity rules" sparse-checkout-err &&
     + 	test_sparse_unstaged folder1/a &&
     ++	test_all_match git add --sparse folder1/a &&
     + 	test_all_match git status --porcelain=v2 &&
     + 
       	# 3. Rename the file to another sparse filename and
       	#    accept conflict markers as resolved content.
       	run_on_all mv folder2/a folder2/z &&
     @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_failure 'merge with confli
      -	# outside of the sparse-checkout cone and does not match an
      -	# existing index entry with the SKIP_WORKTREE bit cleared.
       	test_sparse_match test_must_fail git add folder2 &&
     - 	test_i18ngrep "Disable or modify the sparsity rules" sparse-checkout-err &&
     + 	grep "Disable or modify the sparsity rules" sparse-checkout-err &&
       	test_sparse_unstaged folder2/z &&
     ++	test_all_match git add --sparse folder2 &&
     + 	test_all_match git status --porcelain=v2 &&
     + 
     + 	test_all_match git merge --continue &&
      @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_failure 'merge with conflict outside cone' '
       	test_all_match git rev-parse HEAD^{tree}
       '
     @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_failure 'merge with confli
       	for OPERATION in cherry-pick rebase
      @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_failure 'cherry-pick/rebase with conflict outside cone' '
       		test_sparse_match test_must_fail git add folder1/a &&
     - 		test_i18ngrep "Disable or modify the sparsity rules" sparse-checkout-err &&
     + 		grep "Disable or modify the sparsity rules" sparse-checkout-err &&
       		test_sparse_unstaged folder1/a &&
      +		test_all_match git add --sparse folder1/a &&
       		test_all_match git status --porcelain=v2 &&
     @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_failure 'cherry-pick/rebas
       		# 3. Rename the file to another sparse filename and
      @@ t/t1092-sparse-checkout-compatibility.sh: test_expect_failure 'cherry-pick/rebase with conflict outside cone' '
       		test_sparse_match test_must_fail git add folder2 &&
     - 		test_i18ngrep "Disable or modify the sparsity rules" sparse-checkout-err &&
     + 		grep "Disable or modify the sparsity rules" sparse-checkout-err &&
       		test_sparse_unstaged folder2/z &&
      +		test_all_match git add --sparse folder2 &&
       		test_all_match git status --porcelain=v2 &&
  9:  7ace030c709 !  9:  2bd3448be5f add: update --chmod to skip sparse paths
     @@ builtin/add.c: static int chmod_pathspec(struct pathspec *pathspec, char flip, i
       		if (pathspec && !ce_path_match(&the_index, ce, pathspec, NULL))
      
       ## t/t3705-add-sparse-checkout.sh ##
     -@@ t/t3705-add-sparse-checkout.sh: setup_gitignore () {
     - 
     - test_sparse_entry_unstaged () {
     - 	git status --porcelain >actual &&
     --	! grep "^M  sparse_entry\$" actual
     -+	! grep "^M[ M] sparse_entry\$" actual
     - }
     - 
     - test_expect_success 'setup' "
      @@ t/t3705-add-sparse-checkout.sh: test_expect_success 'git add fails outside of sparse-checkout definition' '
       	test_must_fail git add sparse_entry &&
       	test_sparse_entry_unstaged &&
 10:  f34be166097 = 10:  131beda1bc3 add: update --renormalize to skip sparse paths
 11:  fb3f86efa9b = 11:  837a9314893 rm: add --sparse option
 12:  de0c9d09ef7 = 12:  cc25ce17162 rm: skip sparse paths with missing SKIP_WORKTREE
 13:  e17a529332d = 13:  63a9cd80ade mv: refuse to move sparse paths
 14:  f2abc387822 ! 14:  79a3518dc15 advice: update message to suggest '--sparse'
     @@ advice.c: void advise_on_updating_sparse_paths(struct string_list *pathspec_list
      -	fprintf(stderr, _("The following pathspecs didn't match any"
      -			  " eligible path, but they do match index\n"
      -			  "entries outside the current sparse checkout:\n"));
     -+	fprintf(stderr, _("The following paths and/or pathspecs matched "
     -+			  "paths that exist outside of your\n"
     -+			  "sparse-checkout definition, so will not be "
     ++	fprintf(stderr, _("The following paths and/or pathspecs matched paths that exist\n"
     ++			  "outside of your sparse-checkout definition, so will not be\n"
      +			  "updated in the index:\n"));
       	for_each_string_list_item(item, pathspec_list)
       		fprintf(stderr, "%s\n", item->string);
       
       	advise_if_enabled(ADVICE_UPDATE_SPARSE_PATH,
      -			  _("Disable or modify the sparsity rules if you intend"
     -+			  _("Disable or modify the sparsity rules or"
     -+			    " use the --sparse option if you intend"
     - 			    " to update such entries."));
     +-			    " to update such entries."));
     ++			  _("If you intend to update such entries, try one of the following:\n"
     ++			    "* Use the --sparse option.\n"
     ++			    "* Disable or modify the sparsity rules."));
       }
       
     + void detach_advice(const char *new_name)
      
       ## t/t3602-rm-sparse-checkout.sh ##
      @@ t/t3602-rm-sparse-checkout.sh: test_expect_success 'setup' "
     @@ t/t3602-rm-sparse-checkout.sh: test_expect_success 'setup' "
       	cat >sparse_error_header <<-EOF &&
      -	The following pathspecs didn't match any eligible path, but they do match index
      -	entries outside the current sparse checkout:
     -+	The following paths and/or pathspecs matched paths that exist outside of your
     -+	sparse-checkout definition, so will not be updated in the index:
     ++	The following paths and/or pathspecs matched paths that exist
     ++	outside of your sparse-checkout definition, so will not be
     ++	updated in the index:
       	EOF
       
       	cat >sparse_hint <<-EOF &&
      -	hint: Disable or modify the sparsity rules if you intend to update such entries.
     -+	hint: Disable or modify the sparsity rules or use the --sparse option if you intend to update such entries.
     ++	hint: If you intend to update such entries, try one of the following:
     ++	hint: * Use the --sparse option.
     ++	hint: * Disable or modify the sparsity rules.
       	hint: Disable this message with \"git config advice.updateSparsePath false\"
       	EOF
       
     @@ t/t3705-add-sparse-checkout.sh: test_sparse_entry_unstaged () {
       	cat >sparse_error_header <<-EOF &&
      -	The following pathspecs didn't match any eligible path, but they do match index
      -	entries outside the current sparse checkout:
     -+	The following paths and/or pathspecs matched paths that exist outside of your
     -+	sparse-checkout definition, so will not be updated in the index:
     ++	The following paths and/or pathspecs matched paths that exist
     ++	outside of your sparse-checkout definition, so will not be
     ++	updated in the index:
       	EOF
       
       	cat >sparse_hint <<-EOF &&
      -	hint: Disable or modify the sparsity rules if you intend to update such entries.
     -+	hint: Disable or modify the sparsity rules or use the --sparse option if you intend to update such entries.
     ++	hint: If you intend to update such entries, try one of the following:
     ++	hint: * Use the --sparse option.
     ++	hint: * Disable or modify the sparsity rules.
       	hint: Disable this message with \"git config advice.updateSparsePath false\"
       	EOF
       
     @@ t/t7002-mv-sparse-checkout.sh: test_expect_success 'setup' "
       	cat >sparse_error_header <<-EOF &&
      -	The following pathspecs didn't match any eligible path, but they do match index
      -	entries outside the current sparse checkout:
     -+	The following paths and/or pathspecs matched paths that exist outside of your
     -+	sparse-checkout definition, so will not be updated in the index:
     ++	The following paths and/or pathspecs matched paths that exist
     ++	outside of your sparse-checkout definition, so will not be
     ++	updated in the index:
       	EOF
       
       	cat >sparse_hint <<-EOF
      -	hint: Disable or modify the sparsity rules if you intend to update such entries.
     -+	hint: Disable or modify the sparsity rules or use the --sparse option if you intend to update such entries.
     ++	hint: If you intend to update such entries, try one of the following:
     ++	hint: * Use the --sparse option.
     ++	hint: * Disable or modify the sparsity rules.
       	hint: Disable this message with \"git config advice.updateSparsePath false\"
       	EOF
       "

-- 
gitgitgadget

  parent reply	other threads:[~2021-09-20 23:37 UTC|newest]

Thread overview: 116+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-24 21:54 [PATCH 00/13] [RFC] Sparse-checkout: modify 'git add', 'git rm', and 'git add' behavior Derrick Stolee via GitGitGadget
2021-08-24 21:54 ` [PATCH 01/13] t1092: behavior for adding sparse files Derrick Stolee via GitGitGadget
2021-08-24 21:54 ` [PATCH 02/13] dir: extract directory-matching logic Derrick Stolee via GitGitGadget
2021-08-24 21:54 ` [PATCH 03/13] dir: select directories correctly Derrick Stolee via GitGitGadget
2021-09-24  7:44   ` René Scharfe
2021-08-24 21:54 ` [PATCH 04/13] dir: fix pattern matching on dirs Derrick Stolee via GitGitGadget
2021-08-24 21:54 ` [PATCH 05/13] add: fail when adding an untracked sparse file Derrick Stolee via GitGitGadget
2021-08-27 21:06   ` Matheus Tavares Bernardino
2021-08-27 22:50     ` Matheus Tavares Bernardino
2021-09-08 17:54     ` Derrick Stolee
2021-08-24 21:54 ` [PATCH 06/13] add: skip paths that are outside sparse-checkout cone Derrick Stolee via GitGitGadget
2021-08-27 21:13   ` Matheus Tavares
2021-09-08 19:46     ` Derrick Stolee
2021-09-08 20:02       ` Derrick Stolee
2021-09-08 21:06     ` Derrick Stolee
2021-08-24 21:54 ` [PATCH 07/13] add: implement the --sparse option Derrick Stolee via GitGitGadget
2021-08-27 21:14   ` Matheus Tavares Bernardino
2021-08-24 21:54 ` [PATCH 08/13] add: prevent adding sparse conflict files Derrick Stolee via GitGitGadget
2021-08-27 21:16   ` Matheus Tavares Bernardino
2021-08-24 21:54 ` [PATCH 09/13] rm: add --sparse option Derrick Stolee via GitGitGadget
2021-08-27 21:17   ` Matheus Tavares Bernardino
2021-09-08 18:04     ` Derrick Stolee
2021-08-24 21:54 ` [PATCH 10/13] rm: skip sparse paths with missing SKIP_WORKTREE Derrick Stolee via GitGitGadget
2021-08-27 21:18   ` Matheus Tavares Bernardino
2021-08-24 21:54 ` [PATCH 11/13] mv: refuse to move sparse paths Derrick Stolee via GitGitGadget
2021-08-27 21:20   ` Matheus Tavares Bernardino
2021-08-27 23:44     ` Matheus Tavares Bernardino
2021-09-08 18:41     ` Derrick Stolee
2021-08-24 21:54 ` [PATCH 12/13] mv: add '--sparse' option to ignore sparse-checkout Derrick Stolee via GitGitGadget
2021-08-28 14:18   ` Matheus Tavares Bernardino
2021-08-24 21:54 ` [PATCH 13/13] advice: update message to suggest '--sparse' Derrick Stolee via GitGitGadget
2021-09-12 13:23 ` [PATCH v2 00/14] Sparse-checkout: modify 'git add', 'git rm', and 'git add' behavior Derrick Stolee via GitGitGadget
2021-09-12 13:23   ` [PATCH v2 01/14] t3705: test that 'sparse_entry' is unstaged Derrick Stolee via GitGitGadget
2021-09-15  5:22     ` Elijah Newren
2021-09-15 16:17       ` Derrick Stolee
2021-09-15 16:32     ` Matheus Tavares
2021-09-15 16:42       ` Derrick Stolee
2021-09-12 13:23   ` [PATCH v2 02/14] t1092: behavior for adding sparse files Derrick Stolee via GitGitGadget
2021-09-12 22:17     ` Ævar Arnfjörð Bjarmason
2021-09-13 15:02       ` Derrick Stolee
2021-09-12 13:23   ` [PATCH v2 03/14] dir: extract directory-matching logic Derrick Stolee via GitGitGadget
2021-09-12 13:23   ` [PATCH v2 04/14] dir: select directories correctly Derrick Stolee via GitGitGadget
2021-09-12 22:21     ` Ævar Arnfjörð Bjarmason
2021-09-15 14:41       ` Derrick Stolee
2021-09-15 14:54     ` Elijah Newren
2021-09-15 16:43       ` Derrick Stolee
2021-09-12 13:23   ` [PATCH v2 05/14] dir: fix pattern matching on dirs Derrick Stolee via GitGitGadget
2021-09-12 13:23   ` [PATCH v2 06/14] add: fail when adding an untracked sparse file Derrick Stolee via GitGitGadget
2021-09-12 13:23   ` [PATCH v2 07/14] add: skip tracked paths outside sparse-checkout cone Derrick Stolee via GitGitGadget
2021-09-12 13:23   ` [PATCH v2 08/14] add: implement the --sparse option Derrick Stolee via GitGitGadget
2021-09-15 16:59     ` Elijah Newren
2021-09-20 15:45       ` Derrick Stolee
2021-09-12 13:23   ` [PATCH v2 09/14] add: update --chmod to skip sparse paths Derrick Stolee via GitGitGadget
2021-09-12 13:23   ` [PATCH v2 10/14] add: update --renormalize " Derrick Stolee via GitGitGadget
2021-09-12 13:23   ` [PATCH v2 11/14] rm: add --sparse option Derrick Stolee via GitGitGadget
2021-09-12 13:23   ` [PATCH v2 12/14] rm: skip sparse paths with missing SKIP_WORKTREE Derrick Stolee via GitGitGadget
2021-09-12 13:23   ` [PATCH v2 13/14] mv: refuse to move sparse paths Derrick Stolee via GitGitGadget
2021-09-12 13:23   ` [PATCH v2 14/14] advice: update message to suggest '--sparse' Derrick Stolee via GitGitGadget
2021-09-12 21:58     ` Ævar Arnfjörð Bjarmason
2021-09-15 16:54       ` Derrick Stolee
2021-09-15 20:18   ` [PATCH v2 00/14] Sparse-checkout: modify 'git add', 'git rm', and 'git add' behavior Elijah Newren
2021-09-20 17:45   ` Derrick Stolee via GitGitGadget [this message]
2021-09-20 17:45     ` [PATCH v3 01/14] t3705: test that 'sparse_entry' is unstaged Derrick Stolee via GitGitGadget
2021-09-22 22:52       ` Junio C Hamano
2021-09-20 17:45     ` [PATCH v3 02/14] t1092: behavior for adding sparse files Derrick Stolee via GitGitGadget
2021-09-22 23:06       ` Junio C Hamano
2021-09-23 13:37         ` Derrick Stolee
2021-09-20 17:45     ` [PATCH v3 03/14] dir: extract directory-matching logic Derrick Stolee via GitGitGadget
2021-09-22 23:13       ` Junio C Hamano
2021-09-23 13:39         ` Derrick Stolee
2021-09-23 13:42           ` Derrick Stolee
2021-09-23 18:23             ` Junio C Hamano
2021-09-24 13:29               ` Derrick Stolee
2021-09-20 17:45     ` [PATCH v3 04/14] dir: select directories correctly Derrick Stolee via GitGitGadget
2021-09-20 17:45     ` [PATCH v3 05/14] dir: fix pattern matching on dirs Derrick Stolee via GitGitGadget
2021-09-20 17:45     ` [PATCH v3 06/14] add: fail when adding an untracked sparse file Derrick Stolee via GitGitGadget
2021-09-20 17:45     ` [PATCH v3 07/14] add: skip tracked paths outside sparse-checkout cone Derrick Stolee via GitGitGadget
2021-09-20 17:45     ` [PATCH v3 08/14] add: implement the --sparse option Derrick Stolee via GitGitGadget
2021-09-20 17:45     ` [PATCH v3 09/14] add: update --chmod to skip sparse paths Derrick Stolee via GitGitGadget
2021-09-20 17:45     ` [PATCH v3 10/14] add: update --renormalize " Derrick Stolee via GitGitGadget
2021-09-20 17:45     ` [PATCH v3 11/14] rm: add --sparse option Derrick Stolee via GitGitGadget
2021-09-20 17:45     ` [PATCH v3 12/14] rm: skip sparse paths with missing SKIP_WORKTREE Derrick Stolee via GitGitGadget
2021-09-20 17:45     ` [PATCH v3 13/14] mv: refuse to move sparse paths Derrick Stolee via GitGitGadget
2021-09-20 17:45     ` [PATCH v3 14/14] advice: update message to suggest '--sparse' Derrick Stolee via GitGitGadget
2021-09-24  6:08     ` [PATCH v3 00/14] Sparse-checkout: modify 'git add', 'git rm', and 'git add' behavior Elijah Newren
2021-09-24 15:39     ` [PATCH v4 00/13] Sparse-checkout: modify 'git add', 'git rm', and 'git mv' behavior Derrick Stolee via GitGitGadget
2021-09-24 15:39       ` [PATCH v4 01/13] t3705: test that 'sparse_entry' is unstaged Derrick Stolee via GitGitGadget
2021-09-24 15:39       ` [PATCH v4 02/13] t1092: behavior for adding sparse files Derrick Stolee via GitGitGadget
2021-09-24 15:39       ` [PATCH v4 03/13] dir: select directories correctly Derrick Stolee via GitGitGadget
2021-09-24 15:39       ` [PATCH v4 04/13] dir: fix pattern matching on dirs Derrick Stolee via GitGitGadget
2021-11-02  0:15         ` Glen Choo
2021-11-02  0:34           ` Junio C Hamano
2021-11-02 13:42             ` Derrick Stolee
2021-11-02 14:50               ` Derrick Stolee
2021-11-02 15:33                 ` Ævar Arnfjörð Bjarmason
2021-11-03 14:40                   ` Derrick Stolee
2021-11-03 17:14                     ` Junio C Hamano
2021-09-24 15:39       ` [PATCH v4 05/13] add: fail when adding an untracked sparse file Derrick Stolee via GitGitGadget
2021-09-24 15:39       ` [PATCH v4 06/13] add: skip tracked paths outside sparse-checkout cone Derrick Stolee via GitGitGadget
2021-09-24 15:39       ` [PATCH v4 07/13] add: implement the --sparse option Derrick Stolee via GitGitGadget
2021-09-24 15:39       ` [PATCH v4 08/13] add: update --chmod to skip sparse paths Derrick Stolee via GitGitGadget
2021-09-24 15:39       ` [PATCH v4 09/13] add: update --renormalize " Derrick Stolee via GitGitGadget
2021-09-24 15:39       ` [PATCH v4 10/13] rm: add --sparse option Derrick Stolee via GitGitGadget
2021-09-24 15:39       ` [PATCH v4 11/13] rm: skip sparse paths with missing SKIP_WORKTREE Derrick Stolee via GitGitGadget
2021-09-24 15:39       ` [PATCH v4 12/13] mv: refuse to move sparse paths Derrick Stolee via GitGitGadget
2021-09-24 15:39       ` [PATCH v4 13/13] advice: update message to suggest '--sparse' Derrick Stolee via GitGitGadget
2021-09-27 15:51       ` [PATCH v4 00/13] Sparse-checkout: modify 'git add', 'git rm', and 'git mv' behavior Elijah Newren
2021-09-27 20:51         ` Junio C Hamano
2021-10-18 21:28   ` [PATCH v2 00/14] Sparse-checkout: modify 'git add', 'git rm', and 'git add' behavior Sean Christopherson
2021-10-19 12:29     ` Derrick Stolee
2021-10-19 16:50       ` Sean Christopherson
2021-10-20 13:28         ` Junio C Hamano
2021-10-20 14:28           ` Sean Christopherson
2021-10-22  2:28     ` [RFC PATCH] add|rm|mv: fix bug that prevent the update of non-sparse Matheus Tavares
2021-10-22  4:03       ` Matheus Tavares
2021-10-25 16:40       ` 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

  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=pull.1018.v3.git.1632159937.gitgitgadget@gmail.com \
    --to=gitgitgadget@gmail.com \
    --cc=avarab@gmail.com \
    --cc=derrickstolee@github.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=matheus.bernardino@usp.br \
    --cc=newren@gmail.com \
    --cc=stolee@gmail.com \
    --cc=vdye@github.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).