diff --git a/Godeps/_workspace/src/github.com/cheggaaa/pb/pb.go b/Godeps/_workspace/src/github.com/cheggaaa/pb/pb.go index 104bd4a60..d58fb8e94 100644 --- a/Godeps/_workspace/src/github.com/cheggaaa/pb/pb.go +++ b/Godeps/_workspace/src/github.com/cheggaaa/pb/pb.go @@ -100,7 +100,7 @@ func (pb *ProgressBar) Start() *ProgressBar { pb.ShowBar = false pb.ShowTimeLeft = false pb.ShowPercent = false - } + } if !pb.ManualUpdate { go pb.writer() } @@ -233,7 +233,7 @@ func (pb *ProgressBar) write(current int64) { percent := float64(current) / (float64(pb.Total) / float64(100)) percentBox = fmt.Sprintf(" %#.02f %% ", percent) } - + // counters if pb.ShowCounters { if pb.Total > 0 { @@ -271,7 +271,7 @@ func (pb *ProgressBar) write(current int64) { // bar if pb.ShowBar { size := width - len(countersBox+pb.BarStart+pb.BarEnd+percentBox+timeLeftBox+speedBox+pb.prefix+pb.postfix) - if size > 0 { + if size > 0 && pb.Total > 0 { curCount := int(math.Ceil((float64(current) / float64(pb.Total)) * float64(size))) emptCount := size - curCount barBox = pb.BarStart diff --git a/commands/cli/parse.go b/commands/cli/parse.go index 5368cff8c..dec01b6b8 100644 --- a/commands/cli/parse.go +++ b/commands/cli/parse.go @@ -7,6 +7,7 @@ import ( "path" "path/filepath" "runtime" + "sort" "strings" cmds "github.com/ipfs/go-ipfs/commands" @@ -269,8 +270,8 @@ func parseArgs(inputs []string, stdin *os.File, argDefs []cmds.Argument, recursi } stringArgs := make([]string, 0, numInputs) - fileArgs := make([]files.File, 0, numInputs) + fileArgs := make(map[string]files.File) argDefIndex := 0 // the index of the current argument definition for i := 0; i < numInputs; i++ { argDef := getArgDef(argDefIndex, argDefs) @@ -305,18 +306,21 @@ func parseArgs(inputs []string, stdin *os.File, argDefs []cmds.Argument, recursi } else if argDef.Type == cmds.ArgFile { if stdin == nil || !argDef.SupportsStdin { // treat stringArg values as file paths - fileArgs, inputs, err = appendFile(fileArgs, inputs, argDef, recursive) + fpath := inputs[0] + inputs = inputs[1:] + file, err := appendFile(fpath, argDef, recursive) if err != nil { return nil, nil, err } + fileArgs[fpath] = file } else { if len(inputs) > 0 { // don't use stdin if we have inputs stdin = nil } else { // if we have a stdin, create a file from it - fileArgs, stdin = appendStdinAsFile(fileArgs, stdin) + fileArgs[""] = files.NewReaderFile("", "", stdin, nil) } } } @@ -333,7 +337,23 @@ func parseArgs(inputs []string, stdin *os.File, argDefs []cmds.Argument, recursi } } - return stringArgs, fileArgs, nil + return stringArgs, filesMapToSortedArr(fileArgs), nil +} + +func filesMapToSortedArr(fs map[string]files.File) []files.File { + var names []string + for name, _ := range fs { + names = append(names, name) + } + + sort.Strings(names) + + var out []files.File + for _, f := range names { + out = append(out, fs[f]) + } + + return out } func getArgDef(i int, argDefs []cmds.Argument) *cmds.Argument { @@ -366,44 +386,35 @@ func appendStdinAsString(args []string, stdin *os.File) ([]string, *os.File, err return append(args, strings.Split(input, "\n")...), nil, nil } -func appendFile(args []files.File, inputs []string, argDef *cmds.Argument, recursive bool) ([]files.File, []string, error) { - fpath := filepath.ToSlash(filepath.Clean(inputs[0])) +const notRecursiveFmtStr = "'%s' is a directory, use the '-%s' flag to specify directories" +const dirNotSupportedFmtStr = "Invalid path '%s', argument '%s' does not support directories" + +func appendFile(fpath string, argDef *cmds.Argument, recursive bool) (files.File, error) { + fpath = filepath.ToSlash(filepath.Clean(fpath)) if fpath == "." { cwd, err := os.Getwd() if err != nil { - return nil, nil, err + return nil, err } fpath = cwd } + stat, err := os.Lstat(fpath) if err != nil { - return nil, nil, err + return nil, err } if stat.IsDir() { if !argDef.Recursive { - err = fmt.Errorf("Invalid path '%s', argument '%s' does not support directories", - fpath, argDef.Name) - return nil, nil, err + return nil, fmt.Errorf(dirNotSupportedFmtStr, fpath, argDef.Name) } if !recursive { - err = fmt.Errorf("'%s' is a directory, use the '-%s' flag to specify directories", - fpath, cmds.RecShort) - return nil, nil, err + return nil, fmt.Errorf(notRecursiveFmtStr, fpath, cmds.RecShort) } } - arg, err := files.NewSerialFile(path.Base(fpath), fpath, stat) - if err != nil { - return nil, nil, err - } - return append(args, arg), inputs[1:], nil -} - -func appendStdinAsFile(args []files.File, stdin *os.File) ([]files.File, *os.File) { - arg := files.NewReaderFile("", "", stdin, nil) - return append(args, arg), nil + return files.NewSerialFile(path.Base(fpath), fpath, stat) } // isTerminal returns true if stdin is a Stdin pipe (e.g. `cat file | ipfs`), diff --git a/core/commands/add.go b/core/commands/add.go index df8c124ba..3ec912b71 100644 --- a/core/commands/add.go +++ b/core/commands/add.go @@ -59,7 +59,13 @@ remains to be implemented. return nil } - req.SetOption(progressOptionName, true) + // ipfs cli progress bar defaults to true + progress, found, _ := req.Option(progressOptionName).Bool() + if !found { + progress = true + } + + req.SetOption(progressOptionName, progress) sizeFile, ok := req.Files().(files.SizeFile) if !ok { @@ -201,13 +207,18 @@ remains to be implemented. return } - progress, _, err := req.Option(progressOptionName).Bool() + progress, prgFound, err := req.Option(progressOptionName).Bool() if err != nil { res.SetError(u.ErrCast(), cmds.ErrNormal) return } - showProgressBar := !quiet || progress + var showProgressBar bool + if prgFound { + showProgressBar = progress + } else if !quiet { + showProgressBar = true + } var bar *pb.ProgressBar var terminalWidth int @@ -279,10 +290,12 @@ remains to be implemented. bar.Update() } case size := <-sizeChan: - bar.Total = size - bar.ShowPercent = true - bar.ShowBar = true - bar.ShowTimeLeft = true + if showProgressBar { + bar.Total = size + bar.ShowPercent = true + bar.ShowBar = true + bar.ShowTimeLeft = true + } } } }, diff --git a/core/coreunix/add.go b/core/coreunix/add.go index 2bc2e37fe..8180b5bef 100644 --- a/core/coreunix/add.go +++ b/core/coreunix/add.go @@ -193,19 +193,22 @@ func (params *Adder) Finalize() (*dag.Node, error) { } func (params *Adder) outputDirs(path string, nd *dag.Node) error { + if !bytes.Equal(nd.Data, folderData) { + return nil + } + for _, l := range nd.Links { child, err := l.GetNode(params.ctx, params.node.DAG) if err != nil { return err } - if bytes.Equal(child.Data, folderData) { - err := params.outputDirs(gopath.Join(path, l.Name), child) - if err != nil { - return err - } + err = params.outputDirs(gopath.Join(path, l.Name), child) + if err != nil { + return err } } + return outputDagnode(params.out, path, nd) } diff --git a/mfs/dir.go b/mfs/dir.go index ece79adeb..43271fe49 100644 --- a/mfs/dir.go +++ b/mfs/dir.go @@ -308,7 +308,8 @@ func (d *Directory) AddChild(name string, nd *dag.Node) error { d.modTime = time.Now() - return d.parent.closeChild(d.name, d.node) + //return d.parent.closeChild(d.name, d.node) + return nil } func (d *Directory) sync() error { diff --git a/test/sharness/t0042-add-skip.sh b/test/sharness/t0042-add-skip.sh index f0d4c6fd2..d5f799798 100755 --- a/test/sharness/t0042-add-skip.sh +++ b/test/sharness/t0042-add-skip.sh @@ -38,11 +38,11 @@ test_add_skip() { cat >expected <<-\EOF && added QmcAREBcjgnUpKfyFmUGnfajA1NQS5ydqRp7WfqZ6JF8Dx planets/.asteroids/ceres.txt added QmZ5eaLybJ5GUZBNwy24AA9EEDTDpA4B8qXnuN3cGxu2uF planets/.asteroids/pallas.txt - added Qmf6rbs5GF85anDuoxpSAdtuZPM9D2Yt3HngzjUVSQ7kDV planets/.asteroids added QmaowqjedBkUrMUXgzt9c2ZnAJncM9jpJtkFfgdFstGr5a planets/.charon.txt added QmU4zFD5eJtRBsWC63AvpozM9Atiadg9kPVTuTrnCYJiNF planets/.pluto.txt added QmZy3khu7qf696i5HtkgL2NotsCZ8wzvNZJ1eUdA5n8KaV planets/mars.txt added QmQnv4m3Q5512zgVtpbJ9z85osQrzZzGRn934AGh6iVEXz planets/venus.txt + added Qmf6rbs5GF85anDuoxpSAdtuZPM9D2Yt3HngzjUVSQ7kDV planets/.asteroids added QmetajtFdmzhWYodAsZoVZSiqpeJDAiaw2NwbM3xcWcpDj planets EOF test_cmp expected actual diff --git a/test/sharness/t0043-add-w.sh b/test/sharness/t0043-add-w.sh index d4f7decaa..f875f21b6 100755 --- a/test/sharness/t0043-add-w.sh +++ b/test/sharness/t0043-add-w.sh @@ -15,8 +15,8 @@ add_w_12='added Qme987pqNBhZZXy4ckeXiR7zaRQwBabB7fTgHurW2yJfNu 4r93 added QmVb4ntSZZnT2J2zvCmXKMJc52cmZYH6AB37MzeYewnkjs 4u6ead added QmZPASVB6EsADrLN8S2sak34zEHL8mx4TAVsPJU9cNnQQJ ' -add_w_21='added QmVb4ntSZZnT2J2zvCmXKMJc52cmZYH6AB37MzeYewnkjs 4u6ead -added Qme987pqNBhZZXy4ckeXiR7zaRQwBabB7fTgHurW2yJfNu 4r93 +add_w_21='added Qme987pqNBhZZXy4ckeXiR7zaRQwBabB7fTgHurW2yJfNu 4r93 +added QmVb4ntSZZnT2J2zvCmXKMJc52cmZYH6AB37MzeYewnkjs 4u6ead added QmZPASVB6EsADrLN8S2sak34zEHL8mx4TAVsPJU9cNnQQJ ' add_w_d1='added QmPcaX84tDiTfzdTn8GQxexodgeWH6mHjSss5Zfr5ojssb _jo7/-s782qgs @@ -27,20 +27,20 @@ added QmYC3u5jGWuyFwvTxtvLYm2K3SpWZ31tg3NjpVVvh9cJaJ _jo7/wzvsihy added QmQkib3f9XNX5sj6WEahLUPFpheTcwSRJwUCSvjcv8b9by _jo7 added QmNQoesMj1qp8ApE51NbtTjFYksyzkezPD4cat7V2kzbKN ' -add_w_d2='added QmVaKAt2eVftNKFfKhiBV7Mu5HjCugffuLqWqobSSFgiA7 h3qpecj0 +add_w_d2='added Qme987pqNBhZZXy4ckeXiR7zaRQwBabB7fTgHurW2yJfNu 4r93 added QmU9Jqks8TPu4vFr6t7EKkAKQrSJuEujNj1AkzoCeTEDFJ gnz66h/1k0xpx34 added QmSLYZycXAufRw3ePMVH2brbtYWCcWsmksGLbHcT8ia9Ke gnz66h/9cwudvacx added QmfYmpCCAMU9nLe7xbrYsHf5z2R2GxeQnsm4zavUhX9vq2 gnz66h/9ximv51cbo8 added QmWgEE4e2kfx3b8HZcBk5cLrfhoi8kTMQP2MipgPhykuV3 gnz66h/b54ygh6gs added QmcLbqEqhREGednc6mrVtanee4WHKp5JnUfiwTTHCJwuDf gnz66h/lbl5 -added QmVPwNy8pZegpsNmsjjZvdTQn4uCeuZgtzhgWhRSQWjK9x gnz66h added QmPcaX84tDiTfzdTn8GQxexodgeWH6mHjSss5Zfr5ojssb _jo7/-s782qgs added QmaVBqquUuXKjkyWHXaXfsaQUxAnsCKS95VRDHU8PzGA4K _jo7/15totauzkak- added QmaAHFG8cmhW3WLjofx5siSp44VV25ETN6ThzrU8iAqpkR _jo7/galecuirrj4r added QmeuSfhJNKwBESp1W9H8cfoMdBfW3AeHQDWXbNXQJYWp53 _jo7/mzo50r-1xidf5zx added QmYC3u5jGWuyFwvTxtvLYm2K3SpWZ31tg3NjpVVvh9cJaJ _jo7/wzvsihy +added QmVaKAt2eVftNKFfKhiBV7Mu5HjCugffuLqWqobSSFgiA7 h3qpecj0 +added QmVPwNy8pZegpsNmsjjZvdTQn4uCeuZgtzhgWhRSQWjK9x gnz66h added QmQkib3f9XNX5sj6WEahLUPFpheTcwSRJwUCSvjcv8b9by _jo7 -added Qme987pqNBhZZXy4ckeXiR7zaRQwBabB7fTgHurW2yJfNu 4r93 added QmTmc46fhKC8Liuh5soy1VotdnHcqLu3r6HpPGwDZCnqL1 ' add_w_r='QmcCksBMDuuyuyfAMMNzEAx6Z7jTrdRy9a23WpufAhG9ji' diff --git a/test/sharness/t0045-ls.sh b/test/sharness/t0045-ls.sh index 4ad0acf89..8ba9e8ccd 100755 --- a/test/sharness/t0045-ls.sh +++ b/test/sharness/t0045-ls.sh @@ -27,12 +27,12 @@ test_ls_cmd() { cat <<-\EOF >expected_add && added QmQNd6ubRXaNG6Prov8o6vk3bn6eWsj9FxLGrAVDUAGkGe testData/d1/128 added QmZULkCELmmk5XNfCgTnCyFgAVxBRBXyDHGGMVoLFLiXEN testData/d1/a - added QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss testData/d1 added QmbQBUSRL9raZtNXfpTDeaxQapibJEG6qEY8WqAN22aUzd testData/d2/1024 added QmaRGe7bVmVaLmxbrMiVNXqW4pRNNp3xq7hFtyRKA3mtJL testData/d2/a - added QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy testData/d2 added QmeomffUNfmQy76CQGy9NdmqEnnHU9soCexBnGU3ezPHVH testData/f1 added QmNtocSs7MoDkJMc1RkyisCSKvLadujPsfJfSdJ3e1eA1M testData/f2 + added QmSix55yz8CzWXf5ZVM9vgEvijnEeeXiTSarVtsqiiCJss testData/d1 + added QmR3jhV4XpxxPjPT3Y8vNnWvWNvakdcT3H6vqpRBsX1MLy testData/d2 added QmfNy183bXiRVyrhyWtq3TwHn79yHEkiAGFr18P7YNzESj testData EOF test_cmp expected_add actual_add diff --git a/test/sharness/t0080-repo.sh b/test/sharness/t0080-repo.sh index 01ef79b0a..9b1890ab2 100755 --- a/test/sharness/t0080-repo.sh +++ b/test/sharness/t0080-repo.sh @@ -29,11 +29,6 @@ test_expect_success "'ipfs repo gc' succeeds" ' ipfs repo gc >gc_out_actual ' -test_expect_success "'ipfs repo gc' looks good (patch root)" ' - PATCH_ROOT=QmQXirSbubiySKnqaFyfs5YzziXRB5JEVQVjU6xsd7innr && - grep "removed $PATCH_ROOT" gc_out_actual -' - test_expect_success "'ipfs repo gc' doesnt remove file" ' ipfs cat "$HASH" >out && test_cmp out afile