mirror of
https://github.com/minio/mc.git
synced 2025-11-13 12:22:45 +03:00
Make some doc changes to cat cmd
This commit is contained in:
17
cmd-cat.go
17
cmd-cat.go
@@ -25,6 +25,7 @@ import (
|
||||
"sync"
|
||||
|
||||
"github.com/minio-io/cli"
|
||||
"github.com/minio-io/mc/pkg/client"
|
||||
"github.com/minio-io/mc/pkg/console"
|
||||
"github.com/minio-io/minio/pkg/iodine"
|
||||
"github.com/minio-io/minio/pkg/utils/crypto/md5"
|
||||
@@ -92,16 +93,18 @@ func doCatCmd(manager clientManager, writer io.Writer, sourceURLConfigMap map[st
|
||||
return "Unable to retrieve file: " + url, iodine.New(err, nil)
|
||||
}
|
||||
defer reader.Close()
|
||||
var teeReader io.Reader
|
||||
var actualMd5 []byte
|
||||
if client.GetType(url) != client.Filesystem {
|
||||
wg := &sync.WaitGroup{}
|
||||
md5Reader, md5Writer := io.Pipe()
|
||||
var actualMd5 []byte
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
actualMd5, _ = md5.Sum(md5Reader)
|
||||
// drop error, we'll catch later on if it fails
|
||||
wg.Done()
|
||||
}()
|
||||
teeReader := io.TeeReader(reader, md5Writer)
|
||||
teeReader = io.TeeReader(reader, md5Writer)
|
||||
_, err = io.CopyN(writer, teeReader, size)
|
||||
md5Writer.Close()
|
||||
wg.Wait()
|
||||
@@ -110,7 +113,15 @@ func doCatCmd(manager clientManager, writer io.Writer, sourceURLConfigMap map[st
|
||||
}
|
||||
actualMd5String := hex.EncodeToString(actualMd5)
|
||||
if expectedMd5 != actualMd5String {
|
||||
return "Copying data from source was corrupted in transit: " + url, iodine.New(errors.New("Data copied from source was corrupted in transit"), nil)
|
||||
return "Copying data from source was corrupted in transit: " + url,
|
||||
iodine.New(errors.New("Data copied from source was corrupted in transit"), nil)
|
||||
}
|
||||
return "", nil
|
||||
}
|
||||
teeReader = reader
|
||||
_, err = io.CopyN(writer, teeReader, size)
|
||||
if err != nil {
|
||||
return "Copying data from source failed: " + url, iodine.New(errors.New("Copy data from source failed"), nil)
|
||||
}
|
||||
}
|
||||
return "", nil
|
||||
|
||||
@@ -28,7 +28,7 @@ import (
|
||||
var (
|
||||
catCmd = cli.Command{
|
||||
Name: "cat",
|
||||
Usage: "Copy an object to standard out",
|
||||
Usage: "Concantenate an object to standard output",
|
||||
Action: runCatCmd,
|
||||
CustomHelpTemplate: `NAME:
|
||||
mc {{.Name}} - {{.Usage}}
|
||||
@@ -44,11 +44,11 @@ OPTIONS:
|
||||
{{end}}{{ end }}
|
||||
|
||||
EXAMPLES:
|
||||
1. Copy an object from Amazon S3 object storage to standard out.
|
||||
$ mc {{.Name}} https://s3.amazonaws.com/jukebox/klingon_opera_aktuh_maylotah.ogg
|
||||
1. Concantenate an object from Amazon S3 object storage to mplayer standard input
|
||||
$ mc {{.Name}} https://s3.amazonaws.com/jukebox/klingon_opera_aktuh_maylotah.ogg | mplayer -
|
||||
|
||||
2. Copy an object from the file system to standard out.
|
||||
$ mc {{.Name}} klingon_opera_aktuh_maylotah.ogg
|
||||
2. Concantenate a file from local filesystem to standard output.
|
||||
$ mc {{.Name}} khitomer-accords.txt
|
||||
|
||||
`,
|
||||
}
|
||||
|
||||
31
cmd_test.go
31
cmd_test.go
@@ -484,7 +484,7 @@ func (s *CmdTestSuite) TestMbCmdOnFile(c *C) {
|
||||
cl1.AssertExpectations(c)
|
||||
}
|
||||
|
||||
func (s *CmdTestSuite) TestCatCmd(c *C) {
|
||||
func (s *CmdTestSuite) TestCatCmdObject(c *C) {
|
||||
sourceURL, err := getURL("http://example.com/bucket1/object1", nil)
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
@@ -514,3 +514,32 @@ func (s *CmdTestSuite) TestCatCmd(c *C) {
|
||||
manager.AssertExpectations(c)
|
||||
cl1.AssertExpectations(c)
|
||||
}
|
||||
|
||||
func (s *CmdTestSuite) TestCatCmdFile(c *C) {
|
||||
sourceURL, err := getURL("object1", nil)
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
manager := &MockclientManager{}
|
||||
cl1 := &clientMocks.Client{}
|
||||
|
||||
data1 := "hello1"
|
||||
dataLen1 := int64(len(data1))
|
||||
|
||||
sourceURLConfigMap := make(map[string]*hostConfig)
|
||||
sourceConfig := new(hostConfig)
|
||||
sourceConfig.AccessKeyID = ""
|
||||
sourceConfig.SecretAccessKey = ""
|
||||
sourceURLConfigMap[sourceURL] = sourceConfig
|
||||
|
||||
var results bytes.Buffer
|
||||
manager.On("getNewClient", sourceURL, sourceConfig, false).Return(cl1, nil).Once()
|
||||
cl1.On("Get").Return(ioutil.NopCloser(bytes.NewBufferString(data1)), dataLen1, "", nil)
|
||||
msg, err := doCatCmd(manager, &results, sourceURLConfigMap, false)
|
||||
c.Assert(msg, Equals, "")
|
||||
c.Assert(err, IsNil)
|
||||
|
||||
c.Assert(data1, Equals, results.String())
|
||||
|
||||
manager.AssertExpectations(c)
|
||||
cl1.AssertExpectations(c)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user