A new PeelingOption field was introduced into ListOptions. The new options include the default (and backwards compatible) IgnorePeeled. Plus another two variations which either only returns peeled references (OnlyPeeled), or append peeled references to the list (AppendPeeled). The ls-remote example was updated to align with upstream, in which peeled references are appended to the results by default. A new ErrEmptyUrls error is now returned when List or ListContext do not receive a URL to work with, to improve overall execution flow. Signed-off-by: Paulo Gomes <pjbgf@linux.com>
53 lines
1.0 KiB
Go
53 lines
1.0 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
|
|
"github.com/go-git/go-git/v5"
|
|
"github.com/go-git/go-git/v5/config"
|
|
"github.com/go-git/go-git/v5/storage/memory"
|
|
|
|
. "github.com/go-git/go-git/v5/_examples"
|
|
)
|
|
|
|
// Retrieve remote tags without cloning repository
|
|
func main() {
|
|
CheckArgs("<url>")
|
|
url := os.Args[1]
|
|
|
|
Info("git ls-remote --tags %s", url)
|
|
|
|
// Create the remote with repository URL
|
|
rem := git.NewRemote(memory.NewStorage(), &config.RemoteConfig{
|
|
Name: "origin",
|
|
URLs: []string{url},
|
|
})
|
|
|
|
log.Print("Fetching tags...")
|
|
|
|
// We can then use every Remote functions to retrieve wanted information
|
|
refs, err := rem.List(&git.ListOptions{
|
|
// Returns all references, including peeled references.
|
|
PeelingOption: git.AppendPeeled,
|
|
})
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// Filters the references list and only keeps tags
|
|
var tags []string
|
|
for _, ref := range refs {
|
|
if ref.Name().IsTag() {
|
|
tags = append(tags, ref.Name().Short())
|
|
}
|
|
}
|
|
|
|
if len(tags) == 0 {
|
|
log.Println("No tags!")
|
|
return
|
|
}
|
|
|
|
log.Printf("Tags found: %v", tags)
|
|
}
|