git@vger.kernel.org list mirror (unofficial, one of many)
 help / color / mirror / code / Atom feed
be19ac76230be68385ba3fc0a5266306470dabe2 blob 6700 bytes (raw)

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
 
#!/bin/sh

test_description='git maintenance builtin'

. ./test-lib.sh

GIT_TEST_COMMIT_GRAPH=0
GIT_TEST_MULTI_PACK_INDEX=0

test_expect_success 'help text' '
	test_expect_code 129 git maintenance -h 2>err &&
	test_i18ngrep "usage: git maintenance run" err
'

test_expect_success 'run [--auto|--quiet]' '
	GIT_TRACE2_EVENT="$(pwd)/run-no-auto.txt" \
		git maintenance run 2>/dev/null &&
	GIT_TRACE2_EVENT="$(pwd)/run-auto.txt" \
		git maintenance run --auto 2>/dev/null &&
	GIT_TRACE2_EVENT="$(pwd)/run-no-quiet.txt" \
		git maintenance run --no-quiet 2>/dev/null &&
	test_subcommand git gc --quiet <run-no-auto.txt &&
	test_subcommand ! git gc --auto --quiet <run-auto.txt &&
	test_subcommand git gc --no-quiet <run-no-quiet.txt
'

test_expect_success 'maintenance.<task>.enabled' '
	git config maintenance.gc.enabled false &&
	git config maintenance.commit-graph.enabled true &&
	GIT_TRACE2_EVENT="$(pwd)/run-config.txt" git maintenance run 2>err &&
	test_subcommand ! git gc --quiet <run-config.txt &&
	test_subcommand git commit-graph write --split --reachable --no-progress <run-config.txt
'

test_expect_success 'run --task=<task>' '
	GIT_TRACE2_EVENT="$(pwd)/run-commit-graph.txt" \
		git maintenance run --task=commit-graph 2>/dev/null &&
	GIT_TRACE2_EVENT="$(pwd)/run-gc.txt" \
		git maintenance run --task=gc 2>/dev/null &&
	GIT_TRACE2_EVENT="$(pwd)/run-commit-graph.txt" \
		git maintenance run --task=commit-graph 2>/dev/null &&
	GIT_TRACE2_EVENT="$(pwd)/run-both.txt" \
		git maintenance run --task=commit-graph --task=gc 2>/dev/null &&
	test_subcommand ! git gc --quiet <run-commit-graph.txt &&
	test_subcommand git gc --quiet <run-gc.txt &&
	test_subcommand git gc --quiet <run-both.txt &&
	test_subcommand git commit-graph write --split --reachable --no-progress <run-commit-graph.txt &&
	test_subcommand ! git commit-graph write --split --reachable --no-progress <run-gc.txt &&
	test_subcommand git commit-graph write --split --reachable --no-progress <run-both.txt
'

test_expect_success 'run --task=bogus' '
	test_must_fail git maintenance run --task=bogus 2>err &&
	test_i18ngrep "is not a valid task" err
'

test_expect_success 'run --task duplicate' '
	test_must_fail git maintenance run --task=gc --task=gc 2>err &&
	test_i18ngrep "cannot be selected multiple times" err
'

test_expect_success 'run --task=prefetch with no remotes' '
	git maintenance run --task=prefetch 2>err &&
	test_must_be_empty err
'

test_expect_success 'prefetch multiple remotes' '
	git clone . clone1 &&
	git clone . clone2 &&
	git remote add remote1 "file://$(pwd)/clone1" &&
	git remote add remote2 "file://$(pwd)/clone2" &&
	git -C clone1 switch -c one &&
	git -C clone2 switch -c two &&
	test_commit -C clone1 one &&
	test_commit -C clone2 two &&
	GIT_TRACE2_EVENT="$(pwd)/run-prefetch.txt" git maintenance run --task=prefetch 2>/dev/null &&
	fetchargs="--prune --no-tags --no-write-fetch-head --refmap= --quiet" &&
	test_subcommand git fetch remote1 $fetchargs +refs/heads/\\*:refs/prefetch/remote1/\\* <run-prefetch.txt &&
	test_subcommand git fetch remote2 $fetchargs +refs/heads/\\*:refs/prefetch/remote2/\\* <run-prefetch.txt &&
	test_path_is_missing .git/refs/remotes &&
	test_cmp clone1/.git/refs/heads/one .git/refs/prefetch/remote1/one &&
	test_cmp clone2/.git/refs/heads/two .git/refs/prefetch/remote2/two &&
	git log prefetch/remote1/one &&
	git log prefetch/remote2/two
'

test_expect_success 'loose-objects task' '
	# Repack everything so we know the state of the object dir
	git repack -adk &&

	# Hack to stop maintenance from running during "git commit"
	echo in use >.git/objects/maintenance.lock &&

	# Assuming that "git commit" creates at least one loose object
	test_commit create-loose-object &&
	rm .git/objects/maintenance.lock &&

	ls .git/objects >obj-dir-before &&
	test_file_not_empty obj-dir-before &&
	ls .git/objects/pack/*.pack >packs-before &&
	test_line_count = 1 packs-before &&

	# The first run creates a pack-file
	# but does not delete loose objects.
	git maintenance run --task=loose-objects &&
	ls .git/objects >obj-dir-between &&
	test_cmp obj-dir-before obj-dir-between &&
	ls .git/objects/pack/*.pack >packs-between &&
	test_line_count = 2 packs-between &&
	ls .git/objects/pack/loose-*.pack >loose-packs &&
	test_line_count = 1 loose-packs &&

	# The second run deletes loose objects
	# but does not create a pack-file.
	git maintenance run --task=loose-objects &&
	ls .git/objects >obj-dir-after &&
	cat >expect <<-\EOF &&
	info
	pack
	EOF
	test_cmp expect obj-dir-after &&
	ls .git/objects/pack/*.pack >packs-after &&
	test_cmp packs-between packs-after
'

test_expect_success 'maintenance.loose-objects.auto' '
	git repack -adk &&
	GIT_TRACE2_EVENT="$(pwd)/trace-lo1.txt" \
		git -c maintenance.loose-objects.auto=1 maintenance \
		run --auto --task=loose-objects 2>/dev/null &&
	test_subcommand ! git prune-packed --quiet <trace-lo1.txt &&
	for i in 1 2
	do
		printf data-A-$i | git hash-object -t blob --stdin -w &&
		GIT_TRACE2_EVENT="$(pwd)/trace-loA-$i" \
			git -c maintenance.loose-objects.auto=2 \
			maintenance run --auto --task=loose-objects 2>/dev/null &&
		test_subcommand ! git prune-packed --quiet <trace-loA-$i &&
		printf data-B-$i | git hash-object -t blob --stdin -w &&
		GIT_TRACE2_EVENT="$(pwd)/trace-loB-$i" \
			git -c maintenance.loose-objects.auto=2 \
			maintenance run --auto --task=loose-objects 2>/dev/null &&
		test_subcommand git prune-packed --quiet <trace-loB-$i &&
		GIT_TRACE2_EVENT="$(pwd)/trace-loC-$i" \
			git -c maintenance.loose-objects.auto=2 \
			maintenance run --auto --task=loose-objects 2>/dev/null &&
		test_subcommand git prune-packed --quiet <trace-loC-$i || return 1
	done
'

test_expect_success 'incremental-repack task' '
	packDir=.git/objects/pack &&
	for i in $(test_seq 1 5)
	do
		test_commit $i || return 1
	done &&

	# Create three disjoint pack-files with size BIG, small, small.
	echo HEAD~2 | git pack-objects --revs $packDir/test-1 &&
	test_tick &&
	git pack-objects --revs $packDir/test-2 <<-\EOF &&
	HEAD~1
	^HEAD~2
	EOF
	test_tick &&
	git pack-objects --revs $packDir/test-3 <<-\EOF &&
	HEAD
	^HEAD~1
	EOF
	rm -f $packDir/pack-* &&
	rm -f $packDir/loose-* &&
	ls $packDir/*.pack >packs-before &&
	test_line_count = 3 packs-before &&

	# the job repacks the two into a new pack, but does not
	# delete the old ones.
	git maintenance run --task=incremental-repack &&
	ls $packDir/*.pack >packs-between &&
	test_line_count = 4 packs-between &&

	# the job deletes the two old packs, and does not write
	# a new one because only one pack remains.
	git maintenance run --task=incremental-repack &&
	ls .git/objects/pack/*.pack >packs-after &&
	test_line_count = 1 packs-after
'

test_done
debug log:

solving be19ac7623 ...
found be19ac7623 in https://public-inbox.org/git/68727c555beecee7e86a89ed4a0c4d95f50430eb.1596731425.git.gitgitgadget@gmail.com/
found 71ac686c09 in https://public-inbox.org/git/e787403ea7e95dfeb30a0760fea4c56f64895d1e.1596731425.git.gitgitgadget@gmail.com/
found 8d54f93a10 in https://public-inbox.org/git/621375a3c99014c48568660bde062b7330d5a662.1596731425.git.gitgitgadget@gmail.com/
found 3dd99ef660 in https://public-inbox.org/git/85118ed5f19468d5051dd1579e35cae3c3114d24.1596731425.git.gitgitgadget@gmail.com/
found 406dc7c303 in https://public-inbox.org/git/df21bbb0005c0fa39917e326213423a9399308ab.1596728921.git.gitgitgadget@gmail.com/
found cdf0bf2e60 in https://public-inbox.org/git/69bfc6a4b2bb1a86788e69a2a3ac6134085aa798.1596728921.git.gitgitgadget@gmail.com/
found bcc7131818 in https://public-inbox.org/git/dddbcc4f3d28e2c00f153007b7db40733dbd572d.1596728921.git.gitgitgadget@gmail.com/
found 384294d111 in https://public-inbox.org/git/902b742032ae19087392538936cc81768a59e0e1.1596728921.git.gitgitgadget@gmail.com/
found 7b63b4ec0c in https://public-inbox.org/git/d5faef26af8896dc7a82c2b809a3af2724da8afd.1596728921.git.gitgitgadget@gmail.com/
found c4b9b4a6fe in https://public-inbox.org/git/2b9deb6d6a23e53bec75e109f2e3ef9217420425.1596728921.git.gitgitgadget@gmail.com/

applying [1/10] https://public-inbox.org/git/2b9deb6d6a23e53bec75e109f2e3ef9217420425.1596728921.git.gitgitgadget@gmail.com/
diff --git a/t/t7900-maintenance.sh b/t/t7900-maintenance.sh
new file mode 100755
index 0000000000..c4b9b4a6fe


applying [2/10] https://public-inbox.org/git/d5faef26af8896dc7a82c2b809a3af2724da8afd.1596728921.git.gitgitgadget@gmail.com/
diff --git a/t/t7900-maintenance.sh b/t/t7900-maintenance.sh
index c4b9b4a6fe..7b63b4ec0c 100755


applying [3/10] https://public-inbox.org/git/902b742032ae19087392538936cc81768a59e0e1.1596728921.git.gitgitgadget@gmail.com/
diff --git a/t/t7900-maintenance.sh b/t/t7900-maintenance.sh
index 7b63b4ec0c..384294d111 100755


applying [4/10] https://public-inbox.org/git/dddbcc4f3d28e2c00f153007b7db40733dbd572d.1596728921.git.gitgitgadget@gmail.com/
diff --git a/t/t7900-maintenance.sh b/t/t7900-maintenance.sh
index 384294d111..bcc7131818 100755


applying [5/10] https://public-inbox.org/git/69bfc6a4b2bb1a86788e69a2a3ac6134085aa798.1596728921.git.gitgitgadget@gmail.com/
diff --git a/t/t7900-maintenance.sh b/t/t7900-maintenance.sh
index bcc7131818..cdf0bf2e60 100755


applying [6/10] https://public-inbox.org/git/df21bbb0005c0fa39917e326213423a9399308ab.1596728921.git.gitgitgadget@gmail.com/
diff --git a/t/t7900-maintenance.sh b/t/t7900-maintenance.sh
index cdf0bf2e60..406dc7c303 100755


applying [7/10] https://public-inbox.org/git/85118ed5f19468d5051dd1579e35cae3c3114d24.1596731425.git.gitgitgadget@gmail.com/
diff --git a/t/t7900-maintenance.sh b/t/t7900-maintenance.sh
index 406dc7c303..3dd99ef660 100755


applying [8/10] https://public-inbox.org/git/621375a3c99014c48568660bde062b7330d5a662.1596731425.git.gitgitgadget@gmail.com/
diff --git a/t/t7900-maintenance.sh b/t/t7900-maintenance.sh
index 3dd99ef660..8d54f93a10 100755


applying [9/10] https://public-inbox.org/git/e787403ea7e95dfeb30a0760fea4c56f64895d1e.1596731425.git.gitgitgadget@gmail.com/
diff --git a/t/t7900-maintenance.sh b/t/t7900-maintenance.sh
index 8d54f93a10..71ac686c09 100755


applying [10/10] https://public-inbox.org/git/68727c555beecee7e86a89ed4a0c4d95f50430eb.1596731425.git.gitgitgadget@gmail.com/
diff --git a/t/t7900-maintenance.sh b/t/t7900-maintenance.sh
index 71ac686c09..be19ac7623 100755

Checking patch t/t7900-maintenance.sh...
Applied patch t/t7900-maintenance.sh cleanly.
Checking patch t/t7900-maintenance.sh...
Applied patch t/t7900-maintenance.sh cleanly.
Checking patch t/t7900-maintenance.sh...
Applied patch t/t7900-maintenance.sh cleanly.
Checking patch t/t7900-maintenance.sh...
Applied patch t/t7900-maintenance.sh cleanly.
Checking patch t/t7900-maintenance.sh...
Applied patch t/t7900-maintenance.sh cleanly.
Checking patch t/t7900-maintenance.sh...
Applied patch t/t7900-maintenance.sh cleanly.
Checking patch t/t7900-maintenance.sh...
Applied patch t/t7900-maintenance.sh cleanly.
Checking patch t/t7900-maintenance.sh...
Applied patch t/t7900-maintenance.sh cleanly.
Checking patch t/t7900-maintenance.sh...
Applied patch t/t7900-maintenance.sh cleanly.
Checking patch t/t7900-maintenance.sh...
Applied patch t/t7900-maintenance.sh cleanly.

index at:
100755 be19ac76230be68385ba3fc0a5266306470dabe2	t/t7900-maintenance.sh

Code repositories for project(s) associated with this inbox:

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).