diff options
author | Ben Johnson <benbjohnson@yahoo.com> | 2014-04-11 14:59:46 -0600 |
---|---|---|
committer | Ben Johnson <benbjohnson@yahoo.com> | 2014-04-11 14:59:46 -0600 |
commit | 10fed5f74d44caad8f777a38db735ebb7fb3e65b (patch) | |
tree | 125c24e03c653417ce8bf5965b7fbcbeb2dedb04 /cmd/bolt/export.go | |
parent | Merge branch 'master' into nested-keys (diff) | |
download | dedo-10fed5f74d44caad8f777a38db735ebb7fb3e65b.tar.gz dedo-10fed5f74d44caad8f777a38db735ebb7fb3e65b.tar.xz |
Upgrade import/export to use nested buckets.
Diffstat (limited to 'cmd/bolt/export.go')
-rw-r--r-- | cmd/bolt/export.go | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/cmd/bolt/export.go b/cmd/bolt/export.go index f3cafc1..2dcbc1f 100644 --- a/cmd/bolt/export.go +++ b/cmd/bolt/export.go @@ -23,25 +23,33 @@ func Export(path string) { } defer db.Close() - db.View(func(tx *bolt.Tx) error { + err = db.View(func(tx *bolt.Tx) error { // Loop over every bucket and export it as a raw message. var root []*rawMessage - for _, b := range tx.Buckets() { + err := tx.ForEach(func(name []byte, b *bolt.Bucket) error { message, err := exportBucket(b) if err != nil { fatal(err) } + message.Key = name root = append(root, message) + return nil + }) + if err != nil { + return err } // Encode all buckets into JSON. output, err := json.Marshal(root) if err != nil { - fatal("encode: ", err) + return fmt.Errorf("encode: ", err) } print(string(output)) return nil }) + if err != nil { + fatal(err) + } } func exportBucket(b *bolt.Bucket) (*rawMessage, error) { @@ -50,11 +58,22 @@ func exportBucket(b *bolt.Bucket) (*rawMessage, error) { err := b.ForEach(func(k, v []byte) error { var err error + // If there is no value then it is a bucket. + if v == nil { + child, err := exportBucket(b.Bucket(k)) + if err != nil { + return fmt.Errorf("bucket: %s", err) + } + child.Key = k + children = append(children, child) + return nil + } + + // Otherwise it's a regular key. var child = &rawMessage{Key: k} if child.Value, err = json.Marshal(v); err != nil { return fmt.Errorf("value: %s", err) } - children = append(children, child) return nil }) @@ -64,7 +83,6 @@ func exportBucket(b *bolt.Bucket) (*rawMessage, error) { // Encode bucket into a raw message. var root = rawMessage{Type: "bucket"} - root.Key = []byte(b.Name()) if root.Value, err = json.Marshal(children); err != nil { return nil, fmt.Errorf("children: %s", err) } |