@@ -216,7 +216,7 @@ test_expect_success 'cone mode: match patterns' '
216
216
test_expect_success ' cone mode: warn on bad pattern' '
217
217
test_when_finished mv sparse-checkout repo/.git/info/ &&
218
218
cp repo/.git/info/sparse-checkout . &&
219
- echo "!/deep/deeper/*" >> repo/.git/info/sparse-checkout &&
219
+ echo "!/deep/deeper/*" >repo/.git/info/sparse-checkout &&
220
220
git -C repo read-tree -mu HEAD 2>err &&
221
221
test_i18ngrep "unrecognized negative pattern" err
222
222
'
@@ -608,7 +608,7 @@ test_expect_success 'pattern-checks: starting "*"' '
608
608
cat >repo/.git/info/sparse-checkout <<-\EOF &&
609
609
/*
610
610
!/*/
611
- *eep/
611
+ / *eep/
612
612
EOF
613
613
check_read_tree_errors repo "a deep" "disabling cone pattern matching"
614
614
'
@@ -619,12 +619,21 @@ test_expect_success 'pattern-checks: contained glob characters' '
619
619
cat >repo/.git/info/sparse-checkout <<-EOF &&
620
620
/*
621
621
!/*/
622
- something$c-else/
622
+ / something$c-else/
623
623
EOF
624
624
check_read_tree_errors repo "a" "disabling cone pattern matching" || return 1
625
625
done
626
626
'
627
627
628
+ test_expect_success ' pattern-checks: starting "/"' '
629
+ cat >repo/.git/info/sparse-checkout <<-\EOF &&
630
+ /*
631
+ !/*/
632
+ deep/
633
+ EOF
634
+ check_read_tree_errors repo "a deep" "disabling cone pattern matching"
635
+ '
636
+
628
637
test_expect_success BSLASHPSPEC ' pattern-checks: escaped characters' '
629
638
git clone repo escaped &&
630
639
TREEOID=$(git -C escaped rev-parse HEAD:folder1) &&
@@ -768,4 +777,43 @@ test_expect_success 'malformed cone-mode patterns' '
768
777
grep "warning: disabling cone pattern matching" err
769
778
'
770
779
780
+ test_expect_success ' init with cone mode verifies existing cone patterns' '
781
+ # Set non-cone mode pattern
782
+ echo "/deep/deeper*" >repo/.git/info/sparse-checkout &&
783
+
784
+ git -C repo sparse-checkout init --cone 2>err &&
785
+ test_i18ngrep "disabling cone mode" err &&
786
+ test_must_fail git -C repo config core.sparsecheckoutcone
787
+ '
788
+
789
+ # NEEDSWORK: in the case of directory patterns like `deep/`, it might be worth trying
790
+ # to "correct" the patterns to match a cone mode style. However, that may be more difficult
791
+ # for nested directories (like `deep/deeper1/`) in which multiple individual patterns
792
+ # would be mapped from the original (`/deep/`, `!/deep/*/`, `/deep/deeper1/`).
793
+ test_expect_success ' add cone pattern disallowed with existing non-cone directory pattern' '
794
+ rm -f repo/.git/info/sparse-checkout &&
795
+
796
+ git -C repo sparse-checkout init --cone &&
797
+
798
+ # Manually set the sparse checkout pattern to a directory pattern
799
+ # without preceding slash
800
+ cat >repo/.git/info/sparse-checkout <<-\EOF &&
801
+ deep/
802
+ EOF
803
+
804
+ # `add` fails because `deep/` is not a valid cone pattern.
805
+ test_must_fail git -C repo sparse-checkout add folder1/ 2>err &&
806
+ test_i18ngrep "existing sparse-checkout patterns do not use cone mode" err &&
807
+
808
+ # `set` succeeds with same patterns set properly for cone mode.
809
+ git -C repo sparse-checkout set deep/ folder1/ &&
810
+ cat >expect <<-\EOF &&
811
+ /*
812
+ !/*/
813
+ /deep/
814
+ /folder1/
815
+ EOF
816
+ test_cmp expect repo/.git/info/sparse-checkout
817
+ '
818
+
771
819
test_done
0 commit comments