aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/check-version
blob: 1770ba5f41859f26e4a69c31bdbef1a8779fa9c3 (plain) (blame)
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
#!/bin/sh

# $1	- version string
# options:
#	-c	colored grep (implies -d)
#	-d	debug
#	-r	release (exit status error; when called from Makefile)

# To validate relevant files are up to date, you would run the script
# from command line before tagging:
#
#	$ scripts/check-version -cr <tag>

set -eu
#set -x

# You would typically add/remove files to/from the list
files="Documentation/user-manual.txt Makefile README ReleaseNotes/ReleaseNotes.txt"

whine() {
	echo "$0: $*" >&2
}

croak() {
	whine "$*"
	exit 1
}

color=n
debug=n
release=n
while getopts cdr opt; do
	case $opt in
		c)
			color=y
			debug=y
			;;
		d)
			debug=y
			;;
		r)
			release=y
			;;
		*)
			croak "invalid option"
			;;
	esac
done
shift $(($OPTIND - 1))

if [ $debug = y ]; then
	opts=-n
else
	opts=-q
fi
[ $color = n ] || opts="${opts:+$opts }--color"

v=${1:-}
v=${v#v}
case $v in
	*-*)
		# Ignore development versions
		if [ $release = y ]; then
			croak "'$v' not a release tag"
		else
			exit 0
		fi
		;;
	''|*[!.0-9]*)
		croak "invalid version string '$v'"
		;;
esac
whine "checking for version $v"

saveIFS=$IFS
IFS=.
set -- $v
IFS=$saveIFS
v=
while [ $# -gt 0 ]; do
	v=${v:+$v\\.}$1
	shift
done

sts=0
for f in $files; do
	grep	-EH $opts \
		-e "(VERSION=|[Ss]ubsurface[[:blank:]]+)?\<v?$v[.0-9]*\>" \
		$f || {
		[ $release != y ] || sts=1
		whine "'$f' may need updating"
	}
done

exit $sts