keep isolating use of os.Exec("git")
This commit is contained in:
parent
c53da5a9a1
commit
4bc95ad268
|
@ -14,29 +14,6 @@ import (
|
||||||
"go.wit.com/log"
|
"go.wit.com/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (repo *Repo) GetLastTag() string {
|
|
||||||
cmd := []string{"git", "rev-list", "--tags", "--max-count=1"}
|
|
||||||
result := repo.RunQuiet(cmd)
|
|
||||||
// log.Info("getLastTagVersion()", result.Stdout)
|
|
||||||
|
|
||||||
if len(result.Stdout) != 1 {
|
|
||||||
log.Log(GITPBWARN, "git LastTag() error:", result.Stdout)
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
hash := result.Stdout[0]
|
|
||||||
|
|
||||||
cmd = []string{"git", "describe", "--tags", "--always", hash}
|
|
||||||
result = repo.RunQuiet(cmd)
|
|
||||||
|
|
||||||
if len(result.Stdout) != 1 {
|
|
||||||
log.Log(GITPBWARN, "git LastTag() error:", result.Stdout)
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
return result.Stdout[0]
|
|
||||||
}
|
|
||||||
|
|
||||||
func (repo *Repo) GetMasterVersion() string {
|
func (repo *Repo) GetMasterVersion() string {
|
||||||
bname := repo.GetMasterBranchName()
|
bname := repo.GetMasterBranchName()
|
||||||
v, err := repo.gitVersionByName(bname)
|
v, err := repo.gitVersionByName(bname)
|
||||||
|
@ -78,6 +55,8 @@ func (repo *Repo) GetUserVersion() string {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
now tracked in repo.Reload()
|
||||||
func (repo *Repo) GetCurrentBranchName() string {
|
func (repo *Repo) GetCurrentBranchName() string {
|
||||||
r := repo.RunQuiet([]string{"git", "branch", "--show-current"})
|
r := repo.RunQuiet([]string{"git", "branch", "--show-current"})
|
||||||
output := strings.Join(r.Stdout, "\n")
|
output := strings.Join(r.Stdout, "\n")
|
||||||
|
@ -87,6 +66,7 @@ func (repo *Repo) GetCurrentBranchName() string {
|
||||||
}
|
}
|
||||||
return strings.TrimSpace(output)
|
return strings.TrimSpace(output)
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// this is used often. probably move everything to this
|
// this is used often. probably move everything to this
|
||||||
// returns things like
|
// returns things like
|
||||||
|
@ -105,21 +85,6 @@ func (repo *Repo) GetCurrentVersion() string {
|
||||||
return bver
|
return bver
|
||||||
}
|
}
|
||||||
|
|
||||||
// always spawns 'git' and always should spawn 'git'
|
|
||||||
func (repo *Repo) GetCurrentBranchVersion() string {
|
|
||||||
if repo == nil {
|
|
||||||
log.Info("repo.GetCurrentBranchVersion() repo == nil")
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
r := repo.RunQuiet([]string{"git", "describe", "--tags", "--always"})
|
|
||||||
output := strings.Join(r.Stdout, "\n")
|
|
||||||
if r.Error != nil {
|
|
||||||
log.Log(GITPBWARN, "GetCurrentBranchVersion() not in a git repo?", r.Error, repo.GoPath)
|
|
||||||
log.Log(GITPBWARN, "GetCurrentBranchVersion() output might have worked anyway:", output)
|
|
||||||
}
|
|
||||||
return strings.TrimSpace(output)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (repo *Repo) gitDescribeByHash(hash string) (string, error) {
|
func (repo *Repo) gitDescribeByHash(hash string) (string, error) {
|
||||||
if hash == "" {
|
if hash == "" {
|
||||||
return "", errors.New("hash was blank")
|
return "", errors.New("hash was blank")
|
||||||
|
@ -135,13 +100,7 @@ func (repo *Repo) gitDescribeByHash(hash string) (string, error) {
|
||||||
|
|
||||||
// this should get the most recent tag
|
// this should get the most recent tag
|
||||||
func (repo *Repo) GetLastTagVersion() string {
|
func (repo *Repo) GetLastTagVersion() string {
|
||||||
r := repo.RunQuiet([]string{"git", "rev-list", "--tags", "--max-count=1"})
|
return repo.LastTag
|
||||||
hash := strings.Join(r.Stdout, "\n")
|
|
||||||
hash = strings.TrimSpace(hash)
|
|
||||||
log.Log(GITPB, "getLastTagVersion()", hash)
|
|
||||||
|
|
||||||
name, _ := repo.gitDescribeByHash(hash)
|
|
||||||
return name
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (repo *Repo) DebianReleaseVersion() string {
|
func (repo *Repo) DebianReleaseVersion() string {
|
||||||
|
|
68
reload.go
68
reload.go
|
@ -1,14 +1,27 @@
|
||||||
package gitpb
|
package gitpb
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"go.wit.com/log"
|
||||||
|
)
|
||||||
|
|
||||||
func (repo *Repo) Reload() error {
|
func (repo *Repo) Reload() error {
|
||||||
repo.Tags = new(GitTags)
|
repo.Tags = new(GitTags)
|
||||||
repo.UpdateGitTags()
|
repo.reloadGitTags()
|
||||||
|
|
||||||
repo.GoDeps = new(GoDeps)
|
repo.GoDeps = new(GoDeps)
|
||||||
repo.ParseGoSum()
|
repo.ParseGoSum()
|
||||||
|
|
||||||
if repo.GoInfo != nil {
|
if repo.GoInfo != nil {
|
||||||
repo.ReloadGo()
|
repo.ReloadGo()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
repo.setLastTag()
|
||||||
|
repo.setCurrentBranchName()
|
||||||
|
|
||||||
|
// everything has been checked, now save the mtime's
|
||||||
|
repo.RepoChanged()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,3 +50,56 @@ func (repo *Repo) SetDevelBranchName(bname string) {
|
||||||
func (repo *Repo) SetUserBranchName(bname string) {
|
func (repo *Repo) SetUserBranchName(bname string) {
|
||||||
repo.UserBranchName = bname
|
repo.UserBranchName = bname
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// updates LastTag // todo, get this from the protobuf
|
||||||
|
func (repo *Repo) setLastTag() {
|
||||||
|
cmd := []string{"git", "rev-list", "--tags", "--max-count=1"}
|
||||||
|
result := repo.RunQuiet(cmd)
|
||||||
|
// log.Info("getLastTagVersion()", result.Stdout)
|
||||||
|
|
||||||
|
if len(result.Stdout) != 1 {
|
||||||
|
log.Log(GITPBWARN, "git LastTag() error:", result.Stdout)
|
||||||
|
repo.LastTag = ""
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
hash := result.Stdout[0]
|
||||||
|
|
||||||
|
cmd = []string{"git", "describe", "--tags", "--always", hash}
|
||||||
|
result = repo.RunQuiet(cmd)
|
||||||
|
|
||||||
|
if len(result.Stdout) != 1 {
|
||||||
|
log.Log(GITPBWARN, "git LastTag() error:", result.Stdout)
|
||||||
|
repo.LastTag = ""
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
repo.LastTag = result.Stdout[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
func (repo *Repo) setCurrentBranchName() {
|
||||||
|
repo.CurrentBranchName = ""
|
||||||
|
r := repo.RunQuiet([]string{"git", "branch", "--show-current"})
|
||||||
|
output := strings.Join(r.Stdout, "\n")
|
||||||
|
if r.Error != nil {
|
||||||
|
log.Log(GITPBWARN, "GetCurrentBranchName() not in a git repo?", r.Error, repo.GoPath)
|
||||||
|
log.Log(GITPBWARN, "GetCurrentBranchName() output might have worked anyway:", output)
|
||||||
|
}
|
||||||
|
repo.CurrentBranchName = strings.TrimSpace(output)
|
||||||
|
}
|
||||||
|
|
||||||
|
// always spawns 'git' and always should spawn 'git'
|
||||||
|
func (repo *Repo) setCurrentBranchVersion() {
|
||||||
|
repo.CurrentBranchVersion = ""
|
||||||
|
if repo == nil {
|
||||||
|
log.Info("repo.GetCurrentBranchVersion() repo == nil")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
r := repo.RunQuiet([]string{"git", "describe", "--tags", "--always"})
|
||||||
|
output := strings.Join(r.Stdout, "\n")
|
||||||
|
if r.Error != nil {
|
||||||
|
log.Log(GITPBWARN, "GetCurrentBranchVersion() not in a git repo?", r.Error, repo.GoPath)
|
||||||
|
log.Log(GITPBWARN, "GetCurrentBranchVersion() output might have worked anyway:", output)
|
||||||
|
}
|
||||||
|
repo.CurrentBranchVersion = strings.TrimSpace(output)
|
||||||
|
}
|
||||||
|
|
|
@ -6,9 +6,11 @@ package gitpb
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"go.wit.com/lib/gui/shell"
|
"go.wit.com/lib/gui/shell"
|
||||||
"go.wit.com/log"
|
"go.wit.com/log"
|
||||||
|
"google.golang.org/protobuf/types/known/timestamppb"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (repo *Repo) NoteChange(s string) {
|
func (repo *Repo) NoteChange(s string) {
|
||||||
|
@ -51,6 +53,8 @@ func (repo *Repo) CheckDirty() bool {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pbnow := timestamppb.New(time.Now())
|
||||||
|
repo.Times.LastDirty = pbnow
|
||||||
return bad
|
return bad
|
||||||
|
|
||||||
}
|
}
|
|
@ -37,6 +37,7 @@ func (repo *Repo) isIgnored(file string) (bool, error) {
|
||||||
// for now, check if this repo should be ignored
|
// for now, check if this repo should be ignored
|
||||||
// TODO: go.mod and go.sum should be moved to git tag metadata
|
// TODO: go.mod and go.sum should be moved to git tag metadata
|
||||||
func (repo *Repo) RepoIgnoresGoMod() error {
|
func (repo *Repo) RepoIgnoresGoMod() error {
|
||||||
|
repo.GoInfo.GitIgnoresGoSum = false
|
||||||
file := "go.mod"
|
file := "go.mod"
|
||||||
if tracked, err := repo.isTracked(file); err != nil {
|
if tracked, err := repo.isTracked(file); err != nil {
|
||||||
msg := fmt.Sprintf("%s Error checking if %s tracked: %v\n", repo.GoPath, file, err)
|
msg := fmt.Sprintf("%s Error checking if %s tracked: %v\n", repo.GoPath, file, err)
|
||||||
|
@ -59,6 +60,7 @@ func (repo *Repo) RepoIgnoresGoMod() error {
|
||||||
} else {
|
} else {
|
||||||
if ignored {
|
if ignored {
|
||||||
fmt.Printf("%s %s is ignored by Git.\n", repo.GoPath, file)
|
fmt.Printf("%s %s is ignored by Git.\n", repo.GoPath, file)
|
||||||
|
repo.GoInfo.GitIgnoresGoSum = true
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -11,8 +11,8 @@ import (
|
||||||
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
|
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Update repo.Refs from .git/
|
// reload the tags
|
||||||
func (repo *Repo) UpdateGitTags() error {
|
func (repo *Repo) reloadGitTags() error {
|
||||||
// todo: look for changes in the tags?
|
// todo: look for changes in the tags?
|
||||||
repo.Tags = new(GitTags)
|
repo.Tags = new(GitTags)
|
||||||
|
|
|
@ -27,6 +27,8 @@ func (all *Repos) NewGoRepo(fullpath string, gopath string) (*Repo, error) {
|
||||||
newr := Repo{
|
newr := Repo{
|
||||||
FullPath: fullpath,
|
FullPath: fullpath,
|
||||||
}
|
}
|
||||||
|
newr.Times = new(GitTimes)
|
||||||
|
|
||||||
newr.GoInfo = new(GoInfo)
|
newr.GoInfo = new(GoInfo)
|
||||||
newr.GoInfo.GoPath = gopath
|
newr.GoInfo.GoPath = gopath
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,9 @@ message Repo { // `autogenpb:marshal`
|
||||||
GitTimes times = 25; // store all the mtime values here. these are temporary
|
GitTimes times = 25; // store all the mtime values here. these are temporary
|
||||||
GoInfo goInfo = 26; // put all the go specifcs here
|
GoInfo goInfo = 26; // put all the go specifcs here
|
||||||
string stateChange = 27; // reason for state change
|
string stateChange = 27; // reason for state change
|
||||||
|
string lastTag = 28; // the oldest tag
|
||||||
|
string currentBranchName = 29; // the branch currently checked out
|
||||||
|
string currentBranchVersion = 30; // the branch currently checked out
|
||||||
}
|
}
|
||||||
|
|
||||||
message Repos { // `autogenpb:marshal`
|
message Repos { // `autogenpb:marshal`
|
||||||
|
@ -71,4 +74,5 @@ message GoInfo {
|
||||||
GoDeps published = 9; // the last published go.mod/go.sum
|
GoDeps published = 9; // the last published go.mod/go.sum
|
||||||
bytes goMod = 10; // the last go.mod file
|
bytes goMod = 10; // the last go.mod file
|
||||||
bytes goSum = 11; // the last go.sum file
|
bytes goSum = 11; // the last go.sum file
|
||||||
|
bool gitIgnoresGoSum = 12; // does .gitignore ignore go.mod & go.sum?
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue