diff --git a/Makefile b/Makefile index ed7dce7dc..5a7fa2ccf 100644 --- a/Makefile +++ b/Makefile @@ -32,7 +32,7 @@ build-split: build-strbyteconv build-strbyteconv: @godep go test -race -coverprofile=cover.out github.com/minio-io/minio/pkgs/strbyteconv -cover: build-erasure build-signify build-split build-crc32c +cover: build-erasure build-signify build-split build-crc32c build-cpu build-sha1 @godep go test -race -coverprofile=cover.out github.com/minio-io/minio/pkgs/storage @godep go test -race -coverprofile=cover.out github.com/minio-io/minio/pkgs/gateway diff --git a/cmd/erasure-demo/fs.go b/cmd/erasure-demo/fs.go index 842c8fe5e..942449942 100644 --- a/cmd/erasure-demo/fs.go +++ b/cmd/erasure-demo/fs.go @@ -10,6 +10,18 @@ import ( "github.com/minio-io/minio/pkgs/storage/fsstorage" ) +func fsGetList(config inputConfig) (io.Reader, error) { + var objectStorage storage.ObjectStorage + rootDir := path.Join(config.rootDir, config.storageDriver) + objectStorage = fsstorage.FileSystemStorage{RootDir: rootDir} + objectlist, err := objectStorage.GetList() + if err != nil { + return nil, err + } + objectListBuffer := bytes.NewBuffer(objectlist) + return objectListBuffer, nil +} + func fsGet(config inputConfig, objectPath string) (io.Reader, error) { var objectStorage storage.ObjectStorage rootDir := path.Join(config.rootDir, config.storageDriver) diff --git a/cmd/erasure-demo/get.go b/cmd/erasure-demo/get.go index e989a06bd..017b99d77 100644 --- a/cmd/erasure-demo/get.go +++ b/cmd/erasure-demo/get.go @@ -14,11 +14,19 @@ func get(c *cli.Context) { log.Fatal(err) } var objectReader io.Reader + objectName := c.Args().Get(0) + switch config.storageDriver { case "fs": { - if objectReader, err = fsGet(config, c.Args().Get(0)); err != nil { - log.Fatal(err) + if len(objectName) == 0 { + if objectReader, err = fsGetList(config); err != nil { + log.Fatal(err) + } + } else { + if objectReader, err = fsGet(config, objectName); err != nil { + log.Fatal(err) + } } } default: @@ -28,25 +36,3 @@ func get(c *cli.Context) { } io.Copy(os.Stdout, objectReader) } - -func put(c *cli.Context) { - config, err := parseInput(c) - if err != nil { - log.Fatal(err) - } - filePath := c.Args().Get(1) - inputFile, err := os.Open(filePath) - if err != nil { - log.Fatal(err) - } - switch config.storageDriver { - case "fs": - { - fsPut(config, c.Args().Get(0), inputFile) - } - default: - { - log.Fatal("Unknown driver") - } - } -} diff --git a/cmd/erasure-demo/main.go b/cmd/erasure-demo/main.go index d9efc0ba9..905d02715 100644 --- a/cmd/erasure-demo/main.go +++ b/cmd/erasure-demo/main.go @@ -176,5 +176,23 @@ func getMinioDir() string { log.Fatal(err) } homePath := user.HomeDir - return path.Join(homePath, ".minio") + minioPath := path.Join(homePath, ".minio") + err = _initMinioDir(minioPath) + if err != nil { + log.Fatal(err) + } + return minioPath +} + +func _initMinioDir(dirPath string) error { + _, err := os.Lstat(dirPath) + if err != nil { + log.Printf("%s not found, creating a new-one for the first time", + dirPath) + err = os.Mkdir(dirPath, 0700) + if err != nil { + return err + } + } + return nil } diff --git a/cmd/erasure-demo/put.go b/cmd/erasure-demo/put.go index 06ab7d0f9..db41f71a9 100644 --- a/cmd/erasure-demo/put.go +++ b/cmd/erasure-demo/put.go @@ -1 +1,33 @@ package main + +import ( + "log" + "os" + + "github.com/codegangsta/cli" +) + +func put(c *cli.Context) { + config, err := parseInput(c) + if err != nil { + log.Fatal(err) + } + filePath := c.Args().Get(0) + if len(filePath) == 0 { + log.Fatal("Please specify a valid object name \n # erasure-demo put ") + } + inputFile, err := os.Open(filePath) + if err != nil { + log.Fatal(err) + } + switch config.storageDriver { + case "fs": + { + fsPut(config, c.Args().Get(0), inputFile) + } + default: + { + log.Fatal("Unknown driver") + } + } +} diff --git a/pkgs/storage/fsstorage/fs_storage.go b/pkgs/storage/fsstorage/fs_storage.go index 5d32260a6..9e8ee89f3 100644 --- a/pkgs/storage/fsstorage/fs_storage.go +++ b/pkgs/storage/fsstorage/fs_storage.go @@ -11,12 +11,27 @@ type FileSystemStorage struct { RootDir string } +func (storage FileSystemStorage) GetList() ([]byte, error) { + fileInfos, err := ioutil.ReadDir(storage.RootDir) + if err != nil { + return nil, err + } + + var list []byte + for _, fi := range fileInfos { + list = append(list, "{"+fi.Name()+"}\n"...) + } + return list, nil +} + func (storage FileSystemStorage) Get(objectPath string) ([]byte, error) { return ioutil.ReadFile(path.Join(storage.RootDir, objectPath)) - } func (storage FileSystemStorage) Put(objectPath string, object []byte) error { - os.MkdirAll(filepath.Dir(path.Join(storage.RootDir, objectPath)), 0700) + err := os.MkdirAll(filepath.Dir(path.Join(storage.RootDir, objectPath)), 0700) + if err != nil { + return err + } return ioutil.WriteFile(path.Join(storage.RootDir, objectPath), object, 0600) } diff --git a/pkgs/storage/storage.go b/pkgs/storage/storage.go index 03a99dcaf..6f86f968b 100644 --- a/pkgs/storage/storage.go +++ b/pkgs/storage/storage.go @@ -1,6 +1,7 @@ package storage type ObjectStorage interface { + GetList() ([]byte, error) Get(path string) ([]byte, error) Put(path string, object []byte) error }