t1700-split-index.sh 4.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12
#!/bin/sh

test_description='split index mode tests'

. ./test-lib.sh

# We need total control of index splitting here
sane_unset GIT_TEST_SPLIT_INDEX

test_expect_success 'enable split index' '
	git update-index --split-index &&
	test-dump-split-index .git/index >actual &&
13 14 15 16 17 18 19 20 21
	indexversion=$(test-index-version <.git/index) &&
	if test "$indexversion" = "4"
	then
		own=432ef4b63f32193984f339431fd50ca796493569
		base=508851a7f0dfa8691e9f69c7f055865389012491
	else
		own=8299b0bcd1ac364e5f1d7768efb62fa2da79a339
		base=39d890139ee5356c7ef572216cebcd27aa41f9df
	fi &&
22 23 24 25 26 27
	cat >expect <<-EOF &&
	own $own
	base $base
	replacements:
	deletions:
	EOF
28 29 30 31 32 33 34
	test_cmp expect actual
'

test_expect_success 'add one file' '
	: >one &&
	git update-index --add one &&
	git ls-files --stage >ls-files.actual &&
35 36 37
	cat >ls-files.expect <<-EOF &&
	100644 $EMPTY_BLOB 0	one
	EOF
38 39 40
	test_cmp ls-files.expect ls-files.actual &&

	test-dump-split-index .git/index | sed "/^own/d" >actual &&
41 42 43 44 45 46
	cat >expect <<-EOF &&
	base $base
	100644 $EMPTY_BLOB 0	one
	replacements:
	deletions:
	EOF
47 48 49 50 51 52
	test_cmp expect actual
'

test_expect_success 'disable split index' '
	git update-index --no-split-index &&
	git ls-files --stage >ls-files.actual &&
53 54 55
	cat >ls-files.expect <<-EOF &&
	100644 $EMPTY_BLOB 0	one
	EOF
56 57
	test_cmp ls-files.expect ls-files.actual &&

58
	BASE=$(test-dump-split-index .git/index | grep "^own" | sed "s/own/base/") &&
59
	test-dump-split-index .git/index | sed "/^own/d" >actual &&
60 61 62
	cat >expect <<-EOF &&
	not a split index
	EOF
63 64 65 66 67 68
	test_cmp expect actual
'

test_expect_success 'enable split index again, "one" now belongs to base index"' '
	git update-index --split-index &&
	git ls-files --stage >ls-files.actual &&
69 70 71
	cat >ls-files.expect <<-EOF &&
	100644 $EMPTY_BLOB 0	one
	EOF
72 73 74
	test_cmp ls-files.expect ls-files.actual &&

	test-dump-split-index .git/index | sed "/^own/d" >actual &&
75 76 77 78 79
	cat >expect <<-EOF &&
	$BASE
	replacements:
	deletions:
	EOF
80 81 82 83 84 85 86
	test_cmp expect actual
'

test_expect_success 'modify original file, base index untouched' '
	echo modified >one &&
	git update-index one &&
	git ls-files --stage >ls-files.actual &&
87 88 89
	cat >ls-files.expect <<-EOF &&
	100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0	one
	EOF
90 91 92
	test_cmp ls-files.expect ls-files.actual &&

	test-dump-split-index .git/index | sed "/^own/d" >actual &&
93 94 95 96 97 98
	q_to_tab >expect <<-EOF &&
	$BASE
	100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q
	replacements: 0
	deletions:
	EOF
99 100 101 102 103 104 105
	test_cmp expect actual
'

test_expect_success 'add another file, which stays index' '
	: >two &&
	git update-index --add two &&
	git ls-files --stage >ls-files.actual &&
106 107 108 109
	cat >ls-files.expect <<-EOF &&
	100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0	one
	100644 $EMPTY_BLOB 0	two
	EOF
110 111 112
	test_cmp ls-files.expect ls-files.actual &&

	test-dump-split-index .git/index | sed "/^own/d" >actual &&
113 114 115 116 117 118 119
	q_to_tab >expect <<-EOF &&
	$BASE
	100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q
	100644 $EMPTY_BLOB 0	two
	replacements: 0
	deletions:
	EOF
120 121 122 123 124 125
	test_cmp expect actual
'

test_expect_success 'remove file not in base index' '
	git update-index --force-remove two &&
	git ls-files --stage >ls-files.actual &&
126 127 128
	cat >ls-files.expect <<-EOF &&
	100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0	one
	EOF
129 130 131
	test_cmp ls-files.expect ls-files.actual &&

	test-dump-split-index .git/index | sed "/^own/d" >actual &&
132 133 134 135 136 137
	q_to_tab >expect <<-EOF &&
	$BASE
	100644 2e0996000b7e9019eabcad29391bf0f5c7702f0b 0Q
	replacements: 0
	deletions:
	EOF
138 139 140 141 142 143
	test_cmp expect actual
'

test_expect_success 'remove file in base index' '
	git update-index --force-remove one &&
	git ls-files --stage >ls-files.actual &&
144 145
	cat >ls-files.expect <<-EOF &&
	EOF
146 147 148
	test_cmp ls-files.expect ls-files.actual &&

	test-dump-split-index .git/index | sed "/^own/d" >actual &&
149 150 151 152 153
	cat >expect <<-EOF &&
	$BASE
	replacements:
	deletions: 0
	EOF
154 155 156 157 158 159 160
	test_cmp expect actual
'

test_expect_success 'add original file back' '
	: >one &&
	git update-index --add one &&
	git ls-files --stage >ls-files.actual &&
161 162 163
	cat >ls-files.expect <<-EOF &&
	100644 $EMPTY_BLOB 0	one
	EOF
164 165 166
	test_cmp ls-files.expect ls-files.actual &&

	test-dump-split-index .git/index | sed "/^own/d" >actual &&
167 168 169 170 171 172
	cat >expect <<-EOF &&
	$BASE
	100644 $EMPTY_BLOB 0	one
	replacements:
	deletions: 0
	EOF
173 174 175 176 177 178 179
	test_cmp expect actual
'

test_expect_success 'add new file' '
	: >two &&
	git update-index --add two &&
	git ls-files --stage >actual &&
180 181 182 183
	cat >expect <<-EOF &&
	100644 $EMPTY_BLOB 0	one
	100644 $EMPTY_BLOB 0	two
	EOF
184 185 186 187 188 189
	test_cmp expect actual
'

test_expect_success 'unify index, two files remain' '
	git update-index --no-split-index &&
	git ls-files --stage >ls-files.actual &&
190 191 192 193
	cat >ls-files.expect <<-EOF &&
	100644 $EMPTY_BLOB 0	one
	100644 $EMPTY_BLOB 0	two
	EOF
J
Jeff King 已提交
194
	test_cmp ls-files.expect ls-files.actual &&
195 196

	test-dump-split-index .git/index | sed "/^own/d" >actual &&
197 198 199
	cat >expect <<-EOF &&
	not a split index
	EOF
200 201 202 203
	test_cmp expect actual
'

test_done