summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile8
-rw-r--r--config.go2
-rw-r--r--forgeConfig.proto2
-rw-r--r--forgeConfig.sort.go8
-rw-r--r--helpers.go60
-rw-r--r--repo.proto39
-rw-r--r--repos.go151
7 files changed, 7 insertions, 263 deletions
diff --git a/Makefile b/Makefile
index 202004e..368120c 100644
--- a/Makefile
+++ b/Makefile
@@ -5,7 +5,7 @@
# go install
-all: repo.pb.go forgeConfig.pb.go
+all: forgeConfig.pb.go
make -C forgeConfig
vet: lint
@@ -29,12 +29,6 @@ clean:
-rm -f go.*
make -C forgeConfig clean
-repo.pb.go: repo.proto
- # I'm using version v1.35.x from google.golang.org/protobuf/cmd/protoc-gen-go
- cd ~/go/src && protoc --go_out=. --proto_path=go.wit.com/lib/protobuf/forgepb \
- --go_opt=Mrepo.proto=go.wit.com/lib/protobuf/forgepb \
- repo.proto
-
forgeConfig.pb.go: forgeConfig.proto
# I'm using version v1.35.x from google.golang.org/protobuf/cmd/protoc-gen-go
cd ~/go/src && protoc --go_out=. --proto_path=go.wit.com/lib/protobuf/forgepb \
diff --git a/config.go b/config.go
index 0866ae3..923e35c 100644
--- a/config.go
+++ b/config.go
@@ -48,7 +48,7 @@ func (c *ForgeConfigs) ConfigLoad() error {
var data []byte
var err error
if c == nil {
- // can't safely do c = new(Repo) if c is in a struct from the caller. notsure why
+ // can't safely do c = new(ForgeConfig) if c is in a struct from the caller. notsure why
return errors.New("It's not safe to run ConfigLoad() on a nil")
}
diff --git a/forgeConfig.proto b/forgeConfig.proto
index ab4e033..5d3b25a 100644
--- a/forgeConfig.proto
+++ b/forgeConfig.proto
@@ -31,7 +31,7 @@ message ForgeConfig {
google.protobuf.Timestamp verstamp = 12; // the git commit timestamp of the version
}
-// TODO: autogen 'Repos'
+// 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?
diff --git a/forgeConfig.sort.go b/forgeConfig.sort.go
index 4b0ff69..4a10c32 100644
--- a/forgeConfig.sort.go
+++ b/forgeConfig.sort.go
@@ -20,8 +20,8 @@ type ForgeConfigIterator struct {
index int
}
-// NewForgeConfigIterator initializes a new iterator.
-func NewForgeConfigIterator(packs []*ForgeConfig) *ForgeConfigIterator {
+// newForgeConfigIterator initializes a new iterator.
+func newForgeConfigIterator(packs []*ForgeConfig) *ForgeConfigIterator {
return &ForgeConfigIterator{packs: packs}
}
@@ -57,7 +57,7 @@ func (it *ForgeConfigIterator) Next() *ForgeConfig {
func (r *ForgeConfigs) All() *ForgeConfigIterator {
forgeConfigPointers := r.selectAllForgeConfigs()
- iterator := NewForgeConfigIterator(forgeConfigPointers)
+ iterator := newForgeConfigIterator(forgeConfigPointers)
return iterator
}
@@ -66,7 +66,7 @@ func (r *ForgeConfigs) SortByPath() *ForgeConfigIterator {
sort.Sort(ByForgeConfigPath(packs))
- iterator := NewForgeConfigIterator(packs)
+ iterator := newForgeConfigIterator(packs)
return iterator
}
diff --git a/helpers.go b/helpers.go
deleted file mode 100644
index 8dc71e9..0000000
--- a/helpers.go
+++ /dev/null
@@ -1,60 +0,0 @@
-package forgepb
-
-// TODO: autogen this
-// functions to import and export the protobuf
-// data to and from config files
-
-import (
- "google.golang.org/protobuf/encoding/protojson"
- "google.golang.org/protobuf/encoding/prototext"
- "google.golang.org/protobuf/proto"
- // "google.golang.org/protobuf/proto"
-)
-
-// human readable JSON
-func (p *Repos) FormatJSON() string {
- return protojson.Format(p)
-}
-
-// apparently this isn't supposed to be used?
-// https://protobuf.dev/reference/go/faq/#unstable-text
-// this is a shame because this is much nicer output than JSON Format()
-// TODO: fix things so this is the default
-func (p *Repos) FormatTEXT() string {
- return prototext.Format(p)
-}
-
-// unmarshalTEXT
-func (p *Repos) UnmarshalTEXT(data []byte) error {
- return prototext.Unmarshal(data, p)
-}
-
-// marshal json
-func (p *Repos) MarshalJSON() ([]byte, error) {
- return protojson.Marshal(p)
-}
-
-// unmarshal
-func (p *Repos) UnmarshalJSON(data []byte) error {
- return protojson.Unmarshal(data, p)
-}
-
-// marshal to wire
-func (m *Repo) Marshal() ([]byte, error) {
- return proto.Marshal(m)
-}
-
-// unmarshal from wire
-func (m *Repo) Unmarshal(data []byte) error {
- return proto.Unmarshal(data, m)
-}
-
-// marshal to wire
-func (m *Repos) Marshal() ([]byte, error) {
- return proto.Marshal(m)
-}
-
-// unmarshal from wire
-func (m *Repos) Unmarshal(data []byte) error {
- return proto.Unmarshal(data, m)
-}
diff --git a/repo.proto b/repo.proto
deleted file mode 100644
index 9a966e4..0000000
--- a/repo.proto
+++ /dev/null
@@ -1,39 +0,0 @@
-syntax = "proto3";
-
-package forgepb;
-
-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 Repo {
- 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 masterBranch = 8; // git 'main' or 'master' branch name
- string develBranch = 9; // whatever the git 'devel' branch name is
- string userBranch = 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 'Repos'
-message Repos {
- string uuid = 1; // could be useful for /usr/share/file/magic someday?
- string version = 2; // could be used for protobuf schema change violations?
- repeated Repo repos = 3;
-}
diff --git a/repos.go b/repos.go
deleted file mode 100644
index 5340e62..0000000
--- a/repos.go
+++ /dev/null
@@ -1,151 +0,0 @@
-package forgepb
-
-// TODO: autogen this? (probably not feasible. need go-arglike tricks in proto)
-
-import (
- "fmt"
- "os"
- "sort"
- sync "sync"
- "time"
-)
-
-// bad global lock until I figure out some other plan
-var reposLock sync.RWMutex
-
-type RepoIterator struct {
- sync.RWMutex
-
- packs []*Repo
- index int
-}
-
-// NewRepoIterator initializes a new iterator.
-func NewRepoIterator(packs []*Repo) *RepoIterator {
- return &RepoIterator{packs: packs}
-}
-
-// Scan moves to the next element and returns false if there are no more packs.
-func (it *RepoIterator) Scan() bool {
- if it.index >= len(it.packs) {
- return false
- }
- it.index++
- return true
-}
-
-// Repo returns the current repo.
-func (it *RepoIterator) Repo() *Repo {
- if it.packs[it.index-1] == nil {
- for i, d := range it.packs {
- fmt.Println("i =", i, d)
- }
- fmt.Println("len =", len(it.packs))
- fmt.Println("repo == nil", it.index, it.index-1)
- os.Exit(-1)
- }
- return it.packs[it.index-1]
-}
-
-// Use Scan() in a loop, similar to a while loop
-//
-// for iterator.Scan() {
-// d := iterator.Repo()
-// fmt.Println("Repo UUID:", d.Uuid)
-// }
-
-func (r *Repos) All() *RepoIterator {
- repoPointers := r.selectAllRepos()
-
- iterator := NewRepoIterator(repoPointers)
- return iterator
-}
-
-func (r *Repos) SortByPath() *RepoIterator {
- packs := r.selectAllRepos()
-
- sort.Sort(ByRepoPath(packs))
-
- iterator := NewRepoIterator(packs)
- return iterator
-}
-
-// enforces no duplicate repo paths
-func (r *Repos) Append(newP *Repo) bool {
- reposLock.Lock()
- defer reposLock.Unlock()
-
- for _, p := range r.Repos {
- if p.GoPath == newP.GoPath {
- return false
- }
- }
-
- r.Repos = append(r.Repos, newP)
- return true
-}
-
-// returns time.Duration since last Update()
-func (r *Repo) Age(newP *Repo) time.Duration {
- t := time.Since(r.Verstamp.AsTime())
- return t
-}
-
-// find a repo by path
-func (r *Repos) FindByPath(gopath string) *Repo {
- reposLock.RLock()
- defer reposLock.RUnlock()
-
- for _, p := range r.Repos {
- if p.GoPath == gopath {
- return p
- }
- }
-
- return nil
-}
-
-func (r *Repos) Len() int {
- reposLock.RLock()
- defer reposLock.RUnlock()
-
- return len(r.Repos)
-}
-
-type ByRepoPath []*Repo
-
-func (a ByRepoPath) Len() int { return len(a) }
-func (a ByRepoPath) Less(i, j int) bool { return a[i].GoPath < a[j].GoPath }
-func (a ByRepoPath) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
-
-func (all *Repos) DeleteByPath(gopath string) *Repo {
- reposLock.Lock()
- defer reposLock.Unlock()
-
- var newr Repo
-
- for i, _ := range all.Repos {
- if all.Repos[i].GoPath == gopath {
- newr = *all.Repos[i]
- all.Repos[i] = all.Repos[len(all.Repos)-1]
- all.Repos = all.Repos[:len(all.Repos)-1]
- return &newr
- }
- }
- return nil
-}
-
-// safely returns a slice of pointers to the Repo protobufs
-func (r *Repos) selectAllRepos() []*Repo {
- reposLock.RLock()
- defer reposLock.RUnlock()
-
- // Create a new slice to hold pointers to each Repo
- var allPacks []*Repo
- allPacks = make([]*Repo, len(r.Repos))
- for i, p := range r.Repos {
- allPacks[i] = p // Copy pointers for safe iteration
- }
-
- return allPacks
-}