blob: ce4cff13bbced58add641a463321f36673121fd7 [file] [log] [blame]
Nguyễn Thái Ngọc Duy9459aa72007-12-05 20:33:32 +07001#!/bin/sh
2#
3# Copyright (c) 2007 Nguyễn Thái Ngọc Duy
4#
5
6test_description='Test repository version check'
7
8. ./test-lib.sh
9
Jonathan Nieder8fe5aed2010-09-06 20:52:27 -050010test_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
Nguyễn Thái Ngọc Duy9459aa72007-12-05 20:33:32 +070019
Jonathan Nieder8fe5aed2010-09-06 20:52:27 -050020 test_create_repo "test" &&
21 test_create_repo "test2" &&
Jeff Kingf7e87142014-03-20 19:17:01 -040022 git config --file=test2/.git/config core.repositoryformatversion 99
Jonathan Nieder8fe5aed2010-09-06 20:52:27 -050023'
Nguyễn Thái Ngọc Duy9459aa72007-12-05 20:33:32 +070024
25test_expect_success 'gitdir selection on normal repos' '
Jonathan Nieder8fe5aed2010-09-06 20:52:27 -050026 echo 0 >expect &&
27 git config core.repositoryformatversion >actual &&
Jeff King11ca4be2016-09-12 20:24:00 -070028 git -C test config core.repositoryformatversion >actual2 &&
Jonathan Nieder8fe5aed2010-09-06 20:52:27 -050029 test_cmp expect actual &&
30 test_cmp expect actual2
31'
Nguyễn Thái Ngọc Duy9459aa72007-12-05 20:33:32 +070032
Nguyễn Thái Ngọc Duy9459aa72007-12-05 20:33:32 +070033test_expect_success 'gitdir selection on unsupported repo' '
Jonathan Nieder8fe5aed2010-09-06 20:52:27 -050034 # Make sure it would stop at test2, not trash
Jeff Kingb9605bc2016-09-12 20:24:15 -070035 test_expect_code 1 git -C test2 config core.repositoryformatversion >actual
Jonathan Nieder8fe5aed2010-09-06 20:52:27 -050036'
Nguyễn Thái Ngọc Duy9459aa72007-12-05 20:33:32 +070037
38test_expect_success 'gitdir not required mode' '
Jens Lehmannfd4ec4f2010-09-06 20:39:54 +020039 git apply --stat test.patch &&
Jeff King11ca4be2016-09-12 20:24:00 -070040 git -C test apply --stat ../test.patch &&
41 git -C test2 apply --stat ../test.patch
Jonathan Nieder18a82692010-09-06 20:42:54 -050042'
Nguyễn Thái Ngọc Duy9459aa72007-12-05 20:33:32 +070043
Jonathan Nieder8fe5aed2010-09-06 20:52:27 -050044test_expect_success 'gitdir required mode' '
45 git apply --check --index test.patch &&
Jeff King11ca4be2016-09-12 20:24:00 -070046 git -C test apply --check --index ../test.patch &&
47 test_must_fail git -C test2 apply --check --index ../test.patch
Junio C Hamano41ac4142008-02-01 01:50:53 -080048'
Nguyễn Thái Ngọc Duy9459aa72007-12-05 20:33:32 +070049
Jeff King00a09d52015-06-23 06:53:58 -040050check_allow () {
51 git rev-parse --git-dir >actual &&
52 echo .git >expect &&
53 test_cmp expect actual
54}
55
56check_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
62mkconfig () {
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
75while read outcome version extensions; do
76 test_expect_success "$outcome version=$version $extensions" "
77 mkconfig $version $extensions >.git/config &&
78 check_${outcome}
79 "
80done <<\EOF
81allow 0
82allow 1
83allow 1 noop
84abort 1 no-such-extension
85allow 0 no-such-extension
86EOF
87
Jeff King067fbd42015-06-23 06:54:11 -040088test_expect_success 'precious-objects allowed' '
89 mkconfig 1 preciousObjects >.git/config &&
90 check_allow
91'
92
93test_expect_success 'precious-objects blocks destructive repack' '
94 test_must_fail git repack -ad
95'
96
97test_expect_success 'other repacks are OK' '
98 test_commit foo &&
99 git repack
100'
101
102test_expect_success 'precious-objects blocks prune' '
103 test_must_fail git prune
104'
105
106test_expect_success 'gc runs without complaint' '
107 git gc
108'
109
Nguyễn Thái Ngọc Duy9459aa72007-12-05 20:33:32 +0700110test_done