diff --git a/plugin/set_test.go b/plugin/set_test.go index 0a974e88f..f29ecc8f4 100644 --- a/plugin/set_test.go +++ b/plugin/set_test.go @@ -45,12 +45,12 @@ func TestSet(t *testing.T) { set.RegisterProvisioner("example-2", new(MockProvisioner)) set.RegisterDatasource("example", new(MockDatasource)) set.RegisterDatasource("example-2", new(MockDatasource)) - set.SetVersion(pluginVersion.InitializePluginVersion( - "1.1.1", "")) + set.SetVersion(pluginVersion.NewPluginVersion( + "1.1.1", "", "")) outputDesc := set.description() - sdkVersion := pluginVersion.InitializePluginVersion(pluginVersion.Version, pluginVersion.VersionPrerelease) + sdkVersion := pluginVersion.NewPluginVersion(pluginVersion.Version, pluginVersion.VersionPrerelease, "") if diff := cmp.Diff(SetDescription{ Version: "1.1.1", SDKVersion: sdkVersion.String(), diff --git a/version/version.go b/version/version.go index d03214716..36bd9149a 100644 --- a/version/version.go +++ b/version/version.go @@ -6,7 +6,6 @@ package version import ( - "bytes" "fmt" "github.com/hashicorp/go-version" @@ -81,6 +80,7 @@ func NewPluginVersion(vers, versionPrerelease, versionMetadata string) *PluginVe if versionMetadata != "" { versionRawString = fmt.Sprintf("%s+%s", versionRawString, versionMetadata) } + // This call initializes the SemVer to make sure that if Packer crashes due // to an invalid SemVer it's at the very beginning of the Packer run. semVer := version.Must(version.NewVersion(versionRawString)) @@ -112,18 +112,18 @@ type PluginVersion struct { func (p *PluginVersion) SetMetadata(meta string) { p.versionMetadata = meta } + func (p *PluginVersion) FormattedVersion() string { - var versionString bytes.Buffer - fmt.Fprintf(&versionString, "%s", p.version) - if p.versionPrerelease != "" { - fmt.Fprintf(&versionString, "-%s", p.versionPrerelease) - - if GitCommit != "" { - fmt.Fprintf(&versionString, " (%s)", GitCommit) - } + versionString := p.semVer.String() + + // Given there could be some metadata already, we add the commit to the + // reported version as part of the metadata, with a `-` spearator if + // the metadata is already there, otherwise we make it the metadata + if GitCommit != "" { + versionString = fmt.Sprintf("%s (%s)", versionString, GitCommit) } - return versionString.String() + return versionString } func (p *PluginVersion) SemVer() *version.Version { diff --git a/version/version_test.go b/version/version_test.go index 1c67497fa..55e46a00b 100644 --- a/version/version_test.go +++ b/version/version_test.go @@ -101,6 +101,13 @@ func TestFormattedVersionString(t *testing.T) { ver := InitializePluginVersion("1.0.0", "dev") formatted := ver.FormattedVersion() if formatted != expectedVersion { - t.Fatalf("Expected formatted version %q; got %q", expectedVersion, formatted) + t.Errorf("Expected formatted version %q; got %q", expectedVersion, formatted) + } + + expectedVersion = fmt.Sprintf("1.0.0-dev+meta (%s)", GitCommit) + ver = NewPluginVersion("1.0.0", "dev", "meta") + formatted = ver.FormattedVersion() + if formatted != expectedVersion { + t.Errorf("Expected formatted version %q; got %q", expectedVersion, formatted) } }