1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
package main
import (
"errors"
"go.wit.com/lib/protobuf/gitpb"
"go.wit.com/log"
)
func rePrepareReleaseNew(check *gitpb.Repo) error {
// me.forge.RillFuncError(rillRestore)
var test string
if check.FullPath == "/home/jcarr/go/src/go.wit.com/lib/virtigolib" {
test = "bob"
}
if alreadyDone(check) {
// means it was already published
// protects against logic errors that might result
// in an infinite loop
log.Info("WARNING alreadyDone rePrepareRelease()", check.GetGoPath())
return nil
}
if me.forge.Config.IsReadOnly(check.GetGoPath()) {
// can't release readonly repos
return nil
}
master := check.GetMasterVersion()
lastTag := check.GetLastTag()
if master != lastTag {
log.Info("LAST TAG != master", check.FullPath, master, lastTag)
} else {
}
if me.forge.Config.IsPrivate(check.GetGoPath()) {
if master != lastTag {
return errors.New("adding private repo: " + check.FullPath)
}
return nil
}
// this is detailed. It makes sure the go.* files are absolutely perfect
if err := checkPublishedGodeps(check); err != nil {
// this means the published godeps are no longer up to date
// forceReleaseVersion(check)
// log.Info("checkPublishedGodeps failed with err", check.GetGoPath(), err)
return err
}
// if master != lastTag, always increment
if master != lastTag {
newmhash := check.GetTagHash(master)
oldlhash := check.GetTagHash(lastTag)
if newmhash == oldlhash {
// they are actually equal
return nil
}
b1, err := check.CountDiffObjects(oldlhash, newmhash)
if err != nil {
badExit(err)
}
b2, err := check.CountDiffObjects(newmhash, oldlhash)
if err != nil {
badExit(err)
}
if b1 != 0 {
log.Printf("HASH ERROR %-50s tag %s < %s\n", check.GetGoPath(), newmhash, oldlhash)
log.Info("old vs new count", b1, b2, "git merge", oldlhash)
}
if b1 == 0 && b2 == 0 {
log.Info("got to identical repo", check.GetGoPath(), b1, b2)
log.Info("got to identical repo", check.GetGoPath(), oldlhash, newmhash)
// actually identical. do nothing
return nil
}
if gitpb.IsGoTagVersionGreater(lastTag, master) {
// this function is not right really. the hash error above should catch it correctly
// log.Printf("PROBABLY NOT NEE %-50s tag %s < %s\n", check.GetGoPath(), lastTag, master)
return errors.New("gitpb.IsGoTagVersionGreater(lastTag, master)")
}
log.Printf("NEED RELEASE FOR TAG %-50s tag %s != %s\n", check.GetGoPath(), master, lastTag)
// forceReleaseVersion(check)
return errors.New("master != lastTag")
}
if argv.Protobuf && check.GetRepoType() == "protobuf" {
log.Printf("NEED RELEASE FOR TYPE %s err: %v\n", check.GetGoPath(), "because --protobuf")
// if --protobuf, this will force upgrade each one
// forceReleaseVersion(check)
// me.found.AppendByFullPath(check)
return errors.New("protobuf repo deps changed")
}
// if the repo is a go binary or plugin for a new release for
// any library version change
// if check.GetRepoType() == "binary" || check.GetRepoType() == "plugin" {
// check if the package dependancies changed, if so, re-publish
if err := finalGoDepsCheckOk(check); err == nil {
// log.Printf("go.sum is perfect! %s\n", check.GetGoPath())
return nil
} else {
log.Printf("NEED RELEASE FOR CHECK %-50s err: %v\n", check.GetGoPath(), err)
log.Println("RETURNING ERROR IN IN me.forge.RunOnReposNew() rePrepareReleaseNew(check) for", check.FullPath)
log.Println("bob = ", test)
return errors.New("FinalGoDepsCheckOk() failed even though master tag == last tag")
}
return nil
}
|