102 lines
2.0 KiB
Go
102 lines
2.0 KiB
Go
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
|
|
}
|
|
}
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
// is this a non-publishable repo?
|
|
func (all *Repos) IsPrivate(gopath string) bool {
|
|
var match *Repo
|
|
|
|
// sort by path means the simple 'match' logic
|
|
// here works in the sense the last directory match
|
|
// is the one that is used
|
|
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 == nil {
|
|
// log.Info("did not match in IsPrivate()", gopath)
|
|
return false
|
|
}
|
|
|
|
// otherwise, assume not private
|
|
return match.Private
|
|
}
|