提交 870d8508 作者: Juan Benet

Merge pull request #1516 from rht/progressbar

Clear progress bar on `ipfs cat` exit
...@@ -4,7 +4,6 @@ import ( ...@@ -4,7 +4,6 @@ import (
"fmt" "fmt"
"io" "io"
"path" "path"
"strings"
"github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/cheggaaa/pb" "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/cheggaaa/pb"
...@@ -208,7 +207,7 @@ remains to be implemented. ...@@ -208,7 +207,7 @@ remains to be implemented.
if len(output.Hash) > 0 { if len(output.Hash) > 0 {
if showProgressBar { if showProgressBar {
// clear progress bar line before we print "added x" output // clear progress bar line before we print "added x" output
fmt.Fprintf(res.Stderr(), "\r%s\r", strings.Repeat(" ", terminalWidth)) fmt.Fprintf(res.Stderr(), "\033[2K\r")
} }
if quiet { if quiet {
fmt.Fprintf(res.Stdout(), "%s\n", output.Hash) fmt.Fprintf(res.Stdout(), "%s\n", output.Hash)
......
package commands package commands
import ( import (
"fmt"
"io" "io"
cmds "github.com/ipfs/go-ipfs/commands" cmds "github.com/ipfs/go-ipfs/commands"
...@@ -14,6 +15,11 @@ import ( ...@@ -14,6 +15,11 @@ import (
const progressBarMinSize = 1024 * 1024 * 8 // show progress bar for outputs > 8MiB const progressBarMinSize = 1024 * 1024 * 8 // show progress bar for outputs > 8MiB
type clearlineReader struct {
io.Reader
out io.Writer
}
var CatCmd = &cmds.Command{ var CatCmd = &cmds.Command{
Helptext: cmds.HelpText{ Helptext: cmds.HelpText{
Tagline: "Show IPFS object data", Tagline: "Show IPFS object data",
...@@ -54,7 +60,7 @@ it contains. ...@@ -54,7 +60,7 @@ it contains.
bar.Start() bar.Start()
reader := bar.NewProxyReader(res.Output().(io.Reader)) reader := bar.NewProxyReader(res.Output().(io.Reader))
res.SetOutput(reader) res.SetOutput(&clearlineReader{reader, res.Stderr()})
}, },
} }
...@@ -76,3 +82,11 @@ func cat(ctx context.Context, node *core.IpfsNode, paths []string) ([]io.Reader, ...@@ -76,3 +82,11 @@ func cat(ctx context.Context, node *core.IpfsNode, paths []string) ([]io.Reader,
} }
return readers, length, nil return readers, length, nil
} }
func (r *clearlineReader) Read(p []byte) (n int, err error) {
n, err = r.Reader.Read(p)
if err == io.EOF {
fmt.Fprintf(r.out, "\033[2K\r") // clear progress bar line on EOF
}
return
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论