@@ -11,6 +11,7 @@ cr_other_pattern=":running:|$(printf "\xf0\x9f\x8f\x83")"
11
11
# into one of "major", "minor", "patch", "docs", "other", or
12
12
# "unknown", ignoring the '!'
13
13
cr::symbol-type-raw () {
14
+ [[ ${1} == " ⚠" ]] && echo " HERE"
14
15
case $1 in
15
16
@ (${cr_major_pattern} )? (' !' ))
16
17
echo " major"
@@ -66,6 +67,52 @@ git::ensure-release-branch() {
66
67
fi
67
68
}
68
69
70
+ # git::export-version-from-branch outputs the current version
71
+ # for the given branch (as the argument) as exported variables
72
+ # (${maj,min,patch} _ver, last_tag).
73
+ git::export-version-from-branch() {
74
+ local target_branch=${1?must specify a branch}
75
+ local current_branch=$(git branch --show-current -q)
76
+
77
+ local expected_maj_ver
78
+ local expected_min_ver
79
+ if [[ ${target_branch} =~ release- 0 .([[: digit: ]]+ ) ]]; then
80
+ expected_maj_ver=0
81
+ expected_min_ver=${BASH_REMATCH[1]}
82
+ elif [[ ${target_branch} =~ release- ([[: digit: ]]+ ) ]]; then
83
+ expected_maj_ver=${BASH_REMATCH[1]}
84
+ else
85
+ echo "branch ${target_branch} does not appear to be for a release -- it should be release- X or release- 0 .Y" >& 2
86
+ exit 1
87
+ fi
88
+
89
+ local tag_pattern='v([[:digit:]]+).([[:digit:]]+).([[:digit:]]+)'
90
+
91
+ git checkout -q ${target_branch}
92
+
93
+ # make sure we've got a tag that matches *some* release
94
+ last_tag=$(git describe --tags --abbrev=0 ) # try to fetch just the "current" tag name
95
+ if [[ ! ${last_tag} =~ ${tag_pattern} ]]; then
96
+ # it's probably for a previous version
97
+ echo "tag ${last_tag} does not appear to be for a release -- it should be vX.Y.Z" >& 2
98
+ git checkout -q ${current_branch}
99
+ exit 1
100
+ fi
101
+
102
+ export min_ver=${BASH_REMATCH[2]}
103
+ export patch_ver=${BASH_REMATCH[3]}
104
+ export maj_ver=${BASH_REMATCH[1]}
105
+ export last_tag=${last_tag}
106
+
107
+ if ${2:- 1} && ([[ ${maj_ver} != ${expected_maj_ver} ]] || [[ ${maj_ver} == 0 && ${min_ver} != ${expected_min_ver} ]]); then
108
+ echo "tag ${last_tag} does not appear to be for a the right release (${target_branch} )" >& 2
109
+ git checkout ${current_branch}
110
+ exit 1
111
+ fi
112
+
113
+ git checkout -q ${current_branch}
114
+ }
115
+
69
116
# git::export-current-version outputs the current version
70
117
# as exported variables (${maj,min,patch} _ver, last_tag) after
71
118
# checking that we're on the right release branch.
@@ -75,25 +122,26 @@ git::export-current-version() {
75
122
76
123
# deal with the release-0 .1 branch, or similar
77
124
local release_ver=${BASH_REMATCH[1]}
78
- maj_ver=${release_ver}
79
- local tag_pattern='v${maj_ver} .([[: digit: ]]+ ).([[: digit]]+ )'
80
- if [[ ${maj_ver} =~ 0 \.([[: digit: ]]+ ) ]]; then
81
- maj_ver=0
82
- min_ver=${BASH_REMATCH[1]}
83
- local tag_pattern="v0 .(${min_ver} ).([[: digit: ]]+ )"
125
+ local expected_maj_ver=${release_ver}
126
+ if [[ ${expected_maj_ver} =~ 0 \.([[: digit: ]]+ ) ]]; then
127
+ expected_maj_ver=0
128
+ local expected_min_ver=${BASH_REMATCH[1]}
84
129
fi
85
130
86
- # make sure we've got a tag that matches our release branch
87
- last_tag=$(git describe --tags --abbrev=0 ) # try to fetch just the "current" tag name
88
- if [[ ! ${last_tag} =~ ${tag_pattern} ]]; then
89
- echo "tag ${last_tag} does not appear to be a release for this release (${release_ver} )-- it should be v${maj_ver} .Y.Z" >& 2
90
- exit 1
131
+ git::export-version-from-branch "release-${release_ver} " false
132
+
133
+ local last_tag_branch=""
134
+ if [[ ${maj_ver} == "0 " && ${min_ver} - eq $((expected_min_ver- 1 )) ]]; then
135
+ echo " most recent tag is a release behind (${last_tag} ), checking previous release branch to be safe" >&2
136
+ last_tag_branch=" release-0.${min_ver} "
137
+ elif [[ ${maj_ver} -eq $(( expected_maj_ver- 1 )) ]]; then
138
+ echo " most recent tag is a release behind (${last_tag} ), checking previous release branch to be safe" >&2
139
+ last_tag_branch=" release-${maj_ver} "
91
140
fi
92
141
93
- export min_ver=${BASH_REMATCH[1]}
94
- export patch_ver=${BASH_REMATCH[2]}
95
- export maj_ver=${maj_ver}
96
- export last_tag=${last_tag}
142
+ if [[ -n " ${last_tag_branch} " ]]; then
143
+ git::export-version-from-branch ${last_tag_branch} true
144
+ fi
97
145
}
98
146
99
147
# git::next-version figures out the next version to tag
0 commit comments