Compare commits
6 Commits
Author | SHA1 | Date |
---|---|---|
|
2232aa5823 | |
|
8e3008cfe8 | |
|
884d8db585 | |
|
4eada310b8 | |
|
643be0abea | |
|
81fc15e743 |
12
Makefile
12
Makefile
|
@ -5,7 +5,7 @@
|
|||
# go install
|
||||
|
||||
|
||||
all: forgeConfig.pb.go patchset.pb.go goimports vet
|
||||
all: forgeConfig.pb.go patch.pb.go set.pb.go goimports vet
|
||||
|
||||
generate: clean
|
||||
autogenpb --proto patchset.proto
|
||||
|
@ -27,8 +27,14 @@ clean:
|
|||
forgeConfig.pb.go: forgeConfig.proto
|
||||
autogenpb --proto forgeConfig.proto
|
||||
|
||||
patchset.pb.go: patchset.proto
|
||||
autogenpb --proto patchset.proto
|
||||
# patchset.pb.go: patchset.proto
|
||||
# autogenpb --proto patchset.proto
|
||||
|
||||
patch.pb.go: patch.proto
|
||||
autogenpb --proto patch.proto
|
||||
|
||||
set.pb.go: set.proto
|
||||
autogenpb --proto set.proto
|
||||
|
||||
protoc-test:
|
||||
cd ~/go/src && protoc \
|
||||
|
|
|
@ -246,7 +246,7 @@ func (f *Forge) printForgedToTable(repo *gitpb.Repo, sizes []int) {
|
|||
log.Info(cobol.TerminalChomp(start + " " + end))
|
||||
}
|
||||
|
||||
func (psets *Patchsets) PrintTable() {
|
||||
func (psets *Sets) PrintTable() {
|
||||
if psets == nil {
|
||||
return
|
||||
}
|
||||
|
@ -257,10 +257,11 @@ func (psets *Patchsets) PrintTable() {
|
|||
sizes := []int{12, 12, 3, 3, 40, 80, 2, 2, 2, 2}
|
||||
log.Info(cobol.TerminalChomp(cobol.StandardTableSize10(sizes, args)))
|
||||
|
||||
/*
|
||||
var countCONTENTS int
|
||||
var countPARTS int
|
||||
for x, pset := range psets.GetPatchsets() {
|
||||
log.Info(pset.Uuid, pset.Name, pset.State)
|
||||
for x, pset := range psets.GetSets() {
|
||||
log.Info(pset.Patches.Uuid, pset.Patches.Name, pset.Patches.State)
|
||||
if pset.State == "DONE" {
|
||||
// old patchset
|
||||
continue
|
||||
|
@ -280,6 +281,7 @@ func (psets *Patchsets) PrintTable() {
|
|||
}
|
||||
}
|
||||
log.Infof("Total Contents (%d) Parts (%d)\n", countCONTENTS, countPARTS)
|
||||
*/
|
||||
}
|
||||
|
||||
func (patches *Patches) PrintTable() {
|
||||
|
@ -293,6 +295,7 @@ func (patches *Patches) PrintTable() {
|
|||
sizes := []int{12, 12, 3, 3, 40, 80, 2, 2, 2, 2}
|
||||
log.Info(cobol.TerminalChomp(cobol.StandardTableSize10(sizes, args)))
|
||||
|
||||
/*
|
||||
var countPARTS int
|
||||
for x, p := range patches.GetPatches() {
|
||||
var args []string
|
||||
|
@ -306,4 +309,5 @@ func (patches *Patches) PrintTable() {
|
|||
countPARTS += 1
|
||||
}
|
||||
log.Infof("Total Patches (%d)\n", countPARTS)
|
||||
*/
|
||||
}
|
||||
|
|
2
init.go
2
init.go
|
@ -92,7 +92,7 @@ func (f *Forge) initFromConfig() {
|
|||
f.Repos.ConfigLoad(f.Config.ReposPB)
|
||||
|
||||
// init the Patchsets
|
||||
f.Patchsets = NewPatchsets()
|
||||
f.Patchsets = NewSets()
|
||||
|
||||
// todo: play with these / determine good values based on user's machine
|
||||
if f.Config.RillX == 0 {
|
||||
|
|
|
@ -0,0 +1,69 @@
|
|||
// Copyright 2025 WIT.COM Inc Licensed GPL 3.0
|
||||
|
||||
syntax = "proto3";
|
||||
|
||||
package forgepb;
|
||||
|
||||
import "google/protobuf/timestamp.proto"; // Import the well-known type for Timestamp
|
||||
|
||||
// Forge doesn't need this kind of specificity
|
||||
// but this is what the patch files contain and how git sees them
|
||||
// message Blob {
|
||||
// string hunkLine = 1;
|
||||
// bytes data = 2;
|
||||
// }
|
||||
//
|
||||
// message File {
|
||||
// string filename = 1;
|
||||
// string hashLine = 2;
|
||||
// repeated Blob Blobs = 3;
|
||||
// }
|
||||
//
|
||||
// message Patch {
|
||||
// repeated File Files = 1;
|
||||
// string repoNamespace = 2;
|
||||
// string gH = 3;
|
||||
// string gaI = 4;
|
||||
// string gcI = 5;
|
||||
// }
|
||||
|
||||
// git log -1 --format="%H %aI %cI %an %ae %cn %ce"
|
||||
|
||||
message Patch {
|
||||
string namespace = 1; // the base repo git namespace
|
||||
bytes data = 2; // the raw data of the whole patch
|
||||
string gH = 3; // Commit Hash (%H)
|
||||
string gT = 4; // Tree Hash (%T)
|
||||
string gP = 5; // Parent Hashes (%P)
|
||||
string gs = 6; // Subject (%s)
|
||||
string gaI = 7; // Author Date, ISO 8601 format (%aI)
|
||||
string gan = 8; // Author Name (%an)
|
||||
string gae = 9; // Author Email (%ae)
|
||||
string gcI = 10; // Committer Date, ISO 8601 format (%cI)
|
||||
string gcn = 11; // Committer Name (%cn)
|
||||
string gce = 12; // Committer Email (%ce)
|
||||
string gN = 13; // Commit Notes (%N)
|
||||
string gGG = 14; // GPG Signature, raw (%GG)
|
||||
string gGS = 15; // GPG Signer Name (%GS)
|
||||
string gGK = 16; // GPG Key ID (%GK)
|
||||
string newHash = 17; // new hash
|
||||
string state = 18; // the 'state' of the patch
|
||||
string filename = 19; // `autogenpb:unique` `autogenpb:sort`
|
||||
string startHash = 20; // the start commit hash
|
||||
string commitHash = 21; // the git commit hash of this patch `autogenpb:sort` `autogenpb:unique`
|
||||
string comment = 22; // the git commit message (in patch form)
|
||||
repeated string Files = 23; // the filenames this patch changes
|
||||
google.protobuf.Timestamp ctime = 24; // create time of the patch
|
||||
bool applied = 25; // have you applied this patch?
|
||||
bool upstream = 26; // has this patch been applied upstream?
|
||||
string patchId = 27; // patchId `autogenpb:unique`
|
||||
string treeHash = 28; // final tree Hash
|
||||
}
|
||||
|
||||
// this is a "PATCH: [1/x]" series
|
||||
message Patches { // `autogenpb:marshal` `autogenpb:gui:Patch` `autogenpb:http`
|
||||
string uuid = 1; // `autogenpb:uuid:2679065e-c81d-4a00-aca4-03c158a834fb`
|
||||
string version = 2; // `autogenpb:version:v2.0.0`
|
||||
repeated Patch patches = 3;
|
||||
string Error = 4; // when passing these around, if there is an error, store it here
|
||||
}
|
|
@ -11,6 +11,7 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"go.wit.com/lib/hostname"
|
||||
"go.wit.com/lib/protobuf/gitpb"
|
||||
"go.wit.com/lib/protobuf/httppb"
|
||||
"go.wit.com/log"
|
||||
|
@ -22,24 +23,30 @@ func (p *Patches) HttpPostVerbose(baseURL string, route string) (*Patches, *http
|
|||
return p.HttpPost(baseURL, route)
|
||||
}
|
||||
|
||||
func (p *Patchsets) HttpPostVerbose(baseURL string, route string) (*Patchsets, *httppb.HttpRequest, error) {
|
||||
func (p *Set) HttpPostVerbose(baseURL string, route string) (*Set, *httppb.HttpRequest, error) {
|
||||
p.PrintTable()
|
||||
return p.HttpPost(baseURL, route)
|
||||
}
|
||||
|
||||
func newPatchset(name string) *Patchset {
|
||||
pset := new(Patchset)
|
||||
func (p *Sets) HttpPostVerbose(baseURL string, route string) (*Sets, *httppb.HttpRequest, error) {
|
||||
p.PrintTable()
|
||||
return p.HttpPost(baseURL, route)
|
||||
}
|
||||
|
||||
func newPatchset(name string) *Set {
|
||||
pset := new(Set)
|
||||
pset.Name = name
|
||||
pset.Ctime = timestamppb.New(time.Now())
|
||||
pset.Uuid = uuid.New().String()
|
||||
pset.Hostname, _ = os.Hostname()
|
||||
pset.Hostname, _ = hostname.Get()
|
||||
pset.Patches = NewPatches()
|
||||
|
||||
return pset
|
||||
}
|
||||
|
||||
// creates a patchset
|
||||
// works from the user branches against the devel branches
|
||||
func (f *Forge) MakeDevelPatchSet(name string) (*Patchset, error) {
|
||||
func (f *Forge) MakeDevelPatchSet(name string) (*Set, error) {
|
||||
pset := newPatchset(name)
|
||||
if os.Getenv("GIT_AUTHOR_NAME") == "" {
|
||||
return nil, fmt.Errorf("GIT_AUTHOR_NAME not set")
|
||||
|
@ -56,7 +63,7 @@ func (f *Forge) MakeDevelPatchSet(name string) (*Patchset, error) {
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer os.RemoveAll(dir) // clean up
|
||||
// defer os.RemoveAll(dir) // clean up
|
||||
pset.TmpDir = dir
|
||||
|
||||
all := f.Repos.SortByFullPath()
|
||||
|
@ -72,6 +79,10 @@ func (f *Forge) MakeDevelPatchSet(name string) (*Patchset, error) {
|
|||
continue
|
||||
}
|
||||
|
||||
if repo.ActualGetDevelHash() == repo.ActualGetUserHash() {
|
||||
continue
|
||||
}
|
||||
|
||||
// make a patchset from user to devel
|
||||
// TODO: verify branches are otherwise exact
|
||||
pset.StartBranchName = repo.GetDevelBranchName()
|
||||
|
@ -85,7 +96,7 @@ func (f *Forge) MakeDevelPatchSet(name string) (*Patchset, error) {
|
|||
return pset, nil
|
||||
}
|
||||
|
||||
func (pset *Patchset) makePatchSetNew(repo *gitpb.Repo) error {
|
||||
func (pset *Set) makePatchSetNew(repo *gitpb.Repo) error {
|
||||
startBranch := pset.StartBranchName
|
||||
endBranch := pset.EndBranchName
|
||||
repoDir := filepath.Join(pset.TmpDir, repo.GetGoPath())
|
||||
|
@ -122,24 +133,23 @@ func (pset *Patchset) makePatchSetNew(repo *gitpb.Repo) error {
|
|||
return errors.New(fmt.Sprintf("git returned %d", r.Exit))
|
||||
}
|
||||
if len(r.Stdout) == 0 {
|
||||
log.Infof("No patches in %s (%s,%s)\n", repo.FullPath, repo.ActualGetDevelHash(), repo.ActualGetUserHash())
|
||||
// git created no files to add
|
||||
return nil
|
||||
}
|
||||
|
||||
err = pset.addPatchFiles(repo)
|
||||
pset.Ctime = timestamppb.New(time.Now())
|
||||
err = pset.addPatchFiles(repo, repoDir)
|
||||
log.Infof("Added %d patches for %s len=%d\n", len(r.Stdout), repo.FullPath, pset.Patches.Len())
|
||||
// pset.PrintTable()
|
||||
return err
|
||||
}
|
||||
|
||||
// git show <original_commit_hash> | git patch-id
|
||||
// git cat-file -p <commit_hash> | grep tree
|
||||
// process each file in pDir/
|
||||
func (p *Patchset) addPatchFiles(repo *gitpb.Repo) error {
|
||||
psetDir := repo.GetGoPath()
|
||||
tmpDir := p.TmpDir
|
||||
// log.Info("ADD PATCH FILES ADDED DIR", tmpDir)
|
||||
fullDir := filepath.Join(tmpDir, psetDir)
|
||||
func (p *Set) addPatchFiles(repo *gitpb.Repo, fullDir string) error {
|
||||
var baderr error
|
||||
// log.Info("ADD PATCH FILES ADDED DIR", fullDir)
|
||||
filepath.Walk(fullDir, func(path string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
// Handle possible errors, like permission issues
|
||||
|
@ -161,19 +171,21 @@ func (p *Patchset) addPatchFiles(repo *gitpb.Repo) error {
|
|||
patch.Filename, _ = filepath.Rel(p.TmpDir, path)
|
||||
patch.Data = data
|
||||
if err := patch.parseData(); err != nil {
|
||||
log.Info("parseData() failed", err)
|
||||
return err
|
||||
}
|
||||
if err := findPatchId(repo, patch); err != nil {
|
||||
log.Info("findPatchId() failed", err)
|
||||
return err
|
||||
}
|
||||
patch.StartHash = repo.ActualDevelHash()
|
||||
patch.NewHash = "na"
|
||||
patch.Namespace = repo.GetGoPath()
|
||||
if p.Patches == nil {
|
||||
log.Info("SHOULD NOT HAVE HAPPENED. p.Patches == nil")
|
||||
p.Patches = new(Patches)
|
||||
}
|
||||
p.Patches.Append(patch)
|
||||
p.Patches.Uuid = uuid.New().String()
|
||||
// log.Info("ADDED PATCH FILE", path)
|
||||
return nil
|
||||
})
|
||||
|
@ -272,10 +284,11 @@ func findPatchId(repo *gitpb.Repo, p *Patch) error {
|
|||
return fmt.Errorf("git-patch-id produced empty output")
|
||||
}
|
||||
|
||||
if fields[0] != p.CommitHash {
|
||||
if fields[1] != p.CommitHash {
|
||||
return fmt.Errorf("patchid did not match %s != %v", p.CommitHash, fields)
|
||||
}
|
||||
|
||||
p.PatchId = fields[1]
|
||||
// log.Infof("hash=%s patchid(%v) %s\n", p.CommitHash, fields, p.Filename)
|
||||
p.PatchId = fields[0]
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -14,7 +14,7 @@ import (
|
|||
)
|
||||
|
||||
func (f *Forge) LoadPatchsets() error {
|
||||
f.Patchsets = NewPatchsets()
|
||||
f.Patchsets = NewSets()
|
||||
|
||||
filename := filepath.Join(f.Config.PatchDir, "all-patches.pb")
|
||||
|
||||
|
@ -39,7 +39,7 @@ func (f *Forge) InitPatchsets() error {
|
|||
log.Info("LoadPatchsets() failed", err)
|
||||
}
|
||||
// TODO: check if Unmarshal failed here
|
||||
f.Patchsets = NewPatchsets()
|
||||
f.Patchsets = NewSets()
|
||||
f.findAutoPatchset() // adds the default values
|
||||
return f.SavePatchsets()
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ func (f *Forge) SavePatchsets() error {
|
|||
}
|
||||
defer regfile.Close()
|
||||
|
||||
newpb := proto.Clone(f.Patchsets).(*Patchsets)
|
||||
newpb := proto.Clone(f.Patchsets).(*Sets)
|
||||
if newpb == nil {
|
||||
for pset := range f.Patchsets.IterAll() {
|
||||
pset.ShowPatchsets()
|
||||
|
@ -79,7 +79,7 @@ func cleanSubject(line string) string {
|
|||
return strings.TrimSpace(cleaned)
|
||||
}
|
||||
|
||||
func (pb *Patchset) ShowPatchsets() error {
|
||||
func (pb *Set) ShowPatchsets() error {
|
||||
author := "Author: " + pb.GitAuthorName
|
||||
author += " <" + pb.GitAuthorEmail + ">"
|
||||
log.Printf("%-16s %s %s %s\n", string(pb.Uuid)[0:8], pb.Name, pb.Comment, author)
|
||||
|
@ -109,7 +109,7 @@ func (f *Forge) AddPatch(patch *Patch) bool {
|
|||
}
|
||||
|
||||
// adds a patchset or just the patches
|
||||
func (f *Forge) AddPatchset(pb *Patchset) bool {
|
||||
func (f *Forge) AddPatchset(pb *Set) bool {
|
||||
var changed bool
|
||||
// if the name of the patchset is "forge auto commit"
|
||||
// then just add all the patches
|
||||
|
@ -146,23 +146,18 @@ func (f *Forge) AddPatchset(pb *Patchset) bool {
|
|||
}
|
||||
}
|
||||
|
||||
// Clone() this protobuf into me.forge.Patchsets
|
||||
var newpb *Patchset
|
||||
newpb = proto.Clone(pb).(*Patchset)
|
||||
if newpb != nil {
|
||||
f.Patchsets.Patchsets = append(f.Patchsets.Patchsets, newpb)
|
||||
}
|
||||
f.Patchsets.Append(pb)
|
||||
return true
|
||||
}
|
||||
|
||||
func (f *Forge) findAutoPatchset() *Patchset {
|
||||
func (f *Forge) findAutoPatchset() *Set {
|
||||
for pset := range f.Patchsets.IterAll() {
|
||||
if pset.Name == "forge auto commit" {
|
||||
return pset
|
||||
}
|
||||
}
|
||||
|
||||
var fauto *Patchset
|
||||
var fauto *Set
|
||||
log.Warn("findAutoPatchset() had to create 'forge auto commit'")
|
||||
if fauto == nil {
|
||||
fauto = makeDefaultPatchset()
|
||||
|
@ -171,8 +166,8 @@ func (f *Forge) findAutoPatchset() *Patchset {
|
|||
return fauto
|
||||
}
|
||||
|
||||
func makeDefaultPatchset() *Patchset {
|
||||
fauto := new(Patchset)
|
||||
func makeDefaultPatchset() *Set {
|
||||
fauto := new(Set)
|
||||
fauto.Name = "forge auto commit"
|
||||
fauto.Patches = NewPatches()
|
||||
fauto.Uuid = uuid.New().String()
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
package forgepb
|
||||
|
||||
/*
|
||||
// makes a new patches protobuf. These are all the patches on your machine.
|
||||
func NewPatches() *Patches {
|
||||
x := new(Patches)
|
||||
func NewPatches() *Patchs {
|
||||
x := new(Patchs)
|
||||
x.Uuid = "2679065e-c81d-4a00-aca4-03c158a834fb"
|
||||
x.Version = "v2.0.0 go.wit.com/lib/protobuf/forgepb"
|
||||
return x
|
||||
}
|
||||
*/
|
||||
|
|
|
@ -1,92 +0,0 @@
|
|||
// Copyright 2025 WIT.COM Inc Licensed GPL 3.0
|
||||
|
||||
syntax = "proto3";
|
||||
|
||||
package forgepb;
|
||||
|
||||
import "google/protobuf/timestamp.proto"; // Import the well-known type for Timestamp
|
||||
|
||||
// Forge doesn't need this kind of specificity
|
||||
// but this is what the patch files contain and how git sees them
|
||||
// message Blob {
|
||||
// string hunkLine = 1;
|
||||
// bytes data = 2;
|
||||
// }
|
||||
//
|
||||
// message File {
|
||||
// string filename = 1;
|
||||
// string hashLine = 2;
|
||||
// repeated Blob Blobs = 3;
|
||||
// }
|
||||
//
|
||||
// message Patch {
|
||||
// repeated File Files = 1;
|
||||
// string repoNamespace = 2;
|
||||
// string gH = 3;
|
||||
// string gaI = 4;
|
||||
// string gcI = 5;
|
||||
// }
|
||||
|
||||
// git log -1 --format="%H %aI %cI %an %ae %cn %ce"
|
||||
|
||||
message Patch {
|
||||
string namespace = 1; // the base repo git namespace
|
||||
bytes data = 2; // the raw data of the whole patch
|
||||
string gH = 3; // Commit Hash (%H)
|
||||
string gT = 4; // Tree Hash (%T)
|
||||
string gP = 5; // Parent Hashes (%P)
|
||||
string gs = 6; // Subject (%s)
|
||||
string gaI = 7; // Author Date, ISO 8601 format (%aI)
|
||||
string gan = 8; // Author Name (%an)
|
||||
string gae = 9; // Author Email (%ae)
|
||||
string gcI = 10; // Committer Date, ISO 8601 format (%cI)
|
||||
string gcn = 11; // Committer Name (%cn)
|
||||
string gce = 12; // Committer Email (%ce)
|
||||
string gN = 13; // Commit Notes (%N)
|
||||
string gGG = 14; // GPG Signature, raw (%GG)
|
||||
string gGS = 15; // GPG Signer Name (%GS)
|
||||
string gGK = 16; // GPG Key ID (%GK)
|
||||
string newHash = 17; // new hash
|
||||
string state = 18; // the 'state' of the patch
|
||||
string filename = 19; // `autogenpb:unique` `autogenpb:sort`
|
||||
string startHash = 20; // the start commit hash
|
||||
string commitHash = 21; // the git commit hash of this patch `autogenpb:sort` `autogenpb:unique`
|
||||
string comment = 22; // the git commit message (in patch form)
|
||||
repeated string Files = 23; // the filenames this patch changes
|
||||
google.protobuf.Timestamp ctime = 24; // create time of the patch
|
||||
bool applied = 25; // have you applied this patch?
|
||||
bool upstream = 26; // has this patch been applied upstream?
|
||||
string patchId = 27; // patchId
|
||||
string treeHash = 28; // final tree Hash
|
||||
}
|
||||
|
||||
// this is a "PATCH: [1/x]" series
|
||||
message Patches { // `autogenpb:marshal` `autogenpb:gui:Patch` `autogenpb:http`
|
||||
string uuid = 1; // `autogenpb:uuid:2679065e-c81d-4a00-aca4-03c158a834fb`
|
||||
string version = 2; // `autogenpb:version:v2.0.0`
|
||||
repeated Patch Patches = 3;
|
||||
string Error = 5; // when passing these around, if there is an error, store it here
|
||||
}
|
||||
|
||||
message Patchset { // `autogenpb:marshal`
|
||||
Patches patches = 1; //
|
||||
string name = 2; // `autogenpb:sort`
|
||||
string comment = 3; //
|
||||
string gitAuthorName = 4; // `autogenpb:sort`
|
||||
string gitAuthorEmail = 5; //
|
||||
google.protobuf.Timestamp ctime = 6; // create time of the patchset
|
||||
string tmpDir = 7; // temp dir
|
||||
string startBranchName = 8; //
|
||||
string endBranchName = 9; //
|
||||
string startBranchHash = 10; //
|
||||
string endBranchHash = 11; //
|
||||
string state = 12; // the state of the patch
|
||||
string uuid = 13; // `autogenpb:sort` `autogenpb:unique`
|
||||
string hostname = 14; //
|
||||
}
|
||||
|
||||
message Patchsets { // `autogenpb:marshal` `autogenpb:gui` `autogenpb:nomutex` `autogenpb:http`
|
||||
string uuid = 1; // `autogenpb:uuid:be926ad9-f07f-484c-adf2-d96eeabf3079`
|
||||
string version = 2; // `autogenpb:version:v0.0.45`
|
||||
repeated Patchset Patchsets = 3;
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
// Copyright 2025 WIT.COM Inc Licensed GPL 3.0
|
||||
|
||||
syntax = "proto3";
|
||||
|
||||
package forgepb;
|
||||
|
||||
import "google/protobuf/timestamp.proto"; // Import the well-known type for Timestamp
|
||||
import "patch.proto"; // Import the well-known type for Timestamp
|
||||
|
||||
message Set { // `autogenpb:http`
|
||||
Patches patches = 1;
|
||||
string uuid = 2;
|
||||
google.protobuf.Timestamp ctime = 3; // when the patches were submitted
|
||||
string submitter = 4; // who submitted these // deprecate this
|
||||
string name = 5; // "fixes for foo"
|
||||
string gitAuthorName = 6;
|
||||
string gitAuthorEmail = 7;
|
||||
string hostname = 8;
|
||||
string tmpDir = 9; // temp dir for 'git am' deprecate this
|
||||
string startBranchName = 10; // deprecate this
|
||||
string endBranchName = 11; // deprecate this
|
||||
string startBranchHash = 12; // deprecate this
|
||||
string endBranchHash = 13; // deprecate this
|
||||
string comment = 14; // deprecate this
|
||||
string state = 15; // deprecate this
|
||||
}
|
||||
|
||||
message Sets { // `autogenpb:marshal` `autogenpb:gui` `autogenpb:nomutex` `autogenpb:http`
|
||||
string uuid = 1; // `autogenpb:uuid:be926ad9-f07f-484c-adf2-d96eeabf3079`
|
||||
string version = 2; // `autogenpb:version:v0.0.45`
|
||||
repeated Set sets = 3;
|
||||
}
|
|
@ -0,0 +1,89 @@
|
|||
// Copyright 2025 WIT.COM Inc Licensed GPL 3.0
|
||||
|
||||
package forgepb
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"go.wit.com/lib/cobol"
|
||||
"go.wit.com/log"
|
||||
)
|
||||
|
||||
func (pset *Set) PrintTable() {
|
||||
if pset == nil || pset.Patches == nil {
|
||||
return
|
||||
}
|
||||
log.DaemonMode(true) // don't timestamp lines
|
||||
|
||||
tablePB := pset.Patches.makeStandardTable()
|
||||
tablePB.MakeTable()
|
||||
tablePB.PrintTable()
|
||||
}
|
||||
|
||||
func (mt *PatchesTable) PrintTable() {
|
||||
// log.Info("ShowTable() SENDING TO GUI")
|
||||
mt.MakeTable()
|
||||
cobol.PrintTable(mt.pb)
|
||||
}
|
||||
|
||||
func (pb *Patches) makeStandardTable() *PatchesTable {
|
||||
t := pb.NewTable("tagList")
|
||||
t.NewUuid()
|
||||
|
||||
col := t.AddNamespace()
|
||||
col.Width = 28
|
||||
|
||||
col = t.AddCommitHash()
|
||||
col.Width = 8
|
||||
|
||||
col = t.AddPatchId()
|
||||
col.Width = 8
|
||||
|
||||
col = t.AddNewHash()
|
||||
col.Width = 8
|
||||
|
||||
col = t.AddTimeFunc("ctime", func(p *Patch) time.Time {
|
||||
// todo
|
||||
return p.Ctime.AsTime()
|
||||
})
|
||||
col.Width = 4
|
||||
|
||||
/*
|
||||
col = t.AddTimeFunc("age", func(repo *gitpb.GitTag) time.Time {
|
||||
// todo
|
||||
return time.Now()
|
||||
})
|
||||
col.Width = 4
|
||||
*/
|
||||
|
||||
// col = t.AddStringFunc("filename", func(p *Patch) string {
|
||||
// _, base := filepath.Split(p.Filename)
|
||||
// return base
|
||||
// })
|
||||
// col.Width = 24
|
||||
|
||||
col = t.AddComment()
|
||||
col.Width = 80
|
||||
return t
|
||||
}
|
||||
|
||||
/*
|
||||
func (pb *Sets) makeStandardTablePB() *SetsTable {
|
||||
t := pb.NewTable("tagList")
|
||||
t.NewUuid()
|
||||
|
||||
col := t.AddUuid()
|
||||
col.Width = 12
|
||||
|
||||
col = t.AddTimeFunc("ctime", func(pset *Set) time.Time {
|
||||
// todo
|
||||
return pset.Ctime.AsTime()
|
||||
})
|
||||
col.Width = 4
|
||||
|
||||
col = t.AddComment()
|
||||
col.Width = -1
|
||||
|
||||
return t
|
||||
}
|
||||
*/
|
|
@ -12,7 +12,7 @@ type Forge struct {
|
|||
once sync.Once
|
||||
Config *ForgeConfigs // config repos for readonly, private, etc
|
||||
Repos *gitpb.Repos // the repo protobufs
|
||||
Patchsets *Patchsets // patches that are in progress
|
||||
Patchsets *Sets // patches that are in progress
|
||||
hostname string // your hostname
|
||||
goWork bool // means the user is currently using a go.work file
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue