aboutsummaryrefslogtreecommitdiff
path: root/cmd/bolt/export.go
diff options
context:
space:
mode:
authorBen Johnson <benbjohnson@yahoo.com>2014-04-11 15:11:55 -0600
committerBen Johnson <benbjohnson@yahoo.com>2014-04-11 15:11:55 -0600
commit2c8020ec8e98e7b6c6c0fd3bd6e91d41caf7f25a (patch)
tree125c24e03c653417ce8bf5965b7fbcbeb2dedb04 /cmd/bolt/export.go
parentMerge pull request #128 from benbjohnson/import-export (diff)
parentUpgrade import/export to use nested buckets. (diff)
downloaddedo-2c8020ec8e98e7b6c6c0fd3bd6e91d41caf7f25a.tar.gz
dedo-2c8020ec8e98e7b6c6c0fd3bd6e91d41caf7f25a.tar.xz
Merge pull request #127 from benbjohnson/nested-keys
Add nested buckets.
Diffstat (limited to 'cmd/bolt/export.go')
-rw-r--r--cmd/bolt/export.go28
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)
}