Merge branch 'dd/send-email-reedit'
[git] / t / t1302-repo-version.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2007 Nguyễn Thái Ngọc Duy
4 #
5
6 test_description='Test repository version check'
7
8 . ./test-lib.sh
9
10 test_expect_success 'setup' '
11         cat >test.patch <<-\EOF &&
12         diff --git a/test.txt b/test.txt
13         new file mode 100644
14         --- /dev/null
15         +++ b/test.txt
16         @@ -0,0 +1 @@
17         +123
18         EOF
19
20         test_create_repo "test" &&
21         test_create_repo "test2" &&
22         git config --file=test2/.git/config core.repositoryformatversion 99
23 '
24
25 test_expect_success 'gitdir selection on normal repos' '
26         echo 0 >expect &&
27         git config core.repositoryformatversion >actual &&
28         git -C test config core.repositoryformatversion >actual2 &&
29         test_cmp expect actual &&
30         test_cmp expect actual2
31 '
32
33 test_expect_success 'gitdir selection on unsupported repo' '
34         # Make sure it would stop at test2, not trash
35         test_expect_code 1 git -C test2 config core.repositoryformatversion >actual
36 '
37
38 test_expect_success 'gitdir not required mode' '
39         git apply --stat test.patch &&
40         git -C test apply --stat ../test.patch &&
41         git -C test2 apply --stat ../test.patch
42 '
43
44 test_expect_success 'gitdir required mode' '
45         git apply --check --index test.patch &&
46         git -C test apply --check --index ../test.patch &&
47         test_must_fail git -C test2 apply --check --index ../test.patch
48 '
49
50 check_allow () {
51         git rev-parse --git-dir >actual &&
52         echo .git >expect &&
53         test_cmp expect actual
54 }
55
56 check_abort () {
57         test_must_fail git rev-parse --git-dir
58 }
59
60 # avoid git-config, since it cannot be trusted to run
61 # in a repository with a broken version
62 mkconfig () {
63         echo '[core]' &&
64         echo "repositoryformatversion = $1" &&
65         shift &&
66
67         if test $# -gt 0; then
68                 echo '[extensions]' &&
69                 for i in "$@"; do
70                         echo "$i"
71                 done
72         fi
73 }
74
75 while read outcome version extensions; do
76         test_expect_success "$outcome version=$version $extensions" "
77                 mkconfig $version $extensions >.git/config &&
78                 check_${outcome}
79         "
80 done <<\EOF
81 allow 0
82 allow 1
83 allow 1 noop
84 abort 1 no-such-extension
85 allow 0 no-such-extension
86 EOF
87
88 test_expect_success 'precious-objects allowed' '
89         mkconfig 1 preciousObjects >.git/config &&
90         check_allow
91 '
92
93 test_expect_success 'precious-objects blocks destructive repack' '
94         test_must_fail git repack -ad
95 '
96
97 test_expect_success 'other repacks are OK' '
98         test_commit foo &&
99         git repack
100 '
101
102 test_expect_success 'precious-objects blocks prune' '
103         test_must_fail git prune
104 '
105
106 test_expect_success 'gc runs without complaint' '
107         git gc
108 '
109
110 test_done