Browse Source

get add gitosc & bitbucket

pull/103/head
Lunny Xiao 12 years ago
parent
commit
4fbe5d14eb
  1. 12
      cmd/get.go
  2. 241
      cmd/service.go
  3. 150
      cmd/source.go

12
cmd/get.go

@ -253,20 +253,24 @@ func extractPkg(pkg *Pkg, localfile string, update bool) error {
defer r.Close()
for _, f := range r.File {
//fmt.Printf("Contents of %s:\n", f.Name)
fmt.Printf("Contents of %s:\n", f.Name)
if f.FileInfo().IsDir() {
continue
}
paths := strings.Split(f.Name, "/")[1:]
//fmt.Println(paths)
if len(paths) < 1 {
continue
}
if f.FileInfo().IsDir() {
childDir := joinPath(dstDir, joinPath(paths...))
if len(paths) > 1 {
childDir := joinPath(dstDir, joinPath(paths[0:len(paths)-1]...))
//fmt.Println("creating", childDir)
err = os.MkdirAll(childDir, 0777)
if err != nil {
return err
}
continue
}
rc, err := f.Open()

241
cmd/service.go

@ -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"
}

150
cmd/source.go

@ -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…
Cancel
Save