summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--applyPatch.go4
-rw-r--r--windowPatchset.go170
2 files changed, 115 insertions, 59 deletions
diff --git a/applyPatch.go b/applyPatch.go
index e7920a3..9d70ff4 100644
--- a/applyPatch.go
+++ b/applyPatch.go
@@ -14,6 +14,7 @@ import (
"go.wit.com/log"
)
+/*
// saves the patches in ~/.config/forge/currentpatches/
func savePatchset(pset *forgepb.Patchset) error {
log.Info("savePatches() NAME", pset.Name)
@@ -43,6 +44,7 @@ func savePatchset(pset *forgepb.Patchset) error {
}
return nil
}
+*/
// re-run git CheckDirty() on everything
func IsAnythingDirty() bool {
@@ -71,7 +73,7 @@ func countCurrentPatches(repo *gitpb.Repo) int {
return len(result.Stdout)
}
-func applyPatchset(pset *forgepb.Patchset) error {
+func applyPatchsetOLD(pset *forgepb.Patchset) error {
var everythingworked bool = true
tmpdir, err := os.MkdirTemp("", "forge")
if err != nil {
diff --git a/windowPatchset.go b/windowPatchset.go
index 2ebc0d1..8c3ab8e 100644
--- a/windowPatchset.go
+++ b/windowPatchset.go
@@ -10,7 +10,6 @@ import (
"go.wit.com/lib/gadgets"
"go.wit.com/lib/protobuf/forgepb"
- "go.wit.com/lib/protobuf/gitpb"
"go.wit.com/log"
"go.wit.com/gui"
@@ -99,26 +98,28 @@ func makePatchWindow(pset *forgepb.Patchset) *patchWindow {
grid.NewLabel("Applied in current branch?")
grid.NewLabel("start hash")
grid.NewLabel("")
- grid.NewButton("Extract", func() {
- if err := savePatchset(pset); err != nil {
- log.Info("Save err:", err)
- return
- }
- })
- grid.NewButton("Apply with git am", func() {
- if _, _, _, err := IsEverythingOnUser(); err != nil {
- log.Info("You can only apply patches to the user branch")
- return
- }
- if IsAnythingDirty() {
- log.Info("You can't apply patches when repos are dirty")
- me.forge.PrintHumanTable(me.found)
- return
- }
- if argv.Force {
- applyPatchset(pset)
- }
- })
+ /*
+ grid.NewButton("Extract", func() {
+ if err := savePatchset(pset); err != nil {
+ log.Info("Save err:", err)
+ return
+ }
+ })
+ grid.NewButton("Apply with git am", func() {
+ if _, _, _, err := IsEverythingOnUser(); err != nil {
+ log.Info("You can only apply patches to the user branch")
+ return
+ }
+ if IsAnythingDirty() {
+ log.Info("You can't apply patches when repos are dirty")
+ me.forge.PrintHumanTable(me.found)
+ return
+ }
+ if argv.Force {
+ applyPatchset(pset)
+ }
+ })
+ */
grid.NextRow()
// add the patches to the grid
@@ -127,35 +128,53 @@ func makePatchWindow(pset *forgepb.Patchset) *patchWindow {
}
func (r *patchWindow) addPatchset(grid *gui.Node, pset *forgepb.Patchset) {
- repomap := make(map[*gitpb.Repo][]*forgepb.Patch)
- repohash := make(map[*gitpb.Repo]string)
+ /*
+ repomap := make(map[*gitpb.Repo][]*forgepb.Patch)
+ repohash := make(map[*gitpb.Repo]string)
+
+ // sort patches by repo namespace
+ all := pset.Patches.SortByFilename()
+ for all.Scan() {
+ p := all.Next()
+ s := p.RepoNamespace
+ repo := me.forge.FindByGoPath(s)
+ if repo == nil {
+ log.Info("Could not figure out repo path", s)
+ continue
+ }
+ repomap[repo] = append(repomap[repo], p)
+ repohash[repo] = p.StartHash
+ }
+ */
- // sort patches by repo namespace
all := pset.Patches.SortByFilename()
for all.Scan() {
p := all.Next()
- s := p.RepoNamespace
- repo := me.forge.FindByGoPath(s)
+ // for repo, patches := range repomap {
+ rn := p.RepoNamespace
+ repo := me.forge.FindByGoPath(rn)
if repo == nil {
- log.Info("Could not figure out repo path", s)
- continue
+ log.Info("Could not figure out repo path", rn)
+ rn += " bad repo"
}
- repomap[repo] = append(repomap[repo], p)
- repohash[repo] = p.StartHash
- }
+ log.Info("Adding patches for", rn)
+ grid.NewLabel(rn)
- for repo, patches := range repomap {
- log.Info(repo.GetGoPath())
- grid.NewLabel(repo.GetGoPath())
+ /*
+ for i, p := range patches {
+ log.Info(i, p.Filename)
+ grid.NewLabel(p.Comment)
+ grid.NewLabel("in current branch?")
+ break
+ }
+ */
+ // hash := repohash[repo]
+ grid.NewLabel(p.StartHash)
+ grid.NewLabel(p.Filename)
- for i, p := range patches {
- log.Info(i, p.Filename)
- grid.NewLabel(p.Comment)
- grid.NewLabel("in current branch?")
- break
+ if repo == nil {
+ continue
}
- hash := repohash[repo]
- grid.NewLabel(hash)
var win *repoPatchWindow
grid.NewButton("View", func() {
if win != nil {
@@ -164,29 +183,64 @@ func (r *patchWindow) addPatchset(grid *gui.Node, pset *forgepb.Patchset) {
return
}
- win = makeRepoPatchWindow(repo, patches)
+ // win = makeRepoPatchWindow(repo, p)
win.Show()
})
grid.NewCheckbox("").SetChecked(true)
grid.NewCheckbox("").SetChecked(true)
grid.NewButton("save", func() {
- for _, p := range patches {
- _, filen := filepath.Split(p.Filename)
- tmpname := filepath.Join("/tmp", filen)
- log.Info("saving as", tmpname, p.Filename)
- raw, _ := os.OpenFile(tmpname, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
- raw.Write(p.Data)
- raw.Close()
- }
- })
- grid.NewButton("view hash", func() {
- cmd := []string{"git", "whatchanged", hash}
- log.Info(repo.GetFullPath(), cmd)
- })
- grid.NewButton("git am", func() {
- cmd := []string{"git", "whatchanged", hash}
- log.Info(repo.GetFullPath(), cmd)
+ // savePatchset(p)
+ /*
+ for _, p := range patches {
+ _, filen := filepath.Split(p.Filename)
+ tmpname := filepath.Join("/tmp", filen)
+ log.Info("saving as", tmpname, p.Filename)
+ raw, _ := os.OpenFile(tmpname, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644)
+ raw.Write(p.Data)
+ raw.Close()
+ }
+ */
})
+ /*
+ grid.NewButton("view hash", func() {
+ cmd := []string{"git", "whatchanged", hash}
+ log.Info(repo.GetFullPath(), cmd)
+ })
+ grid.NewButton("git am", func() {
+ cmd := []string{"git", "whatchanged", hash}
+ log.Info(repo.GetFullPath(), cmd)
+ })
+ */
grid.NextRow()
}
}
+
+// saves the patches in ~/.config/forge/currentpatches/
+func savePatchset(pset *forgepb.Patchset) error {
+ log.Info("savePatches() NAME", pset.Name)
+ log.Info("savePatches() COMMENT", pset.Comment)
+ log.Info("savePatches() GIT_AUTHOR_NAME", pset.GetGitAuthorName())
+ log.Info("savePatches() GIT_AUTHOR_EMAIL", pset.GetGitAuthorEmail())
+ log.Info("savePatches() Branch Name", pset.GetStartBranchName())
+ log.Info("savePatches() Start Hash", pset.GetStartBranchHash())
+
+ var count int
+ var bad int
+ var lasterr error
+ all := pset.Patches.SortByFilename()
+ for all.Scan() {
+ p := all.Next()
+ basedir := filepath.Join(os.Getenv("FORGE_CONFIG"), "currentpatches")
+ if fullname, err := savePatchFile(p, basedir); err != nil {
+ log.Info(fullname, "save failed", err)
+ bad += 1
+ lasterr = err
+ }
+ count += 1
+ }
+ log.Info("pset has", count, "total patches, ", bad, "bad save patches")
+ if bad == 0 {
+ return lasterr
+ }
+ return nil
+}