// Copyright 2024 WIT.COM Inc Licensed GPL 3.0 package main import ( "os" "path/filepath" "go.wit.com/lib/gui/shell" "go.wit.com/lib/protobuf/forgepb" "go.wit.com/log" ) func dumpPatchset(pset *forgepb.Patchs) error { log.Info("applyPatches() NAME", pset.Name) log.Info("applyPatches() COMMENT", pset.Comment) log.Info("applyPatches() GIT_AUTHOR_NAME", pset.GetGitAuthorName()) log.Info("applyPatches() GIT_AUTHOR_EMAIL", pset.GetGitAuthorEmail()) all := pset.SortByFilename() for all.Scan() { p := all.Next() // log.Info("pset filename FILENAME IS REAL?", p.Filename, pset.Name, pset.Comment) // basepath, filename := filepath.Split(p.Filename) log.Info("pset p.Filename", p.Filename) } return nil } func applyPatches(pset *forgepb.Patchs) error { var everythingworked bool = true tmpdir, err := os.MkdirTemp("", "forge") if err != nil { return err } // log.Info("got to applyPatches() pset", pset) log.Info("applyPatches() NAME", pset.Name) log.Info("applyPatches() COMMENT", pset.Comment) log.Info("applyPatches() GIT_AUTHOR_NAME", pset.GetGitAuthorName()) log.Info("applyPatches() GIT_AUTHOR_EMAIL", pset.GetGitAuthorEmail()) all := pset.SortByFilename() for all.Scan() { p := all.Next() // log.Info("pset filename FILENAME IS REAL?", p.Filename, pset.Name, pset.Comment) basepath, filename := filepath.Split(p.Filename) fullpath := filepath.Join(me.forge.GetGoSrc(), basepath) log.Info("pset filename FILENAME IS REAL? fullpath", fullpath) fullTmpdir := filepath.Join(tmpdir, basepath) err := os.MkdirAll(fullTmpdir, os.ModePerm) if err != nil { log.Info("applyPathces() MkdirAll failed for", fullTmpdir) log.Info("applyPathces() MkdirAll failed err", err) everythingworked = false continue } log.Info("pset filename FILENAME IS REAL? tmp fullTmpdir", fullTmpdir) tmpname := filepath.Join(fullTmpdir, filename) raw, _ := os.OpenFile(tmpname, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0644) raw.Write(p.Data) raw.Close() cmd := []string{"git", "am", tmpname} result := shell.PathRun(fullpath, cmd) if result.Exit != 0 { log.Info("cmd failed", cmd, result.Exit) everythingworked = false } // until 'git am' works everythingworked = false } if everythingworked { os.RemoveAll(tmpdir) // clean up } log.Info("THIS IS THE END MY FRIEND") return nil } func readPatchFile(pbfile string) (*forgepb.Patchs, error) { bytes, err := os.ReadFile(pbfile) if err != nil { log.Info("readfile error", pbfile, err) return nil, err } return handleBytes(bytes) } func handleBytes(bytes []byte) (*forgepb.Patchs, error) { var pset *forgepb.Patchs pset = new(forgepb.Patchs) err := pset.Unmarshal(bytes) if err != nil { log.Info("Unmarshal failed", err) return nil, err } return pset, nil }