summaryrefslogtreecommitdiff
path: root/makePatches.go
diff options
context:
space:
mode:
Diffstat (limited to 'makePatches.go')
-rw-r--r--makePatches.go112
1 files changed, 112 insertions, 0 deletions
diff --git a/makePatches.go b/makePatches.go
new file mode 100644
index 0000000..a94b5b1
--- /dev/null
+++ b/makePatches.go
@@ -0,0 +1,112 @@
+package gitpb
+
+import (
+ "path/filepath"
+ "strings"
+
+ "go.wit.com/lib/gui/shell"
+ "go.wit.com/log"
+)
+
+type Patch struct {
+ GoPath string
+ Ref string
+ giturl string
+ comment string
+}
+
+// move all this to repolist and gowit repos
+
+func (repo *Repo) GetPatches(oldname string, newname string) (int, []*Patch) {
+ var patchcount int
+ patches := make([]*Patch, 0, 0)
+
+ if oldname == newname {
+ return 0, nil
+ }
+ // log.Info("repo userv, develv", userv, develv)
+ gitcmd := []string{"git", "log", "--oneline", oldname + ".." + newname}
+ log.Info("Run:", gitcmd)
+ r := repo.Run(gitcmd)
+ if r.Error != nil {
+ log.Info("git failed ", repo.GetGoPath(), "err =", r.Error)
+ return 0, nil
+ }
+
+ // patches = strings.Split(output, "\n")
+ log.Info("Run:", r.Stdout)
+ for _, line := range r.Stdout {
+ line = strings.TrimSpace(line)
+ if line == "" {
+ continue
+ }
+ parts := strings.Split(line, " ")
+ newp := new(Patch)
+ newp.Ref = parts[0]
+ newp.comment = strings.Join(parts[1:], " ")
+ log.Info("Patch line:", line, repo.GetGoPath())
+ patchcount += 1
+ patches = append(patches, newp)
+ }
+ return patchcount, patches
+}
+
+func (repo *Repo) GetUserPatches() (int, []*Patch) {
+ usern := repo.GetUserBranchName()
+ develn := repo.GetDevelBranchName()
+ userv := repo.GetUserVersion()
+ develv := repo.GetDevelVersion()
+
+ if userv == develv {
+ return 0, nil
+ }
+
+ c, all := repo.GetPatches(develn, usern)
+ log.Info("GetPatches() guireleaser", develn, usern, "count =", c)
+ return c, all
+}
+
+func (repo *Repo) GetMasterPatches() (int, []*Patch) {
+ lasttag := repo.GetLastTag()
+ mastern := repo.GetMasterBranchName()
+ masterv := repo.GetMasterVersion()
+
+ if lasttag == masterv {
+ return 0, nil
+ }
+
+ c, all := repo.GetPatches(lasttag, mastern)
+ log.Info("GetPatches() guireleaser", lasttag, mastern, "count =", c)
+ return c, all
+}
+
+func (all *Repos) MakePatchset(setdir string) bool {
+ loop := all.SortByGoPath()
+ for loop.Scan() {
+ repo := loop.Next()
+ log.Info("repo", repo.GetGoPath())
+ userv := repo.GetUserVersion()
+ develv := repo.GetDevelVersion()
+ usern := repo.GetUserBranchName()
+ develn := repo.GetDevelBranchName()
+ if userv == develv {
+ // this repo is unchanged
+ continue
+ }
+
+ repodir := filepath.Join(setdir, repo.GetGoPath())
+ shell.Mkdir(repodir)
+ // git format-patch branch1..branch2
+ gitcmd := []string{"git", "format-patch", "-o", repodir, develn + ".." + usern}
+ log.Info("Run:", gitcmd)
+ r := repo.Run(gitcmd)
+ log.Info("output =", r.Stdout)
+ if r.Error == nil {
+ log.Info("patches made okay for:", repo.GetGoPath())
+ continue
+ }
+ log.Info("patches failed for:", repo.GetGoPath())
+ return false
+ }
+ return true
+}