summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.go53
-rw-r--r--testautogen/Makefile8
-rw-r--r--testautogen/forgeConfig.proto39
3 files changed, 82 insertions, 18 deletions
diff --git a/main.go b/main.go
index 2e1240a..3be3730 100644
--- a/main.go
+++ b/main.go
@@ -9,6 +9,8 @@ import (
"github.com/alexflint/go-arg"
"go.wit.com/lib/gui/shell"
"go.wit.com/log"
+ "golang.org/x/text/cases"
+ "golang.org/x/text/language"
)
// sent via -ldflags
@@ -37,7 +39,7 @@ func main() {
}
// you need --upbase and --lobase
- if argv.UpBase == "" {
+ if argv.Proto == "" {
pp.WriteHelp(os.Stdout)
os.Exit(-1)
}
@@ -55,18 +57,20 @@ func main() {
sortmap := make(map[string]string)
sortmap["package"] = packageName
sortmap["protobase"] = protobase
- sortmap["base"] = argv.LoBase
+ if argv.LoBase == "" {
+ // if not set, assumed to be protobase
+ sortmap["base"] = protobase
+ } else {
+ sortmap["base"] = argv.LoBase
+ }
sortmap["lock"] = sortmap["base"] + "sLock" // is nonglobal and plural
- sortmap["Base"] = argv.UpBase
- sortmap["Bases"] = sortmap["Base"] + "s"
-
- sortparts := strings.Split(argv.Sort[0], ",")
- sortmap["sortBy"] = sortparts[0]
- sortmap["sortKey"] = sortparts[1]
-
- // will keep this key unique if defined
- sortmap["append"] = argv.Append
-
+ if argv.UpBase == "" {
+ sortmap["Base"] = cases.Title(language.English, cases.NoLower).String(protobase)
+ sortmap["Bases"] = sortmap["Base"] + "s"
+ } else {
+ sortmap["Base"] = argv.UpBase
+ sortmap["Bases"] = sortmap["Base"] + "s"
+ }
if argv.DryRun {
for k, v := range sortmap {
@@ -81,11 +85,26 @@ func main() {
syncLock(f, sortmap)
iterTop(f, sortmap)
iterNext(f, sortmap)
- iterSort(f, sortmap)
- iterAppend(f, sortmap)
+
+ // setup Append() functions
if argv.Append == "" {
- // do nothing. enforce no unique keys
+ iterAppend(f, sortmap) // Append() enforce no unique keys
+ } else {
+ iterAppend(f, sortmap) // Append() enforce no unique keys
+ sortmap["append"] = argv.Append
+ iterAppend(f, sortmap) // Append() enforce unique key argv.Append
+ }
+
+ // setup Sort() functions
+ if len(argv.Sort) == 0 {
+ // don't do any sorting
} else {
+ sortparts := strings.Split(argv.Sort[0], ",")
+ sortmap["sortBy"] = sortparts[0]
+ sortmap["sortKey"] = sortparts[1]
+
+ iterSort(f, sortmap)
+
// add ReplaceKey()
iterDelete(f, sortmap)
iterReplace(f, sortmap)
@@ -235,8 +254,8 @@ func iterAppend(w io.Writer, names map[string]string) {
if names["append"] == "" {
fmt.Fprintln(w, "func (all *"+names["Bases"]+") Append(newP *"+names["Base"]+") bool {")
} else {
- fmt.Fprintln(w, "func (all *"+names["Bases"]+") Append(newP *"+names["Base"]+") bool { // todo: make unique name here")
- // fmt.Fprintln(w, "func (all *"+names["Bases"]+") AppendUnique(newP *"+names["Base"]+") bool {")
+ // fmt.Fprintln(w, "func (all *"+names["Bases"]+") Append(newP *"+names["Base"]+") bool { // todo: make unique name here")
+ fmt.Fprintln(w, "func (all *"+names["Bases"]+") AppendUnique(newP *"+names["Base"]+") bool {")
}
fmt.Fprintln(w, " "+names["lock"]+".Lock()")
fmt.Fprintln(w, " defer "+names["lock"]+".Unlock()")
diff --git a/testautogen/Makefile b/testautogen/Makefile
index 4bbcdef..a1bf723 100644
--- a/testautogen/Makefile
+++ b/testautogen/Makefile
@@ -3,10 +3,11 @@ BUILDTIME = $(shell date +%Y.%m.%d)
test: vet
-all: clean test.pb.go run
+all: clean test.pb.go forgeConfig.pb.go run
run:
../autogenpb --proto test.proto --lobase gitTag --upbase GitTag --sort "ByPath,Refname" --marshal GitTags --append Refname
+ ../autogenpb --proto forgeConfig.proto --sort "ByPath,GoPath" --append GoPath
vet:
@GO111MODULE=off go vet
@@ -31,3 +32,8 @@ test.pb.go: test.proto
cd ~/go/src && protoc --go_out=. --proto_path=go.wit.com/apps/autogenpb/testautogen \
--go_opt=Mtest.proto=go.wit.com/apps/autogenpb/testautogen \
test.proto
+
+forgeConfig.pb.go: forgeConfig.proto
+ cd ~/go/src && protoc --go_out=. --proto_path=go.wit.com/apps/autogenpb/testautogen \
+ --go_opt=MforgeConfig.proto=go.wit.com/apps/autogenpb/testautogen \
+ forgeConfig.proto
diff --git a/testautogen/forgeConfig.proto b/testautogen/forgeConfig.proto
new file mode 100644
index 0000000..f963968
--- /dev/null
+++ b/testautogen/forgeConfig.proto
@@ -0,0 +1,39 @@
+syntax = "proto3";
+
+package testautogen;
+
+import "google/protobuf/timestamp.proto"; // Import the well-known type for Timestamp
+
+// define 3 branches. that is all that is supported
+// the term 'master' is used in the code because 'main' is a reserved word in golang already
+// allow 'read only' and 'private' flags
+// package names sometimes must be different than the binary name
+// for example 'zookeeper' is packaged as 'zookeeper-go'
+// due to the prior apache foundation project. This happens and is ok!
+message ForgeConfig {
+ string goPath = 1; // Examples: 'go.wit.com/apps/go-clone' or "~/mythings" or "/home/src/foo"
+
+ bool writable = 2; // if you have write access to the repo
+ bool readOnly = 3; // the opposite, but needed for now because I don't know what I'm doing
+ bool private = 4; // if the repo can be published
+ bool directory = 5; // everything in this directory should use these writable & private values
+ bool favorite = 6; // you like this. always git clone/go clone this repo
+ bool interesting = 7; // this is something interesting you found and want to remember it
+
+ string masterBranchName = 8; // git 'main' or 'master' branch name
+ string develBranchName = 9; // whatever the git 'devel' branch name is
+ string userBranchName = 10; // whatever your username branch is
+
+ string debName = 11; // the actual name used with 'apt install' (or distro apt equivalent.
+// todo: appeal to everyone to alias 'apt' on rhat, gentoo, arch, etc to alias 'apt install'
+// so we can make easier instructions for new linux users. KISS
+
+ google.protobuf.Timestamp verstamp = 12; // the git commit timestamp of the version
+}
+
+// TODO: autogen 'sort', 'marshal'
+message ForgeConfigs {
+ string uuid = 1; // could be useful for /usr/share/file/magic someday?
+ string version = 2; // could be used for protobuf schema change violations?
+ repeated ForgeConfig ForgeConfigs = 3;
+}