Introduce noms-ds command

This commit is contained in:
Marina Moore
2016-05-09 15:01:15 -07:00
parent 14c377fc7b
commit b6cfca2403
2 changed files with 147 additions and 0 deletions
+61
View File
@@ -0,0 +1,61 @@
package main
import (
"flag"
"fmt"
"os"
"github.com/attic-labs/noms/clients/go/flags"
"github.com/attic-labs/noms/clients/go/util"
"github.com/attic-labs/noms/types"
)
var (
toDelete = flag.String("d", "", "dataset to delete")
)
func main() {
flag.Usage = func() {
fmt.Fprintf(os.Stderr, "Usage: %s [<Datastore> | -d <dataset>]\n", os.Args[0])
flag.PrintDefaults()
fmt.Fprintf(os.Stderr, "\nFor detailed information on spelling datastores and datasets, see: at https://github.com/attic-labs/noms/blob/master/doc/spelling.md.\n\n")
}
flag.Parse()
if *toDelete != "" {
setSpec, err := flags.ParseDatasetSpec(*toDelete)
util.CheckError(err)
set, err := setSpec.Dataset()
util.CheckError(err)
oldCommitRef, errBool := set.MaybeHeadRef()
if !errBool {
util.CheckError(fmt.Errorf("Dataset %v not found", set.ID()))
}
store, err := set.Store().Delete(set.ID())
util.CheckError(err)
defer store.Close()
fmt.Printf("Deleted dataset %v (was %v)\n\n", set.ID(), oldCommitRef.TargetRef().String())
} else {
if flag.NArg() != 1 {
flag.Usage()
return
}
storeSpec, err := flags.ParseDatabaseSpec(flag.Arg(0))
util.CheckError(err)
store, err := storeSpec.Database()
util.CheckError(err)
defer store.Close()
store.Datasets().IterAll(func(k, v types.Value) {
fmt.Println(k)
})
}
}
+86
View File
@@ -0,0 +1,86 @@
package main
import (
"testing"
"github.com/attic-labs/noms/chunks"
"github.com/attic-labs/noms/clients/go/test_util"
"github.com/attic-labs/noms/datas"
"github.com/attic-labs/noms/dataset"
"github.com/attic-labs/noms/types"
"github.com/stretchr/testify/suite"
)
func TestDs(t *testing.T) {
suite.Run(t, &testSuite{})
}
type testSuite struct {
test_util.ClientTestSuite
}
func (s *testSuite) TestEmptyNomsDs() {
dir := s.LdbDir
cs := chunks.NewLevelDBStore(dir+"/name", "", 24, false)
ds := datas.NewDatabase(cs)
ds.Close()
dataStoreName := "ldb:" + dir + "/name"
rtnVal := s.Run(main, []string{dataStoreName})
s.Equal("", rtnVal)
}
func (s *testSuite) TestNomsDs() {
dir := s.LdbDir
cs := chunks.NewLevelDBStore(dir+"/name", "", 24, false)
ds := datas.NewDatabase(cs)
id := "testdataset"
set := dataset.NewDataset(ds, id)
set, err := set.Commit(types.NewString("Commit Value"))
s.NoError(err)
id2 := "testdataset2"
set2 := dataset.NewDataset(ds, id2)
set2, err = set2.Commit(types.NewString("Commit Value2"))
s.NoError(err)
err = ds.Close()
s.NoError(err)
dataStoreName := "ldb:" + dir + "/name"
datasetName := dataStoreName + ":" + id
dataset2Name := dataStoreName + ":" + id2
// both datasets show up
rtnVal := s.Run(main, []string{dataStoreName})
s.Equal(id+"\n"+id2+"\n", rtnVal)
// both datasets again, to make sure printing doesn't change them
rtnVal = s.Run(main, []string{dataStoreName})
s.Equal(id+"\n"+id2+"\n", rtnVal)
// delete one dataset, print message at delete
rtnVal = s.Run(main, []string{"-d", datasetName})
s.Equal("Deleted dataset "+id+" (was sha1-923a61316a5bf5e9a3ef4fe860b1eeb762eb69c0)\n\n", rtnVal)
// resetting flag because main is called multiple times
*toDelete = ""
// print datasets, just one left
rtnVal = s.Run(main, []string{dataStoreName})
s.Equal(id2+"\n", rtnVal)
// delete the second dataset
rtnVal = s.Run(main, []string{"-d", dataset2Name})
s.Equal("Deleted dataset "+id2+" (was sha1-40ddfc9469a16653e4199e942d22c8ed81252fa3)\n\n", rtnVal)
//resetting flag because main is called multiple times
*toDelete = ""
// print datasets, none left
rtnVal = s.Run(main, []string{dataStoreName})
s.Equal("", rtnVal)
}