checkDirty()
This commit is contained in:
parent
8a6fb6d442
commit
455ea31d70
10
Makefile
10
Makefile
|
@ -5,16 +5,14 @@
|
||||||
# go install
|
# go install
|
||||||
|
|
||||||
|
|
||||||
all: gitTag.pb.go goDep.pb.go repo.pb.go
|
all: gitTag.pb.go goDep.pb.go repo.pb.go vet
|
||||||
|
|
||||||
test:
|
test:
|
||||||
make -C scanGoSrc/
|
make -C scanGoSrc/
|
||||||
|
|
||||||
vet: lint
|
vet:
|
||||||
GO111MODULE=off go vet
|
@GO111MODULE=off go vet
|
||||||
|
@echo this go library package builds okay
|
||||||
lint:
|
|
||||||
# -buf lint refs.proto # todo: figure out where buf comes from again
|
|
||||||
|
|
||||||
# autofixes your import headers in your golang files
|
# autofixes your import headers in your golang files
|
||||||
goimports:
|
goimports:
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
package gitpb
|
||||||
|
|
||||||
|
// runs git, parses output
|
||||||
|
// types faster than you can
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"go.wit.com/lib/gui/shell"
|
||||||
|
"go.wit.com/log"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (repo *Repo) NoteChange(s string) {
|
||||||
|
log.Warn("NoteChange()", s)
|
||||||
|
}
|
||||||
|
|
||||||
|
// just return the current value
|
||||||
|
func (repo *Repo) IsDirty() bool {
|
||||||
|
return repo.Dirty
|
||||||
|
}
|
||||||
|
|
||||||
|
// actually os.Exec('git')
|
||||||
|
func (repo *Repo) CheckDirty() bool {
|
||||||
|
cmd := []string{"git", "status", "--porcelain"}
|
||||||
|
r := shell.PathRunLog(repo.FullPath, cmd, GITPB)
|
||||||
|
if r.Error != nil {
|
||||||
|
log.Warn("CheckDirty() status cmd =", cmd)
|
||||||
|
out := strings.Join(r.Stdout, "\n")
|
||||||
|
log.Warn("CheckDirty() status out =", out)
|
||||||
|
log.Warn("CheckDirty() status err =", r.Error)
|
||||||
|
log.Error(r.Error, "CheckDirty() git status error")
|
||||||
|
repo.NoteChange("git status is in error " + fmt.Sprint(r.Error))
|
||||||
|
repo.Dirty = true
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(r.Stdout) == 0 {
|
||||||
|
repo.Dirty = false
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
repo.Dirty = true
|
||||||
|
return true
|
||||||
|
|
||||||
|
}
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
"unicode"
|
||||||
|
|
||||||
"go.wit.com/log"
|
"go.wit.com/log"
|
||||||
)
|
)
|
||||||
|
@ -74,6 +75,74 @@ func (repo *Repo) GitUserVersion() string {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
func (repo *Repo) GetCurrentBranchName() string {
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
return strings.TrimSpace(output)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (repo *Repo) GetCurrentBranchVersion() string {
|
||||||
|
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) {
|
||||||
|
if hash == "" {
|
||||||
|
return "", errors.New("hash was blank")
|
||||||
|
}
|
||||||
|
r := repo.RunQuiet([]string{"git", "describe", "--tags", "--always", hash})
|
||||||
|
out := strings.Join(r.Stdout, "\n")
|
||||||
|
if r.Error != nil {
|
||||||
|
log.Warn("not in a git repo or bad hash?", r.Error, repo.GoPath)
|
||||||
|
return out, r.Error
|
||||||
|
}
|
||||||
|
return out, r.Error
|
||||||
|
}
|
||||||
|
|
||||||
|
// this should get the most recent tag
|
||||||
|
func (repo *Repo) GetLastTagVersion() string {
|
||||||
|
r := repo.RunQuiet([]string{"git", "rev-list", "--tags", "--max-count=1"})
|
||||||
|
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 {
|
||||||
|
lasttag := repo.GetLastTagVersion()
|
||||||
|
newv := trimNonNumericFromStart(lasttag)
|
||||||
|
if newv == "" {
|
||||||
|
newv = "0.0"
|
||||||
|
if lasttag != "" {
|
||||||
|
newv += "-" + lasttag
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newv
|
||||||
|
}
|
||||||
|
|
||||||
|
func (repo *Repo) DebianCurrentVersion() string {
|
||||||
|
cbversion := repo.GetCurrentBranchVersion()
|
||||||
|
|
||||||
|
newv := trimNonNumericFromStart(cbversion)
|
||||||
|
if newv == "" {
|
||||||
|
newv = "0.0"
|
||||||
|
}
|
||||||
|
if repo.CheckDirty() {
|
||||||
|
newv += "-dirty"
|
||||||
|
}
|
||||||
|
return newv
|
||||||
|
}
|
||||||
|
|
||||||
func (repo *Repo) gitVersionByName(name string) (string, error) {
|
func (repo *Repo) gitVersionByName(name string) (string, error) {
|
||||||
name = strings.TrimSpace(name)
|
name = strings.TrimSpace(name)
|
||||||
|
@ -135,3 +204,12 @@ func (repo *Repo) IsBranch(findname string) bool {
|
||||||
log.Log(GITPB, "did not find tag:", findname, "in", repo.GoPath)
|
log.Log(GITPB, "did not find tag:", findname, "in", repo.GoPath)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func trimNonNumericFromStart(s string) string {
|
||||||
|
for i, r := range s {
|
||||||
|
if unicode.IsDigit(r) {
|
||||||
|
return s[i:]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
|
@ -7,8 +7,8 @@ import (
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (repo *Repo) DeleteGoDepByHash(hash string) *GoDep {
|
func (repo *Repo) DeleteGoDepByHash(hash string) {
|
||||||
return repo.GoDeps.DeleteByHash(hash)
|
repo.GoDeps.DeleteByHash(hash)
|
||||||
}
|
}
|
||||||
|
|
||||||
// enforces no duplicate package names
|
// enforces no duplicate package names
|
||||||
|
|
|
@ -23,10 +23,12 @@ message Repo { // `autogenpb:marshal`
|
||||||
bool goPrimitive = 9; // if this is a golang primitive
|
bool goPrimitive = 9; // if this is a golang primitive
|
||||||
GoDeps goDeps = 10;
|
GoDeps goDeps = 10;
|
||||||
google.protobuf.Timestamp lastGoDep = 11; // last time go.sum was processed
|
google.protobuf.Timestamp lastGoDep = 11; // last time go.sum was processed
|
||||||
|
|
||||||
|
bool dirty = 12; // if git says things have been changed
|
||||||
}
|
}
|
||||||
|
|
||||||
message Repos { // `autogenpb:marshal`
|
message Repos { // `autogenpb:marshal`
|
||||||
string uuid = 1; // I guess why not just have this on each file
|
string uuid = 1; // `autogenpb:uuid:8daaeba1-fb1f-4762-ae6e-95a55d352673`
|
||||||
string version = 2; // maybe can be used for protobuf schema change violations
|
string version = 2; // maybe can be used for protobuf schema change violations
|
||||||
repeated Repo repos = 3;
|
repeated Repo repos = 3;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue