mirror of https://github.com/gogits/gogs.git
Lunny Xiao
12 years ago
3 changed files with 249 additions and 154 deletions
@ -0,0 +1,241 @@
|
||||
// Copyright 2013 gopm authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License"): you may
|
||||
// not use this file except in compliance with the License. You may obtain
|
||||
// a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
// License for the specific language governing permissions and limitations
|
||||
// under the License.
|
||||
|
||||
package cmd |
||||
|
||||
import ( |
||||
//"errors"
|
||||
"fmt" |
||||
"strings" |
||||
) |
||||
|
||||
const ( |
||||
TRUNK = "trunk" |
||||
TAG = "tag" |
||||
BRANCH = "branch" |
||||
COMMIT = "commit" |
||||
) |
||||
|
||||
var ( |
||||
downloadCache map[string]bool // Saves packages that have been downloaded.
|
||||
services []Service = []Service{ |
||||
&GithubService{}, |
||||
&GitOscService{}, |
||||
&BitBucketService{}, |
||||
//&GitCafeService{},
|
||||
//&CodeCSDNSource{},
|
||||
} |
||||
) |
||||
|
||||
func getService(pkgName string) Service { |
||||
for _, service := range services { |
||||
if service.HasPkg(pkgName) { |
||||
return service |
||||
} |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
type Service interface { |
||||
PkgUrl(pkg *Pkg) string |
||||
HasPkg(pkgName string) bool |
||||
PkgExt() string |
||||
} |
||||
|
||||
type Pkg struct { |
||||
Service Service |
||||
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 (p *Pkg) Url() string { |
||||
return p.Service.PkgUrl(p) |
||||
} |
||||
|
||||
func (p *Pkg) FileName() string { |
||||
return fmt.Sprintf("%v.%v", p.VerSimpleString(), p.Service.PkgExt()) |
||||
} |
||||
|
||||
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] |
||||
} |
||||
|
||||
service := getService(pkgName) |
||||
if service == nil { |
||||
return nil |
||||
} |
||||
|
||||
return &Pkg{service, pkgName, vers[0], verId} |
||||
} |
||||
|
||||
// github repository
|
||||
type GithubService struct { |
||||
} |
||||
|
||||
func (s *GithubService) PkgUrl(pkg *Pkg) string { |
||||
var verPath string |
||||
if pkg.Ver == TRUNK { |
||||
verPath = "master" |
||||
} else { |
||||
verPath = pkg.VerId |
||||
} |
||||
return fmt.Sprintf("https://%v/archive/%v.zip", pkg.Name, verPath) |
||||
} |
||||
|
||||
func (s *GithubService) HasPkg(pkgName string) bool { |
||||
return strings.HasPrefix(pkgName, "github.com") |
||||
} |
||||
|
||||
func (s *GithubService) PkgExt() string { |
||||
return "zip" |
||||
} |
||||
|
||||
// git osc repos
|
||||
type GitOscService struct { |
||||
} |
||||
|
||||
func (s *GitOscService) PkgUrl(pkg *Pkg) string { |
||||
var verPath string |
||||
if pkg.Ver == TRUNK { |
||||
verPath = "master" |
||||
} else { |
||||
verPath = pkg.VerId |
||||
} |
||||
return fmt.Sprintf("https://%v/repository/archive?ref=%v", pkg.Name, verPath) |
||||
} |
||||
|
||||
func (s *GitOscService) HasPkg(pkgName string) bool { |
||||
return strings.HasPrefix(pkgName, "git.oschina.net") |
||||
} |
||||
|
||||
func (s *GitOscService) PkgExt() string { |
||||
return "zip" |
||||
} |
||||
|
||||
// bitbucket.org
|
||||
type BitBucketService struct { |
||||
} |
||||
|
||||
func (s *BitBucketService) PkgUrl(pkg *Pkg) string { |
||||
var verPath string |
||||
if pkg.Ver == TRUNK { |
||||
verPath = "default" |
||||
} else { |
||||
verPath = pkg.VerId |
||||
} |
||||
|
||||
return fmt.Sprintf("https://%v/get/%v.zip", pkg.Name, verPath) |
||||
} |
||||
|
||||
func (s *BitBucketService) HasPkg(pkgName string) bool { |
||||
return strings.HasPrefix(pkgName, "bitbucket.org") |
||||
} |
||||
|
||||
func (s *BitBucketService) PkgExt() string { |
||||
return "zip" |
||||
} |
||||
|
||||
type GitCafeService struct { |
||||
} |
||||
|
||||
func (s *GitCafeService) PkgUrl(pkg *Pkg) string { |
||||
var verPath string |
||||
if pkg.Ver == TRUNK { |
||||
verPath = "master" |
||||
} else { |
||||
verPath = pkg.VerId |
||||
} |
||||
|
||||
return fmt.Sprintf("https://%v/tarball/%v", pkg.Name, verPath) |
||||
} |
||||
|
||||
func (s *GitCafeService) HasPkg(pkgName string) bool { |
||||
return strings.HasPrefix(pkgName, "gitcafe.com") |
||||
} |
||||
|
||||
func (s *GitCafeService) PkgExt() string { |
||||
return "tar.gz" |
||||
} |
||||
|
||||
// git lab repos, not completed
|
||||
type GitLabService struct { |
||||
DomainOrIp string |
||||
Username string |
||||
Passwd string |
||||
PrivateKey string |
||||
} |
||||
|
||||
func (s *GitLabService) PkgUrl(pkg *Pkg) string { |
||||
var verPath string |
||||
if pkg.Ver == TRUNK { |
||||
verPath = "master" |
||||
} else { |
||||
verPath = pkg.VerId |
||||
} |
||||
|
||||
return fmt.Sprintf("https://%v/repository/archive/%v", pkg.Name, verPath) |
||||
} |
||||
|
||||
func (s *GitLabService) HasPkg(pkgName string) bool { |
||||
return strings.HasPrefix(pkgName, s.DomainOrIp) |
||||
} |
||||
|
||||
func (s *GitLabService) PkgExt() string { |
||||
return "tar.gz" |
||||
} |
||||
|
||||
// code.csdn.net
|
||||
type CodeCSDNService struct { |
||||
} |
||||
|
||||
func (s *CodeCSDNService) PkgUrl(pkg *Pkg) string { |
||||
var verPath string |
||||
if pkg.Ver == TRUNK { |
||||
verPath = "master" |
||||
} else { |
||||
verPath = pkg.VerId |
||||
} |
||||
|
||||
return fmt.Sprintf("https://%v/repository/archive?ref=%v", pkg.Name, verPath) |
||||
} |
||||
|
||||
func (s *CodeCSDNService) HasPkg(pkgName string) bool { |
||||
return strings.HasPrefix(pkgName, "code.csdn.net") |
||||
} |
||||
|
||||
func (s *CodeCSDNService) PkgExt() string { |
||||
return "zip" |
||||
} |
@ -1,150 +0,0 @@
|
||||
// Copyright 2013 gopm authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License"): you may
|
||||
// not use this file except in compliance with the License. You may obtain
|
||||
// a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
// License for the specific language governing permissions and limitations
|
||||
// under the License.
|
||||
|
||||
package cmd |
||||
|
||||
import ( |
||||
//"errors"
|
||||
"fmt" |
||||
"strings" |
||||
) |
||||
|
||||
const ( |
||||
TRUNK = "trunk" |
||||
TAG = "tag" |
||||
BRANCH = "branch" |
||||
COMMIT = "commit" |
||||
) |
||||
|
||||
var ( |
||||
downloadCache map[string]bool // Saves packages that have been downloaded.
|
||||
sources []Source = []Source{ |
||||
&GithubSource{}, |
||||
&GitOscSource{}, |
||||
} |
||||
) |
||||
|
||||
func getSource(pkgName string) Source { |
||||
for _, source := range sources { |
||||
if source.HasPkg(pkgName) { |
||||
return source |
||||
} |
||||
} |
||||
return nil |
||||
} |
||||
|
||||
type Source interface { |
||||
PkgUrl(pkg *Pkg) string |
||||
HasPkg(pkgName string) bool |
||||
PkgExt() string |
||||
} |
||||
|
||||
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 (p *Pkg) Url() string { |
||||
return p.Source.PkgUrl(p) |
||||
} |
||||
|
||||
func (p *Pkg) FileName() string { |
||||
return fmt.Sprintf("%v.%v", p.VerSimpleString(), p.Source.PkgExt()) |
||||
} |
||||
|
||||
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] |
||||
} |
||||
|
||||
source := getSource(pkgName) |
||||
if source == nil { |
||||
return nil |
||||
} |
||||
|
||||
return &Pkg{source, pkgName, vers[0], verId} |
||||
} |
||||
|
||||
// github repository
|
||||
type GithubSource struct { |
||||
} |
||||
|
||||
func (s *GithubSource) PkgUrl(pkg *Pkg) string { |
||||
var verPath string |
||||
if pkg.Ver == TRUNK { |
||||
verPath = "master" |
||||
} else { |
||||
verPath = pkg.VerId |
||||
} |
||||
return fmt.Sprintf("https://%v/archive/%v.zip", pkg.Name, verPath) |
||||
} |
||||
|
||||
func (s *GithubSource) HasPkg(pkgName string) bool { |
||||
return strings.HasPrefix(pkgName, "github.com") |
||||
} |
||||
|
||||
func (s *GithubSource) PkgExt() string { |
||||
return "zip" |
||||
} |
||||
|
||||
// git osc repos
|
||||
type GitOscSource struct { |
||||
} |
||||
|
||||
func (s *GitOscSource) PkgUrl(pkg *Pkg) string { |
||||
var verPath string |
||||
if pkg.Ver == TRUNK { |
||||
verPath = "master" |
||||
} else { |
||||
verPath = pkg.VerId |
||||
} |
||||
return fmt.Sprintf("https://%v/repository/archive?ref=%v", pkg.Name, verPath) |
||||
} |
||||
|
||||
func (s *GitOscSource) HasPkg(pkgName string) bool { |
||||
return strings.HasPrefix(pkgName, "git.oschina.net") |
||||
} |
||||
|
||||
func (s *GitOscSource) PkgExt() string { |
||||
return "zip" |
||||
} |
||||
|
||||
type GitLabSource struct { |
||||
IP string |
||||
Username string |
||||
Passwd string |
||||
PrivateKey string |
||||
} |
Loading…
Reference in new issue