summaryrefslogtreecommitdiff
path: root/readonly.go
diff options
context:
space:
mode:
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
+}