aboutsummaryrefslogtreecommitdiffstats
path: root/store.go
diff options
context:
space:
mode:
authorbnewbold <bnewbold@robocracy.org>2012-04-17 23:15:34 -0400
committerbnewbold <bnewbold@robocracy.org>2012-04-17 23:15:34 -0400
commitae5afea4be8ca56e3fb7963fea5e337332e50a1f (patch)
treeac00eb18990fcbf2e63d27601c344fac4a9c76c4 /store.go
parent031e81471a2ca0e03f415fba18a2ae2492514312 (diff)
downloadbommom-ae5afea4be8ca56e3fb7963fea5e337332e50a1f.tar.gz
bommom-ae5afea4be8ca56e3fb7963fea5e337332e50a1f.zip
basic dumping in several formats
Diffstat (limited to 'store.go')
-rw-r--r--store.go137
1 files changed, 69 insertions, 68 deletions
diff --git a/store.go b/store.go
index 105890c..182f97d 100644
--- a/store.go
+++ b/store.go
@@ -4,7 +4,7 @@ import (
"encoding/json"
"log"
"os"
- "path"
+ "path"
)
var bomstore BomStore
@@ -27,7 +27,7 @@ type JSONFileBomStore struct {
func NewJSONFileBomStore(fpath string) (*JSONFileBomStore, error) {
err := os.MkdirAll(fpath, os.ModePerm|os.ModeDir)
if err != nil && !os.IsExist(err) {
- return nil, err
+ return nil, err
}
return &JSONFileBomStore{Rootfpath: fpath}, nil
}
@@ -35,7 +35,7 @@ func NewJSONFileBomStore(fpath string) (*JSONFileBomStore, error) {
func OpenJSONFileBomStore(fpath string) (*JSONFileBomStore, error) {
_, err := os.Open(fpath)
if err != nil && !os.IsExist(err) {
- return nil, err
+ return nil, err
}
return &JSONFileBomStore{Rootfpath: fpath}, nil
}
@@ -49,16 +49,17 @@ func (jfbs *JSONFileBomStore) GetStub(user, name ShortName) (*BomStub, error) {
return &bs, nil
}
-func (jfbs *JSONFileBomStore) GetHead(user, name ShortName) (*Bom, error) {
+func (jfbs *JSONFileBomStore) GetHead(user, name ShortName) (*BomStub, *Bom, error) {
bs, err := jfbs.GetStub(user, name)
if err != nil {
- return nil, err
+ return nil, nil, err
}
version := bs.HeadVersion
if version == "" {
log.Fatal("Tried to read undefined HEAD for " + string(user) + "/" + string(name))
}
- return jfbs.GetBom(user, name, ShortName(version))
+ b, err := jfbs.GetBom(user, name, ShortName(version))
+ return bs, b, err
}
func (jfbs *JSONFileBomStore) GetBom(user, name, version ShortName) (*Bom, error) {
@@ -71,73 +72,73 @@ func (jfbs *JSONFileBomStore) GetBom(user, name, version ShortName) (*Bom, error
}
func (jfbs *JSONFileBomStore) ListBoms(user ShortName) ([]BomStub, error) {
- if user != "" {
- return jfbs.listBomsForUser(user)
- }
- // else iterator over all users...
- rootDir, err := os.Open(jfbs.Rootfpath)
- if err != nil {
- log.Fatal(err)
- }
- defer rootDir.Close()
- bsList := []BomStub{}
- dirInfo, err := rootDir.Readdir(0)
- for _, node := range dirInfo {
- if !node.IsDir() || !isShortName(node.Name()) {
- continue
- }
- uList, err := jfbs.listBomsForUser(ShortName(node.Name()))
- if err != nil {
- log.Fatal(err)
- }
- bsList = append(bsList, uList...)
- }
- return bsList, nil
+ if user != "" {
+ return jfbs.listBomsForUser(user)
+ }
+ // else iterator over all users...
+ rootDir, err := os.Open(jfbs.Rootfpath)
+ if err != nil {
+ log.Fatal(err)
+ }
+ defer rootDir.Close()
+ bsList := []BomStub{}
+ dirInfo, err := rootDir.Readdir(0)
+ for _, node := range dirInfo {
+ if !node.IsDir() || !isShortName(node.Name()) {
+ continue
+ }
+ uList, err := jfbs.listBomsForUser(ShortName(node.Name()))
+ if err != nil {
+ log.Fatal(err)
+ }
+ bsList = append(bsList, uList...)
+ }
+ return bsList, nil
}
func (jfbs *JSONFileBomStore) listBomsForUser(user ShortName) ([]BomStub, error) {
- bsList := []BomStub{}
- uDirPath:= jfbs.Rootfpath + "/" + string(user)
- uDir, err := os.Open(uDirPath)
- if err != nil {
- if e, ok := err.(*os.PathError); ok && e.Err.Error() == "no such file or directory" {
- // XXX: should probably check for a specific syscall error? same below
- return bsList, nil
- }
- return nil, err
- }
- defer uDir.Close()
- dirContents , err := uDir.Readdir(0)
- if err != nil {
- return nil, err
- }
- for _, node := range dirContents {
- if !node.IsDir() || !isShortName(node.Name()) {
- continue
- }
- fpath := jfbs.Rootfpath + "/" + string(user) + "/" + node.Name() + "/_meta.json"
- bs := BomStub{}
- if err := readJsonBomStub(fpath, &bs); err != nil {
- if e, ok := err.(*os.PathError); ok && e.Err.Error() == "no such file or directory" {
- // no _meta.json in there
- continue
- }
- return nil, err
- }
- bsList = append(bsList, bs)
- }
+ bsList := []BomStub{}
+ uDirPath := jfbs.Rootfpath + "/" + string(user)
+ uDir, err := os.Open(uDirPath)
+ if err != nil {
+ if e, ok := err.(*os.PathError); ok && e.Err.Error() == "no such file or directory" {
+ // XXX: should probably check for a specific syscall error? same below
+ return bsList, nil
+ }
+ return nil, err
+ }
+ defer uDir.Close()
+ dirContents, err := uDir.Readdir(0)
+ if err != nil {
+ return nil, err
+ }
+ for _, node := range dirContents {
+ if !node.IsDir() || !isShortName(node.Name()) {
+ continue
+ }
+ fpath := jfbs.Rootfpath + "/" + string(user) + "/" + node.Name() + "/_meta.json"
+ bs := BomStub{}
+ if err := readJsonBomStub(fpath, &bs); err != nil {
+ if e, ok := err.(*os.PathError); ok && e.Err.Error() == "no such file or directory" {
+ // no _meta.json in there
+ continue
+ }
+ return nil, err
+ }
+ bsList = append(bsList, bs)
+ }
return bsList, nil
}
func (jfbs *JSONFileBomStore) Persist(bs *BomStub, b *Bom, version ShortName) error {
b_fpath := jfbs.Rootfpath + "/" + string(bs.Owner) + "/" + string(bs.Name) + "/" + string(version) + ".json"
bs_fpath := jfbs.Rootfpath + "/" + string(bs.Owner) + "/" + string(bs.Name) + "/_meta.json"
- if err := writeJsonBomStub(bs_fpath, bs); err != nil {
- log.Fatal(err)
- }
- if err := writeJsonBom(b_fpath, b); err != nil {
- log.Fatal(err)
- }
+ if err := writeJsonBomStub(bs_fpath, bs); err != nil {
+ log.Fatal(err)
+ }
+ if err := writeJsonBom(b_fpath, b); err != nil {
+ log.Fatal(err)
+ }
return nil
}
@@ -155,10 +156,10 @@ func readJsonBomStub(fpath string, bs *BomStub) error {
}
func writeJsonBomStub(fpath string, bs *BomStub) error {
- err := os.MkdirAll(path.Dir(fpath), os.ModePerm|os.ModeDir)
- if err != nil && !os.IsExist(err) {
- return err
- }
+ err := os.MkdirAll(path.Dir(fpath), os.ModePerm|os.ModeDir)
+ if err != nil && !os.IsExist(err) {
+ return err
+ }
f, err := os.Create(fpath)
if err != nil {
return err