You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

99 lines
1.5 KiB

package cmd
import (
//"errors"
"fmt"
"strings"
)
const (
TRUNK = "trunk"
TAG = "tag"
BRANCH = "branch"
COMMIT = "commit"
)
var (
downloadCache map[string]bool
sources []Source = []Source{
&GithubSource{},
}
)
func getSource(pkgName string) Source {
for _, source := range sources {
if source.HasPkg(pkgName) {
return source
}
}
return nil
}
type Source interface {
PkgUrl(pkgName string, ver string) string
HasPkg(pkgName string) bool
}
type Pkg struct {
Source Source
Name string
Ver string
VerId string
}
func (p *Pkg) VerSimpleString() string {
if p.VerId != "" {
return p.VerId
}
return p.Ver
}
func (p *Pkg) VerString() string {
if p.VerId == "" {
return p.Ver
}
return fmt.Sprintf("%v:%v", p.Ver, p.VerId)
}
func NewPkg(pkgName string, ver string) *Pkg {
vers := strings.Split(ver, ":")
if len(vers) > 2 {
return nil
}
var verId string
if len(vers) == 2 {
verId = vers[1]
}
return &Pkg{
getSource(pkgName), pkgName, vers[0], verId,
}
}
type GithubSource struct {
}
func (s *GithubSource) PkgUrl(pkgName string, ver string) string {
vers := strings.Split(ver, ":")
var verPath string
switch strings.ToLower(vers[0]) {
case TRUNK:
verPath = "master"
case TAG, COMMIT, BRANCH:
if len(vers) != 2 {
return ""
}
verPath = vers[1]
default:
return ""
}
return fmt.Sprintf("https://%v/archive/%v.zip", pkgName, verPath)
}
func (s *GithubSource) HasPkg(pkgName string) bool {
return strings.HasPrefix(pkgName, "github.com")
}
type GitLabSource struct {
}