2016-02-22 14:44:12 -05:00
|
|
|
# Versioning Library for Go
|
Use the hashicorp/go-getter to download files
* removed packer.Cache and references since packer.Cache is never used except in the download step. The download step now uses the new func packer.CachePath(targetPath) for this, the behavior is the same.
* removed download code from packer that was reimplemented into the go-getter library: progress bar, http download restart, checksuming from file, skip already downloaded files, symlinking, make a download cancellable by context.
* on windows if packer is running without symlinking rights and we are getting a local file, the file will be copied instead to avoid errors.
* added unit tests for step_download that are now CI tested on windows, mac & linux.
* files are now downloaded under cache dir `sha1(filename + "?checksum=" + checksum) + file_extension`
* since the output dir is based on the source url and the checksum, when the checksum fails, the file is auto deleted.
* a download file is protected and locked by a file lock,
* updated docs
* updated go modules and vendors
2019-03-13 07:11:58 -04:00
|
|
|
[![Build Status](https://travis-ci.org/hashicorp/go-version.svg?branch=master)](https://travis-ci.org/hashicorp/go-version)
|
2016-02-22 14:44:12 -05:00
|
|
|
|
|
|
|
go-version is a library for parsing versions and version constraints,
|
|
|
|
and verifying versions against a set of constraints. go-version
|
|
|
|
can sort a collection of versions properly, handles prerelease/beta
|
|
|
|
versions, can increment versions, etc.
|
|
|
|
|
|
|
|
Versions used with go-version must follow [SemVer](http://semver.org/).
|
|
|
|
|
|
|
|
## Installation and Usage
|
|
|
|
|
|
|
|
Package documentation can be found on
|
|
|
|
[GoDoc](http://godoc.org/github.com/hashicorp/go-version).
|
|
|
|
|
|
|
|
Installation can be done with a normal `go get`:
|
|
|
|
|
|
|
|
```
|
|
|
|
$ go get github.com/hashicorp/go-version
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Version Parsing and Comparison
|
|
|
|
|
|
|
|
```go
|
|
|
|
v1, err := version.NewVersion("1.2")
|
|
|
|
v2, err := version.NewVersion("1.5+metadata")
|
|
|
|
|
|
|
|
// Comparison example. There is also GreaterThan, Equal, and just
|
|
|
|
// a simple Compare that returns an int allowing easy >=, <=, etc.
|
|
|
|
if v1.LessThan(v2) {
|
|
|
|
fmt.Printf("%s is less than %s", v1, v2)
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Version Constraints
|
|
|
|
|
|
|
|
```go
|
|
|
|
v1, err := version.NewVersion("1.2")
|
|
|
|
|
|
|
|
// Constraints example.
|
|
|
|
constraints, err := version.NewConstraint(">= 1.0, < 1.4")
|
|
|
|
if constraints.Check(v1) {
|
|
|
|
fmt.Printf("%s satisfies constraints %s", v1, constraints)
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
#### Version Sorting
|
|
|
|
|
|
|
|
```go
|
|
|
|
versionsRaw := []string{"1.1", "0.7.1", "1.4-beta", "1.4", "2"}
|
|
|
|
versions := make([]*version.Version, len(versionsRaw))
|
|
|
|
for i, raw := range versionsRaw {
|
|
|
|
v, _ := version.NewVersion(raw)
|
|
|
|
versions[i] = v
|
|
|
|
}
|
|
|
|
|
|
|
|
// After this, the versions are properly sorted
|
|
|
|
sort.Sort(version.Collection(versions))
|
|
|
|
```
|
|
|
|
|
|
|
|
## Issues and Contributing
|
|
|
|
|
|
|
|
If you find an issue with this library, please report an issue. If you'd
|
|
|
|
like, we welcome any contributions. Fork this library and submit a pull
|
|
|
|
request.
|