本文整理汇总了Golang中github.com/Unknwon/com.ExecCmd函数的典型用法代码示例。如果您正苦于以下问题:Golang ExecCmd函数的具体用法?Golang ExecCmd怎么用?Golang ExecCmd使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ExecCmd函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: NewRepoContext
func NewRepoContext() {
zip.Verbose = false
// Check if server has basic git setting.
stdout, stderr, err := com.ExecCmd("git", "config", "--get", "user.name")
if strings.Contains(stderr, "fatal:") {
log.Fatal("repo.NewRepoContext(fail to get git user.name): %s", stderr)
} else if err != nil || len(strings.TrimSpace(stdout)) == 0 {
if _, stderr, err = com.ExecCmd("git", "config", "--global", "user.email", "[email protected]"); err != nil {
log.Fatal("repo.NewRepoContext(fail to set git user.email): %s", stderr)
} else if _, stderr, err = com.ExecCmd("git", "config", "--global", "user.name", "Gogs"); err != nil {
log.Fatal("repo.NewRepoContext(fail to set git user.name): %s", stderr)
}
}
barePath := path.Join(setting.RepoRootPath, "git-bare.zip")
if !com.IsExist(barePath) {
data, err := bin.Asset("conf/content/git-bare.zip")
if err != nil {
log.Fatal("Fail to get asset 'git-bare.zip': %v", err)
} else if err := ioutil.WriteFile(barePath, data, os.ModePerm); err != nil {
log.Fatal("Fail to write asset 'git-bare.zip': %v", err)
}
}
}
示例2: NewRepoContext
func NewRepoContext() {
zip.Verbose = false
// Check if server has basic git setting.
stdout, _, err := com.ExecCmd("git", "config", "--get", "user.name")
if err != nil {
fmt.Printf("repo.init(fail to get git user.name): %v", err)
os.Exit(2)
} else if len(stdout) == 0 {
if _, _, err = com.ExecCmd("git", "config", "--global", "user.email", "[email protected]"); err != nil {
fmt.Printf("repo.init(fail to set git user.email): %v", err)
os.Exit(2)
} else if _, _, err = com.ExecCmd("git", "config", "--global", "user.name", "Gogs"); err != nil {
fmt.Printf("repo.init(fail to set git user.name): %v", err)
os.Exit(2)
}
}
// Initialize illegal patterns.
for i := range illegalPatterns[1:] {
pattern := ""
for j := range illegalPatterns[i+1] {
pattern += "[" + string(illegalPatterns[i+1][j]-32) + string(illegalPatterns[i+1][j]) + "]"
}
illegalPatterns[i+1] = pattern
}
}
示例3: initRepoCommit
// initRepoCommit temporarily changes with work directory.
func initRepoCommit(tmpPath string, sig *git.Signature) error {
gitInitLocker.Lock()
defer gitInitLocker.Unlock()
// Change work directory.
curPath, err := os.Getwd()
if err != nil {
return err
} else if err = os.Chdir(tmpPath); err != nil {
return err
}
defer os.Chdir(curPath)
var stderr string
if _, stderr, err = com.ExecCmd("git", "add", "--all"); err != nil {
return err
}
log.Info("stderr(1): %s", stderr)
if _, stderr, err = com.ExecCmd("git", "commit", fmt.Sprintf("--author='%s <%s>'", sig.Name, sig.Email),
"-m", "Init commit"); err != nil {
return err
}
log.Info("stderr(2): %s", stderr)
if _, stderr, err = com.ExecCmd("git", "push", "origin", "master"); err != nil {
return err
}
log.Info("stderr(3): %s", stderr)
return nil
}
示例4: updateByVcs
func updateByVcs(vcs, dirPath string) error {
err := os.Chdir(dirPath)
if err != nil {
log.Error("Update by VCS", "Fail to change work directory:")
log.Fatal("", "\t"+err.Error())
}
defer os.Chdir(workDir)
switch vcs {
case "git":
stdout, _, err := com.ExecCmd("git", "status")
if err != nil {
log.Error("", "Error occurs when 'git status'")
log.Error("", "\t"+err.Error())
}
i := strings.Index(stdout, "\n")
if i == -1 {
log.Error("", "Empty result for 'git status'")
return nil
}
branch := strings.TrimPrefix(stdout[:i], "# On branch ")
_, _, err = com.ExecCmd("git", "pull", "origin", branch)
if err != nil {
log.Error("", "Error occurs when 'git pull origin "+branch+"'")
log.Error("", "\t"+err.Error())
}
case "hg":
_, stderr, err := com.ExecCmd("hg", "pull")
if err != nil {
log.Error("", "Error occurs when 'hg pull'")
log.Error("", "\t"+err.Error())
}
if len(stderr) > 0 {
log.Error("", "Error: "+stderr)
}
_, stderr, err = com.ExecCmd("hg", "up")
if err != nil {
log.Error("", "Error occurs when 'hg up'")
log.Error("", "\t"+err.Error())
}
if len(stderr) > 0 {
log.Error("", "Error: "+stderr)
}
case "svn":
log.Error("", "Error: not support svn yet")
}
return nil
}
示例5: updateByVcs
func updateByVcs(vcs, dirPath string) error {
err := os.Chdir(dirPath)
if err != nil {
log.Error("Update by VCS", "Fail to change work directory:")
log.Fatal("", "\t"+err.Error())
}
defer os.Chdir(workDir)
switch vcs {
case "git":
branch, _, err := com.ExecCmd("git", "rev-parse", "--abbrev-ref", "HEAD")
if err != nil {
log.Error("", "Error occurs when 'git rev-parse --abbrev-ref HEAD'")
log.Error("", "\t"+err.Error())
}
_, _, err = com.ExecCmd("git", "pull", "origin", branch)
if err != nil {
log.Error("", "Error occurs when 'git pull origin "+branch+"'")
log.Error("", "\t"+err.Error())
}
case "hg":
_, stderr, err := com.ExecCmd("hg", "pull")
if err != nil {
log.Error("", "Error occurs when 'hg pull'")
log.Error("", "\t"+err.Error())
}
if len(stderr) > 0 {
log.Error("", "Error: "+stderr)
}
_, stderr, err = com.ExecCmd("hg", "up")
if err != nil {
log.Error("", "Error occurs when 'hg up'")
log.Error("", "\t"+err.Error())
}
if len(stderr) > 0 {
log.Error("", "Error: "+stderr)
}
case "svn":
_, stderr, err := com.ExecCmd("svn", "update")
if err != nil {
log.Error("", "Error occurs when 'svn update'")
log.Error("", "\t"+err.Error())
}
if len(stderr) > 0 {
log.Error("", "Error: "+stderr)
}
}
return nil
}
示例6: NewRepoContext
func NewRepoContext() {
zip.Verbose = false
// Check if server has basic git setting.
stdout, stderr, err := com.ExecCmd("git", "config", "--get", "user.name")
if strings.Contains(stderr, "fatal:") {
qlog.Fatalf("repo.NewRepoContext(fail to get git user.name): %s", stderr)
} else if err != nil || len(strings.TrimSpace(stdout)) == 0 {
if _, stderr, err = com.ExecCmd("git", "config", "--global", "user.email", "[email protected]"); err != nil {
qlog.Fatalf("repo.NewRepoContext(fail to set git user.email): %s", stderr)
} else if _, stderr, err = com.ExecCmd("git", "config", "--global", "user.name", "Gogs"); err != nil {
qlog.Fatalf("repo.NewRepoContext(fail to set git user.name): %s", stderr)
}
}
}
示例7: Listen
// Listen starts a SSH server listens on given port.
func Listen(port int) {
config := &ssh.ServerConfig{
PublicKeyCallback: func(conn ssh.ConnMetadata, key ssh.PublicKey) (*ssh.Permissions, error) {
pkey, err := models.SearchPublicKeyByContent(strings.TrimSpace(string(ssh.MarshalAuthorizedKey(key))))
if err != nil {
log.Error(3, "SearchPublicKeyByContent: %v", err)
return nil, err
}
return &ssh.Permissions{Extensions: map[string]string{"key-id": com.ToStr(pkey.ID)}}, nil
},
}
keyPath := filepath.Join(setting.AppDataPath, "ssh/gogs.rsa")
if !com.IsExist(keyPath) {
os.MkdirAll(filepath.Dir(keyPath), os.ModePerm)
_, stderr, err := com.ExecCmd("ssh-keygen", "-f", keyPath, "-t", "rsa", "-N", "")
if err != nil {
panic(fmt.Sprintf("Fail to generate private key: %v - %s", err, stderr))
}
log.Trace("New private key is generateed: %s", keyPath)
}
privateBytes, err := ioutil.ReadFile(keyPath)
if err != nil {
panic("Fail to load private key")
}
private, err := ssh.ParsePrivateKey(privateBytes)
if err != nil {
panic("Fail to parse private key")
}
config.AddHostKey(private)
go listen(config, port)
}
示例8: getGoogleTags
func getGoogleTags(importPath string, defaultBranch string, isGoRepo bool) []string {
stdout, _, err := com.ExecCmd("curl", "http://"+utils.GetProjectPath(importPath)+"/source/browse")
if err != nil {
return nil
}
p := []byte(stdout)
page := string(p)
start := strings.Index(page, "<strong>Tag:</strong>")
if start == -1 {
return nil
}
m := googleTagRe.FindAllStringSubmatch(page[start:], -1)
var tags []string
if isGoRepo {
tags = make([]string, 1, 20)
} else {
tags = make([]string, len(m)+1)
}
tags[0] = defaultBranch
for i, v := range m {
if isGoRepo {
if strings.HasPrefix(v[1], "go") {
tags = append(tags, v[1])
}
continue
}
tags[i+1] = v[1]
}
return tags
}
示例9: NewRepoContext
func NewRepoContext() {
zip.Verbose = false
// Check if server has basic git setting.
stdout, _, err := com.ExecCmd("git", "config", "--get", "user.name")
if err != nil {
fmt.Printf("repo.init(fail to get git user.name): %v", err)
os.Exit(2)
} else if len(stdout) == 0 {
if _, _, err = com.ExecCmd("git", "config", "--global", "user.email", "[email protected]"); err != nil {
fmt.Printf("repo.init(fail to set git user.email): %v", err)
os.Exit(2)
} else if _, _, err = com.ExecCmd("git", "config", "--global", "user.name", "Gogs"); err != nil {
fmt.Printf("repo.init(fail to set git user.name): %v", err)
os.Exit(2)
}
}
}
示例10: getGoogleVCS
func getGoogleVCS(match map[string]string) error {
// Scrape the HTML project page to find the VCS.
stdout, _, err := com.ExecCmd("curl", com.Expand("http://code.google.com/p/{repo}/source/checkout", match))
if err != nil {
return errors.New("doc.getGoogleVCS(" + match["importPath"] + ") -> " + err.Error())
}
m := googleRepoRe.FindSubmatch([]byte(stdout))
if m == nil {
return com.NotFoundError{"Could not VCS on Google Code project page."}
}
match["vcs"] = string(m[1])
return nil
}
示例11: makeLink
func makeLink(srcPath, destPath string) error {
srcPath = strings.Replace(srcPath, "/", "\\", -1)
destPath = strings.Replace(destPath, "/", "\\", -1)
// Check if Windows version is XP.
if getWindowsVersion() >= 6 {
_, stderr, err := com.ExecCmd("cmd", "/c", "mklink", "/j", destPath, srcPath)
if err != nil {
return errors.New(stderr)
}
return nil
}
// XP.
setting.IsWindowsXP = true
// if both are ntfs file system
if volumnType(srcPath) == "NTFS" && volumnType(destPath) == "NTFS" {
// if has junction command installed
file, err := exec.LookPath("junction")
if err == nil {
path, _ := filepath.Abs(file)
if com.IsFile(path) {
_, stderr, err := com.ExecCmd("cmd", "/c", "junction", destPath, srcPath)
if err != nil {
return errors.New(stderr)
}
return nil
}
}
}
os.RemoveAll(destPath)
return com.CopyDir(srcPath, destPath, func(filePath string) bool {
return strings.Contains(filePath, setting.VENDOR)
})
}
示例12: MigrateRepository
// MigrateRepository migrates a existing repository from other project hosting.
func MigrateRepository(user *User, name, desc string, private, mirror bool, url string) (*Repository, error) {
repo, err := CreateRepository(user, name, desc, "", "", private, mirror, false)
if err != nil {
return nil, err
}
// Clone to temprory path and do the init commit.
tmpDir := filepath.Join(os.TempDir(), fmt.Sprintf("%d", time.Now().Nanosecond()))
os.MkdirAll(tmpDir, os.ModePerm)
repoPath := RepoPath(user.Name, name)
repo.IsBare = false
if mirror {
if err = MirrorRepository(repo.Id, user.Name, repo.Name, repoPath, url); err != nil {
return repo, err
}
repo.IsMirror = true
return repo, UpdateRepository(repo)
}
// Clone from local repository.
_, stderr, err := com.ExecCmd("git", "clone", repoPath, tmpDir)
if err != nil {
return repo, err
} else if strings.Contains(stderr, "fatal:") {
return repo, errors.New("git clone: " + stderr)
}
// Pull data from source.
_, stderr, err = com.ExecCmdDir(tmpDir, "git", "pull", url)
if err != nil {
return repo, err
} else if strings.Contains(stderr, "fatal:") {
return repo, errors.New("git pull: " + stderr)
}
// Push data to local repository.
if _, stderr, err = com.ExecCmdDir(tmpDir, "git", "push", "origin", "master"); err != nil {
return repo, err
} else if strings.Contains(stderr, "fatal:") {
return repo, errors.New("git push: " + stderr)
}
return repo, UpdateRepository(repo)
}
示例13: MirrorRepository
// MirrorRepository creates a mirror repository from source.
func MirrorRepository(repoId int64, userName, repoName, repoPath, url string) error {
_, stderr, err := com.ExecCmd("git", "clone", "--mirror", url, repoPath)
if err != nil {
return errors.New("git clone --mirror: " + stderr)
}
if _, err = orm.InsertOne(&Mirror{
RepoId: repoId,
RepoName: strings.ToLower(userName + "/" + repoName),
Interval: 24,
NextUpdate: time.Now().Add(24 * time.Hour),
}); err != nil {
return err
}
return git.UnpackRefs(repoPath)
}
示例14: GetVersion
// GetVersion returns current Git version installed.
func GetVersion() (*Version, error) {
if gitVer != nil {
return gitVer, nil
}
stdout, stderr, err := com.ExecCmd("git", "version")
if err != nil {
return nil, errors.New(stderr)
}
infos := strings.Split(stdout, " ")
if len(infos) < 3 {
return nil, errors.New("not enough output")
}
gitVer, err = ParseVersion(infos[2])
return gitVer, err
}
示例15: ReloadDocs
func ReloadDocs() error {
tocLocker.Lock()
defer tocLocker.Unlock()
localRoot := setting.Docs.Target
// Fetch docs from remote.
if setting.Docs.Type.IsRemote() {
localRoot = docsRoot
absRoot, err := filepath.Abs(localRoot)
if err != nil {
return fmt.Errorf("filepath.Abs: %v", err)
}
// Clone new or pull to update.
if com.IsDir(absRoot) {
stdout, stderr, err := com.ExecCmdDir(absRoot, "git", "pull")
if err != nil {
return fmt.Errorf("Fail to update docs from remote source(%s): %v - %s", setting.Docs.Target, err, stderr)
}
fmt.Println(stdout)
} else {
os.MkdirAll(filepath.Dir(absRoot), os.ModePerm)
stdout, stderr, err := com.ExecCmd("git", "clone", setting.Docs.Target, absRoot)
if err != nil {
return fmt.Errorf("Fail to clone docs from remote source(%s): %v - %s", setting.Docs.Target, err, stderr)
}
fmt.Println(stdout)
}
}
if !com.IsDir(localRoot) {
return fmt.Errorf("Documentation not found: %s - %s", setting.Docs.Type, localRoot)
}
tocs, err := initToc(localRoot)
if err != nil {
return fmt.Errorf("initToc: %v", err)
}
initDocs(tocs, localRoot)
Tocs = tocs
return reloadProtects(localRoot)
}