From 3beb0a57ee9615bcb9919ef43e3dd632c3edfce4 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Wed, 25 May 2016 16:08:01 +0200 Subject: [PATCH] Added semver to handle versions in libraries --- src/arduino.cc/repository/libraries/db/db.go | 7 ++-- .../repository/libraries/db/index.go | 24 +++++++------- .../repository/libraries/db/library.go | 7 +++- .../repository/libraries/db/versioning.go | 33 +++++++------------ 4 files changed, 33 insertions(+), 38 deletions(-) diff --git a/src/arduino.cc/repository/libraries/db/db.go b/src/arduino.cc/repository/libraries/db/db.go index 54e83dbe..5534fe04 100644 --- a/src/arduino.cc/repository/libraries/db/db.go +++ b/src/arduino.cc/repository/libraries/db/db.go @@ -3,6 +3,7 @@ package db import ( "encoding/json" "errors" + "github.com/blang/semver" "io" "log" "os" @@ -28,7 +29,7 @@ type Library struct { // A release type Release struct { LibraryName string // The library name - Version Version + Version semver.Version Author string Maintainer string License string @@ -163,9 +164,7 @@ func (db *DB) FindLatestReleaseOfLibrary(lib *Library) (*Release, error) { found = rel continue } - if less, err := found.Version.Less(rel.Version); err != nil { - return nil, err - } else if less { + if found.Version.LT(rel.Version) { found = rel } } diff --git a/src/arduino.cc/repository/libraries/db/index.go b/src/arduino.cc/repository/libraries/db/index.go index 5e9b2f81..143fedf5 100644 --- a/src/arduino.cc/repository/libraries/db/index.go +++ b/src/arduino.cc/repository/libraries/db/index.go @@ -1,5 +1,7 @@ package db +import "github.com/blang/semver" + // Output structure used to generate library_index.json file type indexOutput struct { Libraries []indexLibrary `json:"libraries"` @@ -7,17 +9,17 @@ type indexOutput struct { // Output structure used to generate library_index.json file type indexLibrary struct { - LibraryName string `json:"name"` - Version Version `json:"version"` - Author string `json:"author"` - Maintainer string `json:"maintainer"` - License string `json:"license,omitempty"` - Sentence string `json:"sentence"` - Paragraph string `json:"paragraph,omitempty"` - Website string `json:"website,omitempty"` - Category string `json:"category,omitempty"` - Architectures []string `json:"architectures,omitempty"` - Types []string `json:"types,omitempty"` + LibraryName string `json:"name"` + Version semver.Version `json:"version"` + Author string `json:"author"` + Maintainer string `json:"maintainer"` + License string `json:"license,omitempty"` + Sentence string `json:"sentence"` + Paragraph string `json:"paragraph,omitempty"` + Website string `json:"website,omitempty"` + Category string `json:"category,omitempty"` + Architectures []string `json:"architectures,omitempty"` + Types []string `json:"types,omitempty"` URL string `json:"url"` ArchiveFileName string `json:"archiveFileName"` diff --git a/src/arduino.cc/repository/libraries/db/library.go b/src/arduino.cc/repository/libraries/db/library.go index a4012684..4ac9c59a 100644 --- a/src/arduino.cc/repository/libraries/db/library.go +++ b/src/arduino.cc/repository/libraries/db/library.go @@ -11,9 +11,14 @@ func FromLibraryToRelease(library *metadata.LibraryMetadata) *Release { architectures[i] = strings.TrimSpace(v) } + version, err := ParseVersion(library.Version) + if err != nil { + panic(err) + } + dbRelease := Release{ LibraryName: library.Name, - Version: VersionFromString(library.Version), + Version: version, Author: library.Author, Maintainer: library.Maintainer, License: library.License, diff --git a/src/arduino.cc/repository/libraries/db/versioning.go b/src/arduino.cc/repository/libraries/db/versioning.go index 72be7768..38c6809f 100644 --- a/src/arduino.cc/repository/libraries/db/versioning.go +++ b/src/arduino.cc/repository/libraries/db/versioning.go @@ -1,29 +1,18 @@ package db -import "encoding/json" +import "strings" +import "github.com/blang/semver" -type Version struct { - version string -} - -func (version *Version) Less(other Version) (bool, error) { - // TODO: apply semantic versioning - return version.version < other.version, nil -} +func ParseVersion(version string) (semver.Version, error) { + //version = replaceEndingLetter(version, 'b') -func (version *Version) String() string { - return version.version -} + //version = removeLeading(version, '0') -func (version *Version) UnmarshalJSON(data []byte) error { - return json.Unmarshal(data, &version.version) -} - -func (version *Version) MarshalJSON() ([]byte, error) { - // Encode version as a string - return json.Marshal(version.version) -} + versionParts := strings.Split(version, ".") + for i := len(versionParts); i < 3; i++ { + versionParts = append(versionParts, "0") + } + version = strings.Join(versionParts, ".") -func VersionFromString(str string) Version { - return Version{version: str} + return semver.Parse(version) }