Created
April 27, 2018 16:54
-
-
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/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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