-
-
Save roscopecoltran/44189f35b5db5cd96836e7122b6f4335 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 hidden or 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