summaryrefslogtreecommitdiff
path: root/readonly.go
diff options
context:
space:
mode:
authorJeff Carr <[email protected]>2024-11-21 10:37:01 -0600
committerJeff Carr <[email protected]>2024-11-21 10:37:01 -0600
commit3adf07b442c62bd70e7bf37d4c07e51464b25e09 (patch)
tree3c8de211fa0f245e8013d7997d3d782d11f97c3b /readonly.go
parent5633f4204d6bfbce643f1fc6f74f988446c2b8c0 (diff)
hmmm
Signed-off-by: Jeff Carr <[email protected]>
Diffstat (limited to 'readonly.go')
-rw-r--r--readonly.go91
1 files changed, 91 insertions, 0 deletions
diff --git a/readonly.go b/readonly.go
new file mode 100644
index 0000000..27e23ee
--- /dev/null
+++ b/readonly.go
@@ -0,0 +1,91 @@
+package forgepb
+
+import "strings"
+
+func (all *Repos) UpdateGoPath(name string, gopath string) bool {
+ oldr := all.DeleteByPath(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()
+func (all *Repos) IsReadOnly(gopath string) bool {
+ var match *Repo
+
+ loop := all.SortByPath() // get the list of repos
+ for loop.Scan() {
+ r := loop.Repo()
+ 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
+ }
+ }
+ // search for potential dir matches
+ if r.Directory {
+ // test the dir
+ if strings.HasPrefix(gopath, r.GoPath) {
+ match = r
+ }
+ }
+ }
+
+ // 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
+}
+
+// is this a non-publishable repo?
+func (all *Repos) IsPrivate(gopath string) bool {
+ var match *Repo
+
+ loop := all.SortByPath() // get the list of repos
+ for loop.Scan() {
+ r := loop.Repo()
+ if r.GoPath == gopath {
+ // if private is set here, then ok, otherwise
+ // still check if a Directory match exists
+ if r.Private {
+ return true
+ }
+ }
+ // search for potential dir matches
+ if r.Directory {
+ // test the dir
+ if strings.HasPrefix(gopath, r.GoPath) {
+ match = r
+ }
+ }
+ }
+
+ if match.Private {
+ return true
+ }
+
+ // otherwise, assume not private
+ return true
+}