On Mon, Oct 21, 2019 at 01:56:13PM +0000, Derrick Stolee via GitGitGadget wrote: > From: Derrick Stolee <dstolee@xxxxxxxxxxxxx> > > The 'git sparse-checkout set' subcommand takes a list of patterns > as arguments and writes them to the sparse-checkout file. Then, it > updates the working directory using 'git read-tree -mu HEAD'. > > The 'set' subcommand will replace the entire contents of the > sparse-checkout file. The write_patterns_and_update() method is > extracted from cmd_sparse_checkout() to make it easier to implement > 'add' and/or 'remove' subcommands in the future. Yeah, an 'add' subcommand would be great, because 'set' throwing away all the existing patterns can lead to some frustration: # Let's clone with sparse checkout $ git clone --sparse ... $ cd clone $ less README $ git sparse-checkout '/some/dir/*' # Erm, what was the next step? $ less README README: No such file or directory # Uhoh. Having said that, being forced to use 'git sparse-checkout set' and specify all patterns at once does have its own benefits: I needed like 6 subdirectories to build that subset of a big project that I was interested in, and now all the necessary patterns are saved in my Bash history, and I will be able to easily dig out the complete command in the future. That wouldn't work with using the 'add' subcommand to add one pattern at a time. > diff --git a/t/t1091-sparse-checkout-builtin.sh b/t/t1091-sparse-checkout-builtin.sh > index cb74715ca6..bf2dc55bb1 100755 > --- a/t/t1091-sparse-checkout-builtin.sh > +++ b/t/t1091-sparse-checkout-builtin.sh > @@ -96,4 +96,36 @@ test_expect_success 'clone --sparse' ' > test_cmp expect dir > ' > > +test_expect_success 'set enables config' ' > + git init empty-config && > + ( > + cd empty-config && > + test_commit test file && > + test_path_is_missing .git/config.worktree && > + test_must_fail git sparse-checkout set nothing && This command prints the same error message twice: + test_must_fail git sparse-checkout set nothing error: Sparse checkout leaves no entry on working directory error: Sparse checkout leaves no entry on working directory > + test_i18ngrep "sparseCheckout = false" .git/config.worktree && The contents of a configuration file surely can't ever be translated, can it?! Please use 'test_cmp_config'. > + git sparse-checkout set "/*" && > + test_i18ngrep "sparseCheckout = true" .git/config.worktree > + ) > +' > + > +test_expect_success 'set sparse-checkout using builtin' ' > + git -C repo sparse-checkout set "/*" "!/*/" "*folder*" && > + cat >expect <<-EOF && > + /* > + !/*/ > + *folder* > + EOF > + git -C repo sparse-checkout list >actual && > + test_cmp expect actual && > + test_cmp expect repo/.git/info/sparse-checkout && > + ls repo >dir && > + cat >expect <<-EOF && > + a > + folder1 > + folder2 > + EOF > + test_cmp expect dir > +' > + > test_done > -- > gitgitgadget >