summaryrefslogtreecommitdiff
path: root/t/lib-bundle.sh
blob: cf7ed818b246ac314af875bc42ad74e4ae661fd5 (plain)
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
# Library of git-bundle related functions.

# Display the pack data contained in the bundle file, bypassing the
# header that contains the signature, prerequisites and references.
convert_bundle_to_pack () {
	while read x && test -n "$x"
	do
		:;
	done
	cat
}

# Check count of objects in a bundle file.
# We can use "--thin" opiton to check thin pack, which must be fixed by
# command `git-index-pack --fix-thin --stdin`.
test_bundle_object_count () {
	thin=
	if test "$1" = "--thin"
	then
		thin=t
		shift
	fi
	if test $# -ne 2
	then
		echo >&2 "args should be: <bundle> <count>"
		return 1
	fi
	bundle=$1
	pack=$bundle.pack
	convert_bundle_to_pack <"$bundle" >"$pack" &&
	if test -n "$thin"
	then
		mv "$pack" "$bundle.thin.pack" &&
		git index-pack --stdin --fix-thin "$pack" <"$bundle.thin.pack"
	else
		git index-pack "$pack"
	fi || return 1
	count=$(git show-index <"${pack%pack}idx" | wc -l) &&
	test $2 = $count && return 0
	echo >&2 "error: object count for $bundle is $count, not $2"
	return 1
}