Skip to content

Instantly share code, notes, and snippets.

@dweomer
Created April 27, 2018 16:54
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save dweomer/d8af5cb097a16e9880fc14ad4715af96 to your computer and use it in GitHub Desktop.
Save dweomer/d8af5cb097a16e9880fc14ad4715af96 to your computer and use it in GitHub Desktop.
2018-04-26 - Golang Phoenix - Package Madness! - https://www.meetup.com/Golang-Phoenix/events/249838312/
package main
// https://www.meetup.com/Golang-Phoenix/events/249838312/
// I was assigned the 'gopkg.in/src-d/go-git.v4' package. Below is a simple program that will take a Git URL,
// clone the repo, and scan SemVer-compliant tags then output the most recent, as per SemVer, version.
import (
"fmt"
"io/ioutil"
"os"
"strings"
"github.com/blang/semver"
git "gopkg.in/src-d/go-git.v4"
"gopkg.in/src-d/go-git.v4/plumbing"
)
func main() {
tmp, err := ioutil.TempDir("", "")
if err != nil {
panic(err)
}
url := "https://github.com/src-d/go-git"
if len(os.Args) > 1 {
url = os.Args[1]
}
repo, err := git.PlainClone(tmp, false, &git.CloneOptions{
URL: url,
Progress: nil,
})
if err != nil {
panic(err)
}
iter, err := repo.Tags()
if err != nil {
panic(err)
}
var latest *semver.Version
err = iter.ForEach(func(ref *plumbing.Reference) (err error) {
strs := ref.Strings()
name := strings.TrimPrefix(strs[0], "refs/tags/v")
if i := strings.LastIndex(name, "refs/tags"); i < 0 {
version := semver.MustParse(name)
if latest == nil || latest.Compare(version) < 0 {
latest = &version
}
}
return
})
if err != nil {
panic(err)
}
fmt.Fprintf(os.Stdout, "%s: %s\n", url, latest)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment