Skip to content

Commit 1f9aa80

Browse files
committed
Recognize upstream pre-release versions
so that tilde '~' instead of '-' is used in upstream tarball and in debian/changelog, e.g. 1.0.0~rc1 instead of 1.0.0-rc.1 Thanks: nicoo Closes: #981421
1 parent 8d1d2a1 commit 1f9aa80

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed

template.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -318,14 +318,14 @@ func writeDebianWatch(dir, gopkg, debsrc string, hasRelease bool, repack bool) e
318318
}
319319
defer f.Close()
320320

321-
filenamemanglePattern := `s%%(?:.*?)?v?(\d[\d.]*)\.tar\.gz%%%s-$1.tar.gz%%`
322-
uversionmanglePattern := `s/(\d)[_\.\-\+]?(RC|rc|pre|dev|beta|alpha)[.]?(\d*)$/\$1~\$2\$3/`
321+
filenamemanglePattern := `s%(?:.*?)?v?(\d[\d.]*)\.tar\.gz%@PACKAGE@-$1.tar.gz%`
322+
uversionmanglePattern := `s/(\d)[_\.\-\+]?(RC|rc|pre|dev|beta|alpha)[.]?(\d*)$/$1~$2$3/`
323323

324324
if hasRelease {
325325
log.Printf("Setting debian/watch to track release tarball")
326-
fmt.Fprintf(f, "version=4\n")
327-
fmt.Fprintf(f, `opts="filenamemangle=`+filenamemanglePattern+`,\`+"\n", debsrc)
328-
fmt.Fprintf(f, ` uversionmangle=`+uversionmanglePattern)
326+
fmt.Fprint(f, "version=4\n")
327+
fmt.Fprint(f, `opts="filenamemangle=`+filenamemanglePattern+`,\`+"\n")
328+
fmt.Fprint(f, ` uversionmangle=`+uversionmanglePattern)
329329
if repack {
330330
fmt.Fprintf(f, `,\`+"\n")
331331
fmt.Fprintf(f, ` dversionmangle=s/\+ds\d*$//,repacksuffix=+ds1`)

version.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ var (
2020
// from https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string
2121
// with leading "v" added.
2222
semverRegexp = regexp.MustCompile(`^v(?P<major>0|[1-9]\d*)\.(?P<minor>0|[1-9]\d*)\.(?P<patch>0|[1-9]\d*)(?:-(?P<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?P<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$`)
23+
24+
// uversionPrereleaseRegexp checks for upstream pre-release
25+
// so that '-' can be replaced with '~' in pkgVersionFromGit.
26+
// To be kept in sync with the regexp portion of uversionmanglePattern in template.go
27+
uversionPrereleaseRegexp = regexp.MustCompile(`(\d)[_\.\-\+]?(RC|rc|pre|dev|beta|alpha)[.]?(\d*)$`)
2328
)
2429

2530
// pkgVersionFromGit determines the actual version to be packaged
@@ -66,9 +71,15 @@ func pkgVersionFromGit(gitdir string, u *upstream, forcePrerelease bool) (string
6671
}
6772

6873
u.commitIsh = latestTag
69-
u.version = strings.TrimLeftFunc(latestTag, func(r rune) bool {
70-
return !unicode.IsNumber(r)
71-
})
74+
75+
// Mangle latestTag into Debian upstream_version
76+
// TODO: Move to function and write unit test?
77+
u.version = strings.TrimLeftFunc(
78+
uversionPrereleaseRegexp.ReplaceAllString(latestTag, "$1~$2$3"),
79+
func(r rune) bool {
80+
return !unicode.IsNumber(r)
81+
},
82+
)
7283

7384
if forcePrerelease {
7485
log.Printf("INFO: Force packaging master (prerelease) as requested by user")

0 commit comments

Comments
 (0)