File: changelog.upstream.sh

package info (click to toggle)
radeontool 1.6.3-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster, jessie, jessie-kfreebsd, sid, stretch
  • size: 2,064 kB
  • ctags: 7,197
  • sloc: ansic: 15,599; sh: 11,054; makefile: 48
file content (146 lines) | stat: -rw-r--r-- 2,943 bytes parent folder | download
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
#!/bin/sh
# Generate debian/changelog.upstream from debian/changelog and
# the git revision log.  Inspired by Gerrit Pape’s
# debian/changelog.upstream.sh, from the git-core Debian package.

set -e

# If argument matches /^Version: /, output remaining text.
# Result is true if and only if argument matches.
version_line() {
	local line result
	line=$1
	result=${line#Version: }

	if test "$result" = "$line"
	then
		return 1
	else
		printf "%s\n" "$result"
		return 0
	fi
}

# If argument matches /^\* New.*snapshot.*commit /,
# output remaining text.
# Result is true if and only if argument matches.
commit_id_line() {
	local line result
	line=$1
	result=${line#\* New*snapshot*commit }

	if test "$result" = "$line"
	then
		return 1
	else
		printf "%s\n" "$result"
		return 0
	fi
}

# Read standard input, scanning for a changelog entry of the
# form “New snapshot, taken from upstream commit <blah>.”
# Output is <blah>.
# Fails and writes a message to standard error if no such entry is
# found before the next Version: line with a different upstream
# version (or EOF).
# $1 is the upstream version sought.
read_commit_id() {
	local upstream_version line version cid
	upstream_version=$1

	while read line
	do
		if
			version=$(version_line "$line") &&
			test "${version%-*}" != "$upstream_version"
		then
			break
		fi

		if cid=$(commit_id_line "$line")
		then
			printf "%s\n" "${cid%.}"
			return 0
		fi
	done

	echo >&2 "No commit id for $upstream_version"
	return 1
}

last=none
last_cid=none
# Add a list of all revisions up to $last to debian/changelog.upstream
# and set last=$2.
# $1 is a user-readable name for the commit $2
add_version() {
	local new new_cid limiter
	new=$1
	new_cid=$2

	if test "$last" = none
	then
		: > debian/changelog.upstream+
		last=$new
		last_cid=$new_cid
		return 0
	fi

	if test "$new" = "$last"
	then
		return 0
	fi

	exec >> debian/changelog.upstream+

	if test "$new" = none
	then
		# pre-history
		git show radeontool-1.6.0:CHANGES
	else
		echo "Version $last"
		echo "Version $last" | tr "[:print:]" -
		echo

		if test "$new" = 1.5
		then
			# beginning of tracked history
			git shortlog --no-merges "$last_cid"
		else
			git shortlog --no-merges "$new_cid".."$last_cid"
		fi
		echo
	fi

	last=$new
	last_cid=$new_cid
}

v="radeontool-"
dpkg-parsechangelog --format rfc822 --all | {
while read line
do
	if version=$(version_line "$line")
	then
		# strip Debian revision
		upstream_version=${version%-*}

		if test "$upstream_version" = "1.5"
		then
			# pre-history
			add_version "$upstream_version" "untracked"
		elif git rev-parse --verify -q "$v$upstream_version" > /dev/null
		then
			# upstream release
			add_version "$upstream_version" "$v$upstream_version"
		else
			# snapshot
			cid=$(read_commit_id "$upstream_version") || exit 1
			add_version "$upstream_version" "$cid"
		fi
	fi
done
add_version none none
}
mv -f debian/changelog.upstream+ debian/changelog.upstream