summaryrefslogtreecommitdiff
path: root/tests/lib-gdr
blob: ed55ecf41613ecfe9aa932b73c7eb12a244df424 (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
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
#

: ${GDR_TEST_DEBUG=-D}
export GDR_TEST_DEBUG

t-git-debrebase () {
	local gdr=${DGIT_GITDEBREBASE_TEST-git-debrebase}
	: '
{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{'
	$gdr	$GDR_TEST_OPTS $GDR_TEST_DEBUG $t_gdr_xopts "$@"
	: '}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
'
}

t-gdr-good () {
	local state=$1
	local beforetag=$2 # say HEAD to skip this check
	# state should be one of
	#   laundered
	#   stitched
	#   patches

	git diff --quiet ${beforetag-t.before} -- ':.' ':!debian/patches'

	local etype netype

	case $state in
	laundered)	etype=Upstream	;;
	stitched)	etype=Pseudomerge ;;
	pushed)		etype=AddPatches; netype=Pseudomerge ;;
	esac

	t-git-debrebase analyse >../anal.check
	expect=`git rev-parse HEAD`
	exec <../anal.check
	local cid ctype info nparents
	while read cid ctype info; do
		: ===== $cid $ctype $info =====
		test $cid = $expect
		local cetype=$etype
		if [ "x$ctype" = "x$etype" ]; then cetype=SAME; fi
		local parents="`git log -n1 --pretty=format:%P $cid`"
		expect="$parents"
		enparents=1
		: "$ctype/$cetype" "$parents"
		case "$ctype/$cetype" in
		Pseudomerge/SAME)
			expect=${info#Contributor=}
			expect=${expect%% *}
			enparents=2
			git diff --quiet $expect..$cid
			etype=Upstream
			;;
		Packaging/SAME|\
		Packaging/Upstream)
			git diff --quiet $expect..$cid -- ':.' ':!debian' 
			git diff --quiet $expect..$cid -- ':debian/patches'
			etype=Packaging
			;;
		AddPatches/SAME)
			git diff --quiet $expect..$cid -- \
				':.' ':!debian/patches'
			etype=$netype
			netype=Upstream
			;;
		Changelog/Packaging|\
		Changelog/Upstream)
			git diff --quiet $expect..$cid -- \
				':.' ':!debian/changelog'
			etype=Packaging
			;;
		Upstream/SAME)
			git diff --quiet $expect..$cid -- ':debian'
			;;
		BreakwaterUpstreamMerge/Upstream| \
		BreakwaterUpstreamMerge/Packaging)
			break
			;;
		*)
			fail "etype=$etype ctype=$ctype cetype=$cetype $cid"
			;;
		esac

		local cnparents=`printf "%s" "$parents" | wc -w`
		test $cnparents = $enparents

		case "$parents" in
		*"$expect"*)	;;
		*)		fail 'unexpected parent' ;;
		esac

	done
}

t-some-changes () {
	local token=$1

	echo >>debian/zorkmid "// debian $token"
	git add debian/zorkmid
	git commit -m "DEBIAN add zorkmid ($token)"

	echo >>src.c "// upstream $token"
	git commit -a -m "UPSTREAM edit src.c ($token)"

	for f in debian/zorkmid src.c; do
		echo "// both! $token" >>$f
		git add $f
	done
	git commit -m "MIXED add both ($token)"
}