diff options
Diffstat (limited to 'makePatches.go')
| -rw-r--r-- | makePatches.go | 112 |
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 +} |
