enforce unique names

Signed-off-by: Jeff Carr <jcarr@wit.com>
This commit is contained in:
Jeff Carr 2024-11-15 17:38:24 -06:00
parent 5ef3669e7d
commit d6e0482465
2 changed files with 47 additions and 6 deletions

View File

@ -4,6 +4,7 @@ import (
"fmt" "fmt"
"go.wit.com/lib/protobuf/zoopb" "go.wit.com/lib/protobuf/zoopb"
"go.wit.com/log"
) )
func main() { func main() {
@ -11,10 +12,29 @@ func main() {
all = new(zoopb.Packages) all = new(zoopb.Packages)
// r = zoopb.LoadJSON("go.wit.com/lib/protobuf/zoopb") // r = zoopb.LoadJSON("go.wit.com/lib/protobuf/zoopb")
newP := new(zoopb.Package) new1 := new(zoopb.Package)
newP.Name = "bash" new1.Name = "bash"
newP.Version = "5.2.21" new1.Version = "5.2.21"
all.Append(newP) if all.Append(new1) {
log.Info("added", new1.Name, "ok")
} else {
log.Info("added", new1.Name, "failed")
}
new2 := new(zoopb.Package)
new2.Name = "go-clone"
new2.Version = "0.6.8" // good version of the macos
if all.Append(new2) {
log.Info("added", new2.Name, "ok")
} else {
log.Info("added", new2.Name, "failed")
}
if all.Append(new2) {
log.Info("added", new2.Name, "ok (this is bad)")
} else {
log.Info("added", new2.Name, "failed (but ok)")
}
fmt.Println("packages are:", len(all.Packages)) fmt.Println("packages are:", len(all.Packages))
} }

View File

@ -70,12 +70,33 @@ func (r *Packages) SortByName() *PackageIterator {
return iterator return iterator
} }
// should this be a pointer? what really happens here? // enforces no duplicate package names
func (r *Packages) Append(newP *Package) { func (r *Packages) Append(newP *Package) bool {
lock.Lock() lock.Lock()
defer lock.Unlock() defer lock.Unlock()
for _, p := range r.Packages {
if p.Name == newP.Name {
return false
}
}
r.Packages = append(r.Packages, newP) r.Packages = append(r.Packages, newP)
return true
}
// find a package by name
func (r *Packages) FindByName(name string) *Package {
lock.Lock()
defer lock.Unlock()
for _, p := range r.Packages {
if p.Name == name {
return p
}
}
return nil
} }
type ByName []*Package type ByName []*Package