File: gitdesc.sh

package info (click to toggle)
lrzip 0.651-3
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,356 kB
  • sloc: ansic: 12,676; cpp: 2,865; sh: 568; makefile: 220; asm: 197
file content (105 lines) | stat: -rwxr-xr-x 1,934 bytes parent folder | download | duplicates (3)
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
#!/bin/bash
# Peter Hyman, pete@peterhyman.com
# December 2020

# This program will return commit references based on Tags and Annotated Tags from git describe

usage() {
cat >&2  <<EOF
$(basename $0) command [-r]
all - entire git describe
commit - commit, omitting v
tagrev - tag revision count
major - major release version
ninor - minor release version
micro - micro release version
version - M.mic + [tag release count-HEAD commit]
-r -- get release tag only
EOF
exit 1
}

# showw message and usage
die() {
	echo "$1"
	usage
}

# return variables
# everything, with leading `v' and leading `g' for commits
describe_tag=
# abbreviated commit
commit=
# count of commits from last tag
tagrev=
# major version
major=
# minor version
minor=
# micro version
micro=
# get release or tag?
tagopt="--tags"

# get whole commit and parse
# if tagrev > 0 then add it and commit to micro version
# Expected format is:
# v#.###-g#######
init() {
	describe_tag=$(git describe $tagopt --long --abbrev=7)
	describe_tag=${describe_tag/v/}
	describe_tag=${describe_tag/g/}
	commit=$(echo $describe_tag | cut -d- -f3)
	tagrev=$(echo $describe_tag | cut -d- -f2)
	version=$(echo $describe_tag | cut -d- -f1)
	micro=${version: -2}
	[ $tagrev -gt 0 ] && micro=$micro-$tagrev-$commit
	minor=${version: -3:1}
	major=$(echo $version | cut -d. -f1)
}

[ ! $(which git) ] && die "Something very wrong: git not found."

[ $# -eq 0 ] && die "Must provide a command and optional argument."

# are we getting a release only?
if [ $# -eq 2 ]; then
	if [ $2 = "-r" ]; then
		tagopt=""
	else
		die "Invalid option. Must be -r or nothing."
	fi
fi

init

case "$1" in
	"all" )
		retval=$describe_tag
		;;
	"commit" )
		retval=$commit
		;;
	"tagrev" )
		retval=$tagrev
		;;
	"version" )
		retval=$version
		;;
	"major" )
		retval=$major
		;;
	"minor" )
		retval=$minor
		;;
	"micro" )
		retval=$micro
		;;
	* )
		die "Invalid command."
		;;
esac

echo $retval

exit 0