summaryrefslogtreecommitdiff
path: root/configLookup.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2025-09-11 01:53:53 -0500
committerJeff Carr <[email protected]>2025-09-11 01:53:53 -0500
commitdbde2f51b8acb4043203b5592531c6715896c800 (patch)
treebb892866022b2f8045784091b181592dc480b3c8 /configLookup.go
parentac107331fc376edc5343732f7ebcd0d8e3177282 (diff)
cleanup config file handling
Diffstat (limited to 'configLookup.go')
-rw-r--r--configLookup.go337
1 files changed, 0 insertions, 337 deletions
diff --git a/configLookup.go b/configLookup.go
deleted file mode 100644
index 5a230a8..0000000
--- a/configLookup.go
+++ /dev/null
@@ -1,337 +0,0 @@
-package forgepb
-
-/*
- lookup settings for a particular *gitpb.Repo or gopath string
-
- user settings are configured in ~/.config/forge/forge.text
-
- // searchs by string
- Configs.IsReadOnly(path) // user can't push commits
- Configs.IsWritable(path) // the opposite, but maybe different so I put both here
-
- IsPrivate(repo) // repo can't be published to the pkg.go.dev system
- DebName() // for 'zookeeper' returns 'zookeeper-go'
-
- This code is practical, not perfect
-*/
-
-import (
- "path/filepath"
- "strings"
-
- "go.wit.com/lib/protobuf/gitpb"
-)
-
-/*
-func (all *ForgeConfigs) UpdateGoPath(name string, gopath string) bool {
- oldr := all.DeleteByGoPath(name)
- if oldr == nil {
- // nothing to update
- return false
- }
-
- // update gopath and append it back to the list
- oldr.GoPath = gopath
- return all.Append(oldr)
-}
-*/
-
-// returns true if gopath is readonly()
-// will attempt to match IsWritable("foo") against anything ending in "foo"
-func (fc *ForgeConfigs) IsReadOnly(gopath string) bool {
- var match *ForgeConfig
-
- all := fc.SortByGoPath() // get the list of repos
- for all.Scan() {
- r := all.Next()
- if r.GoPath == gopath {
- // exact gopath match
- if r.Writable {
- return false
- }
- if r.ReadOnly {
- return true
- }
- // private is assumed to be r/w unless above is specifically set
- if r.Private {
- return false
- }
- }
- // if gopath == "foo" will return false if "go.wit.com/apps/foo" is Writable
- base := filepath.Base(r.GoPath)
- if base == gopath {
- if r.Writable {
- return false
- }
- }
- // search for potential dir matches
- if r.Directory {
- // test the dir
- if strings.HasPrefix(gopath, r.GoPath) {
- match = r
- }
- }
- }
-
- if match == nil {
- // log.Info("did not match in IsReadOnly()", gopath)
- return true
- }
-
- // take the settings from the directory match
- if match.Writable {
- return false
- }
- if match.ReadOnly {
- return true
- }
- // private is assumed to be r/w unless above is specifically set
- if match.Private {
- return false
- }
-
- // always assume readonly
- return true
-}
-
-// returns the deb package name
-// this let's you check a git tag version against a package .deb version
-// allows gopath's to not need to match the .deb name
-// this is important in lots of cases! It is normal and happens often enough.
-func (fc *ForgeConfigs) DebName(gopath string) string {
- // get "zookeeper" from "go.wit.com/apps/zookeeper"
- normalBase := filepath.Base(gopath)
-
- all := fc.SortByGoPath()
- for all.Scan() {
- r := all.Next()
- if r.GoPath == gopath {
- // returns "zookeeper-go" for "go.wit.com/apps/zookeeper"
- if r.DebName != "" {
- // log.Info("FOUND DebName", r.DebName)
- return r.DebName
- } else {
- return normalBase
- }
- }
- }
- return normalBase
-}
-
-// a work in progress
-func (f *Forge) IsPrivate(repo *gitpb.Repo) bool {
- namespace := repo.GetNamespace()
- if namespace == "" {
- // assume true
- return true
- }
-
- return f.Config.IsPrivate(namespace)
-}
-
-// is this a non-publishable repo?
-// matches package names from apt
-//
-// IsPrivate("foo") will match anything in the config file ending in "foo"
-//
-// IsPrivate("go.foo.com/jcarr/foo") returns true if private
-// IsPrivate("foo") also returns true if "go.bar.com/jcarr/foo" is private
-func (fc *ForgeConfigs) IsPrivate(thing string) bool {
- var match *ForgeConfig
-
- // sort by path means the simple 'match' logic
- // here works in the sense the last directory match
- // is the one that is used
- all := fc.SortByGoPath() // get the list of repos
- for all.Scan() {
- r := all.Next()
- if r.GoPath == thing {
- // if private is set here, then ok, otherwise
- // still check if a Directory match exists
- if r.Private {
- return true
- }
- }
- base := filepath.Base(r.GoPath)
- if base == thing {
- if r.Private {
- return true
- }
- }
- // check to see if IsPrivate("foo")
- // search for potential dir matches
- if r.Directory {
- // test the dir
- if strings.HasPrefix(thing, r.GoPath) {
- match = r
- }
- }
- }
- if match == nil {
- // log.Info("did not match in IsPrivate()", thing)
- return false
- }
-
- // otherwise, assume not private
- return match.Private
-}
-
-// IsFavorite() -- fun option for the config
-// file that lets you set things as favorites
-// so you can just go-clone a bunch of common things
-// on a new box or after you reset/delete your ~/go/src dir
-func (fc *ForgeConfigs) IsFavorite(thing string) bool {
- var match *ForgeConfig
-
- all := fc.SortByGoPath() // get the list of repos
- for all.Scan() {
- r := all.Next()
- if r.GoPath == thing {
- if r.Favorite {
- return true
- }
- }
- base := filepath.Base(r.GoPath)
- if base == thing {
- if r.Favorite {
- return true
- }
- }
- if r.Directory {
- if strings.HasPrefix(thing, r.GoPath) {
- match = r
- }
- }
- }
- if match == nil {
- return false
- }
-
- return match.Favorite
-}
-
-// IsWritable() checks your .config/forge/ settings
-// looks for an exact match, then
-// looks for a directory match
-func (fc *ForgeConfigs) IsWritable(thing string) bool {
- var match *ForgeConfig
-
- all := fc.SortByGoPath() // get the list of repos
- for all.Scan() {
- r := all.Next()
- if r.GoPath == thing {
- if r.Writable {
- return true
- }
- }
- base := filepath.Base(r.GoPath)
- if base == thing {
- if r.Writable {
- return true
- }
- }
- if r.Directory {
- if strings.HasPrefix(thing, r.GoPath) {
- match = r
- }
- }
- }
- if match == nil {
- return false
- }
-
- return match.Writable
-}
-
-// allows custom user branch names in the forge config
-func (fc *ForgeConfigs) FindUserBranch(thing string) string {
- var match *ForgeConfig
-
- all := fc.SortByGoPath() // get the list of repos
- for all.Scan() {
- r := all.Next()
- if r.GoPath == thing {
- if r.UserBranchName != "" {
- return r.UserBranchName
- }
- }
- base := filepath.Base(r.GoPath)
- if base == thing {
- if r.UserBranchName != "" {
- return r.UserBranchName
- }
- }
- if r.Directory {
- if strings.HasPrefix(thing, r.GoPath) {
- match = r
- }
- }
- }
- if match == nil {
- return ""
- }
-
- return match.UserBranchName
-}
-
-// allows custom devel branch names in the forge config
-func (fc *ForgeConfigs) FindDevelBranch(thing string) string {
- var match *ForgeConfig
-
- all := fc.SortByGoPath() // get the list of repos
- for all.Scan() {
- r := all.Next()
- if r.GoPath == thing {
- if r.DevelBranchName != "" {
- return r.DevelBranchName
- }
- }
- base := filepath.Base(r.GoPath)
- if base == thing {
- if r.DevelBranchName != "" {
- return r.DevelBranchName
- }
- }
- if r.Directory {
- if strings.HasPrefix(thing, r.GoPath) {
- match = r
- }
- }
- }
- if match == nil {
- return ""
- }
-
- return match.DevelBranchName
-}
-
-// allows custom devel branch names in the forge config
-func (fc *ForgeConfigs) FindMasterBranch(thing string) string {
- var match *ForgeConfig
-
- all := fc.SortByGoPath() // get the list of repos
- for all.Scan() {
- r := all.Next()
- if r.GoPath == thing {
- if r.MasterBranchName != "" {
- return r.MasterBranchName
- }
- }
- base := filepath.Base(r.GoPath)
- if base == thing {
- if r.MasterBranchName != "" {
- return r.MasterBranchName
- }
- }
- if r.Directory {
- if strings.HasPrefix(thing, r.GoPath) {
- match = r
- }
- }
- }
- if match == nil {
- return ""
- }
-
- return match.MasterBranchName
-}