mirror of
https://github.com/mudler/luet.git
synced 2025-09-01 23:37:07 +00:00
Use fingerprint as ids in inmemorydb
This commit is contained in:
@@ -23,7 +23,7 @@ type PackageDatabase interface {
|
|||||||
Get(s string) (string, error)
|
Get(s string) (string, error)
|
||||||
Set(k, v string) error
|
Set(k, v string) error
|
||||||
|
|
||||||
Create([]byte) (string, error)
|
Create(string, []byte) (string, error)
|
||||||
Retrieve(ID string) ([]byte, error)
|
Retrieve(ID string) ([]byte, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -17,8 +17,6 @@ package pkg
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"fmt"
|
|
||||||
"hash/crc32"
|
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"sync"
|
"sync"
|
||||||
@@ -66,13 +64,10 @@ func (db *BoltDatabase) Set(k, v string) error {
|
|||||||
defer bolt.Close()
|
defer bolt.Close()
|
||||||
return bolt.Set("solver", k, v)
|
return bolt.Set("solver", k, v)
|
||||||
}
|
}
|
||||||
|
func (db *BoltDatabase) Create(id string, v []byte) (string, error) {
|
||||||
func (db *BoltDatabase) Create(v []byte) (string, error) {
|
|
||||||
enc := base64.StdEncoding.EncodeToString(v)
|
enc := base64.StdEncoding.EncodeToString(v)
|
||||||
crc32q := crc32.MakeTable(0xD5828281)
|
|
||||||
ID := fmt.Sprintf("%08x", crc32.Checksum([]byte(enc), crc32q)) // TODO: Replace with package fingerprint?
|
|
||||||
|
|
||||||
return ID, db.Set(ID, enc)
|
return id, db.Set(id, enc)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *BoltDatabase) Retrieve(ID string) ([]byte, error) {
|
func (db *BoltDatabase) Retrieve(ID string) ([]byte, error) {
|
||||||
|
@@ -19,8 +19,6 @@ import (
|
|||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
|
||||||
"hash/crc32"
|
|
||||||
"sync"
|
"sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -64,12 +62,10 @@ func (db *InMemoryDatabase) Set(k, v string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *InMemoryDatabase) Create(v []byte) (string, error) {
|
func (db *InMemoryDatabase) Create(id string, v []byte) (string, error) {
|
||||||
enc := base64.StdEncoding.EncodeToString(v)
|
enc := base64.StdEncoding.EncodeToString(v)
|
||||||
crc32q := crc32.MakeTable(0xD5828281)
|
|
||||||
ID := fmt.Sprintf("%08x", crc32.Checksum([]byte(enc), crc32q)) // TODO: Replace with package fingerprint?
|
|
||||||
|
|
||||||
return ID, db.Set(ID, enc)
|
return id, db.Set(id, enc)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *InMemoryDatabase) Retrieve(ID string) ([]byte, error) {
|
func (db *InMemoryDatabase) Retrieve(ID string) ([]byte, error) {
|
||||||
@@ -131,7 +127,7 @@ func (db *InMemoryDatabase) CreatePackage(p Package) (string, error) {
|
|||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
ID, err := db.Create(res)
|
ID, err := db.Create(pd.GetFingerPrint(), res)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
@@ -149,51 +145,23 @@ func (db *InMemoryDatabase) encodePackage(p Package) (string, string, error) {
|
|||||||
return "", "", err
|
return "", "", err
|
||||||
}
|
}
|
||||||
enc := base64.StdEncoding.EncodeToString(res)
|
enc := base64.StdEncoding.EncodeToString(res)
|
||||||
crc32q := crc32.MakeTable(0xD5828281)
|
|
||||||
ID := fmt.Sprintf("%08x", crc32.Checksum([]byte(enc), crc32q)) // TODO: Replace with package fingerprint?
|
|
||||||
|
|
||||||
return ID, enc, nil
|
return p.GetFingerPrint(), enc, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *InMemoryDatabase) FindPackage(p Package) (Package, error) {
|
func (db *InMemoryDatabase) FindPackage(p Package) (Package, error) {
|
||||||
|
return db.GetPackage(p.GetFingerPrint())
|
||||||
// TODO: Replace this piece, when IDs are fingerprint, findpackage becames O(1)
|
|
||||||
|
|
||||||
for _, k := range db.GetPackages() {
|
|
||||||
pack, err := db.GetPackage(k)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if pack.Matches(p) {
|
|
||||||
return pack, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil, errors.New("Package not found")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *InMemoryDatabase) UpdatePackage(p Package) error {
|
func (db *InMemoryDatabase) UpdatePackage(p Package) error {
|
||||||
var id string
|
|
||||||
found := false
|
|
||||||
for _, k := range db.GetPackages() {
|
|
||||||
pack, err := db.GetPackage(k)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if pack.Matches(p) {
|
|
||||||
id = k
|
|
||||||
found = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if found {
|
|
||||||
|
|
||||||
_, enc, err := db.encodePackage(p)
|
_, enc, err := db.encodePackage(p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
|
||||||
|
|
||||||
return db.Set(id, enc)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return db.Set(p.GetFingerPrint(), enc)
|
||||||
|
|
||||||
return errors.New("Package not found")
|
return errors.New("Package not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -238,19 +206,11 @@ func (db *InMemoryDatabase) RemovePackageFiles(p Package) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (db *InMemoryDatabase) RemovePackage(p Package) error {
|
func (db *InMemoryDatabase) RemovePackage(p Package) error {
|
||||||
for _, k := range db.GetPackages() {
|
db.Lock()
|
||||||
pack, err := db.GetPackage(k)
|
defer db.Unlock()
|
||||||
if err != nil {
|
|
||||||
return err
|
delete(db.Database, p.GetFingerPrint())
|
||||||
}
|
return nil
|
||||||
if pack.Matches(p) {
|
|
||||||
db.Lock()
|
|
||||||
delete(db.Database, k)
|
|
||||||
db.Unlock()
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return errors.New("Package not found")
|
|
||||||
}
|
}
|
||||||
func (db *InMemoryDatabase) World() []Package {
|
func (db *InMemoryDatabase) World() []Package {
|
||||||
var all []Package
|
var all []Package
|
||||||
|
Reference in New Issue
Block a user