From 8920a77b956d38be448dafff669c1db11c2a3b63 Mon Sep 17 00:00:00 2001 From: Erik G Date: Wed, 15 Jul 2020 15:10:29 +0200 Subject: [PATCH] fix: Reflect (pre)release in conventional file names. (#170) * fix: Reflect (pre)release in conventional file names. * test: Add tests for conventional file names. * test: Make test case variables consistent. Co-authored-by: Erik Geiser --- deb/deb.go | 10 +++++++++- deb/deb_test.go | 31 +++++++++++++++++++++++++++++++ rpm/rpm.go | 11 ++++++++++- rpm/rpm_test.go | 31 +++++++++++++++++++++++++++++++ 4 files changed, 81 insertions(+), 2 deletions(-) diff --git a/deb/deb.go b/deb/deb.go index 112eddf..1c99595 100644 --- a/deb/deb.go +++ b/deb/deb.go @@ -55,8 +55,16 @@ func (*Deb) ConventionalFileName(info *nfpm.Info) string { arch = info.Arch } + version := info.Version + if info.Release != "" { + version += "-" + info.Release + } + if info.Prerelease != "" { + version += "~" + info.Prerelease + } + // package_version_architecture.package-type - return fmt.Sprintf("%s_%s_%s.deb", info.Name, info.Version, arch) + return fmt.Sprintf("%s_%s_%s.deb", info.Name, version, arch) } // Package writes a new deb package to the given writer using the given info. diff --git a/deb/deb_test.go b/deb/deb_test.go index 85ca9c4..4555c78 100644 --- a/deb/deb_test.go +++ b/deb/deb_test.go @@ -386,6 +386,37 @@ func TestMultilineFields(t *testing.T) { assert.Equal(t, string(bts), w.String()) } +func TestDEBConventionalFileName(t *testing.T) { + info := &nfpm.Info{ + Name: "testpkg", + Arch: "all", + } + + testCases := []struct { + Version string + Release string + Prerelease string + Expected string + }{ + {Version: "1.2.3", Release: "", Prerelease: "", + Expected: fmt.Sprintf("%s_1.2.3_%s.deb", info.Name, info.Arch)}, + {Version: "1.2.3", Release: "4", Prerelease: "", + Expected: fmt.Sprintf("%s_1.2.3-4_%s.deb", info.Name, info.Arch)}, + {Version: "1.2.3", Release: "4", Prerelease: "5", + Expected: fmt.Sprintf("%s_1.2.3-4~5_%s.deb", info.Name, info.Arch)}, + {Version: "1.2.3", Release: "", Prerelease: "5", + Expected: fmt.Sprintf("%s_1.2.3~5_%s.deb", info.Name, info.Arch)}, + } + + for _, testCase := range testCases { + info.Version = testCase.Version + info.Release = testCase.Release + info.Prerelease = testCase.Prerelease + + assert.Equal(t, testCase.Expected, Default.ConventionalFileName(info)) + } +} + func TestDebChangelogControl(t *testing.T) { info := &nfpm.Info{ Name: "changelog-test", diff --git a/rpm/rpm.go b/rpm/rpm.go index 1e3806f..8d240de 100644 --- a/rpm/rpm.go +++ b/rpm/rpm.go @@ -69,8 +69,17 @@ func ensureValidArch(info *nfpm.Info) *nfpm.Info { // http://ftp.rpm.org/max-rpm/ch-rpm-file-format.html func (*RPM) ConventionalFileName(info *nfpm.Info) string { info = ensureValidArch(info) + + version := info.Version + if info.Release != "" { + version += "-" + info.Release + } + if info.Prerelease != "" { + version += "~" + info.Prerelease + } + // name-version-release.architecture.rpm - return fmt.Sprintf("%s-%s.%s.rpm", info.Name, info.Version, info.Arch) + return fmt.Sprintf("%s-%s.%s.rpm", info.Name, version, info.Arch) } // Package writes a new RPM package to the given writer using the given info. diff --git a/rpm/rpm_test.go b/rpm/rpm_test.go index 1c8c94d..cd9ab30 100644 --- a/rpm/rpm_test.go +++ b/rpm/rpm_test.go @@ -302,6 +302,37 @@ func TestRPMMultiArch(t *testing.T) { } } +func TestRPMConventionalFileName(t *testing.T) { + info := &nfpm.Info{ + Name: "testpkg", + Arch: "noarch", + } + + testCases := []struct { + Version string + Release string + Prerelease string + Expected string + }{ + {Version: "1.2.3", Release: "", Prerelease: "", + Expected: fmt.Sprintf("%s-1.2.3.%s.rpm", info.Name, info.Arch)}, + {Version: "1.2.3", Release: "4", Prerelease: "", + Expected: fmt.Sprintf("%s-1.2.3-4.%s.rpm", info.Name, info.Arch)}, + {Version: "1.2.3", Release: "4", Prerelease: "5", + Expected: fmt.Sprintf("%s-1.2.3-4~5.%s.rpm", info.Name, info.Arch)}, + {Version: "1.2.3", Release: "", Prerelease: "5", + Expected: fmt.Sprintf("%s-1.2.3~5.%s.rpm", info.Name, info.Arch)}, + } + + for _, testCase := range testCases { + info.Version = testCase.Version + info.Release = testCase.Release + info.Prerelease = testCase.Prerelease + + assert.Equal(t, testCase.Expected, Default.ConventionalFileName(info)) + } +} + func TestRPMChangelog(t *testing.T) { info := exampleInfo() info.Changelog = "../testdata/changelog.yaml"