command/git.go

238 lines
5.3 KiB
Go

// Package command ...
//
// Description : command ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 2022-06-14 20:02
package command
import (
"os"
"git.zhangdeman.cn/zhangdeman/command/define"
)
// Git ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 20:09 2022/6/14
func Git(workDir string, gitCmdPath string) *git {
if len(gitCmdPath) == 0 {
gitCmdPath, _ = Check("git")
if len(gitCmdPath) == 0 {
gitCmdPath = "git"
}
}
return &git{
workDir: workDir,
gitCmdPath: gitCmdPath,
}
}
type git struct {
workDir string
gitCmdPath string
}
// Init 对应 git init 命令
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 20:10 2022/6/14
func (g *git) Init() *define.Result {
// 删除已有git信息
_ = Dir(g.workDir).Delete(".git")
return Execute(g.workDir, g.gitCmdPath, []string{"init"})
}
// RemoteAddOrigin 对应 git remote add origin xxxx 命令
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 20:20 2022/6/14
func (g *git) RemoteAddOrigin(gitRepoAddress string) *define.Result {
return Execute(g.workDir, g.gitCmdPath, []string{"remote", "add", "origin", gitRepoAddress})
}
// SetUpstreamOrigin 对应 git push --set-upstream origin xxx 命令
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 20:22 2022/6/14
func (g *git) SetUpstreamOrigin(origin string) *define.Result {
return Execute(g.workDir, g.gitCmdPath, []string{"push", "--set-upstream ", "origin", origin})
}
// Add 对应 git add xxx 命令
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 20:24 2022/6/14
func (g *git) Add(fileList ...string) *define.Result {
if len(fileList) == 0 {
fileList = []string{"."}
}
param := []string{"add"}
for _, item := range fileList {
param = append(param, item)
}
return Execute(g.workDir, g.gitCmdPath, param)
}
// Commit 对应 git commit -m 'xxxx'
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 20:26 2022/6/14
func (g *git) Commit(comment string) *define.Result {
if len(comment) == 0 {
comment = "add some code"
}
return Execute(g.workDir, g.gitCmdPath, []string{"commit", "-m", comment})
}
// Push 对应 git push
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 20:28 2022/6/14
func (g *git) Push(force bool) *define.Result {
param := []string{
"push",
}
if force {
param = append(param, "-f")
}
return Execute(g.workDir, g.gitCmdPath, param)
}
// AddGitignore 添加 .gitignore 文件
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 20:31 2022/6/14
func (g *git) AddGitignore(fileList ...string) *define.Result {
baseFileContent := `# Created by .ignore support plugin (hsz.mobi)
### Go template
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
*.xlsx
# Test binary, built with "go test -c"
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
# Dependency directories (remove the comment below to include it)
# vendor/
# goland的相关配置
.idea
# vscode 的相关配置
.vscode
# 构建后的产物目录
release
*_test.go
*.txt
`
for _, item := range fileList {
baseFileContent = baseFileContent + "\n" + item
}
// 将信息写入文件
return &define.Result{
WorkDir: g.workDir,
CmdPath: "",
Param: nil,
Error: File(g.workDir, ".gitignore").AutoCreate().SetClearHasContentForWrite().
SetOpenFlag(os.O_TRUNC, os.O_RDWR, os.O_CREATE).Write([]byte(baseFileContent)),
Output: nil,
StartTime: 0,
FinishTime: 0,
}
}
// ConfigAuthor 配置开发人员信息
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 20:40 2022/6/14
func (g *git) ConfigAuthor(name string, email string) *define.Result {
// git config user.name 白茶清欢
if len(name) > 0 {
param := []string{"config", "user.name", name}
if r := Execute(g.workDir, g.gitCmdPath, param); nil != r.Error {
return r
}
}
if len(email) > 0 {
param := []string{"config", "user.email", email}
if r := Execute(g.workDir, g.gitCmdPath, param); nil != r.Error {
return r
}
}
return nil
}
// GetAuthor ...
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 14:59 2023/1/12
func (g *git) GetAuthor(useGlobal bool) (string, string, error) {
var (
username string
email string
)
// git config [--global] user.name 白茶清欢
param := []string{"config"}
if useGlobal {
param = append(param, "--global")
}
nameParam := append(param, "user.name")
if r := Execute(g.workDir, g.gitCmdPath, nameParam); nil != r.Error {
return "", "", r.Error
} else {
username = string(r.Output)
}
mailParam := append(param, "user.email")
if r := Execute(g.workDir, g.gitCmdPath, mailParam); nil != r.Error {
return "", "", r.Error
} else {
email = string(r.Output)
}
return username, email, nil
}
// Clone 拉取 git 仓库代码
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 14:03 2022/6/27
func (g *git) Clone(repo string, saveDir string) *define.Result {
param := []string{
"clone",
repo,
}
if len(saveDir) > 0 {
param = append(param, saveDir)
}
return Execute(g.workDir, g.gitCmdPath, param)
}
// Version 获取版本信息
//
// Author : go_developer@163.com<白茶清欢>
//
// Date : 22:15 2023/4/9
func (g *git) Version() (string, error) {
r := Execute(g.workDir, g.gitCmdPath, []string{"version"})
return string(r.Output), r.Error
}