Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
bc0f0c2b
提交
bc0f0c2b
authored
10月 11, 2015
作者:
Juan Benet
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1779 from rht/latest-progressbar
Use common progressbar function for cat and get
上级
29dc32fd
7caba7e4
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
29 行增加
和
24 行删除
+29
-24
cat.go
core/commands/cat.go
+2
-19
get.go
core/commands/get.go
+27
-5
没有找到文件。
core/commands/cat.go
浏览文件 @
bc0f0c2b
package
commands
import
(
"fmt"
"io"
cmds
"github.com/ipfs/go-ipfs/commands"
core
"github.com/ipfs/go-ipfs/core"
coreunix
"github.com/ipfs/go-ipfs/core/coreunix"
"github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/cheggaaa/pb"
context
"github.com/ipfs/go-ipfs/Godeps/_workspace/src/golang.org/x/net/context"
)
const
progressBarMinSize
=
1024
*
1024
*
8
// show progress bar for outputs > 8MiB
type
clearlineReader
struct
{
io
.
Reader
out
io
.
Writer
}
var
CatCmd
=
&
cmds
.
Command
{
Helptext
:
cmds
.
HelpText
{
Tagline
:
"Show IPFS object data"
,
...
...
@@ -54,12 +47,10 @@ it contains.
return
}
bar
:=
pb
.
New
(
int
(
res
.
Length
()))
.
SetUnits
(
pb
.
U_BYTES
)
bar
.
Output
=
res
.
Stderr
()
bar
,
reader
:=
progressBarForReader
(
res
.
Stderr
(),
res
.
Output
()
.
(
io
.
Reader
),
int64
(
res
.
Length
()))
bar
.
Start
()
reader
:=
bar
.
NewProxyReader
(
res
.
Output
()
.
(
io
.
Reader
))
res
.
SetOutput
(
&
clearlineReader
{
reader
,
res
.
Stderr
()})
res
.
SetOutput
(
reader
)
},
}
...
...
@@ -76,11 +67,3 @@ func cat(ctx context.Context, node *core.IpfsNode, paths []string) ([]io.Reader,
}
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
,
"
\0
33[2K
\r
"
)
// clear progress bar line on EOF
}
return
}
core/commands/get.go
浏览文件 @
bc0f0c2b
...
...
@@ -112,13 +112,35 @@ may also specify the level of compression by specifying '-l=<1-9>'.
},
}
func
progressBarForReader
(
out
io
.
Writer
,
r
io
.
Reader
)
(
*
pb
.
ProgressBar
,
*
pb
.
Reader
)
{
type
clearlineReader
struct
{
io
.
Reader
out
io
.
Writer
}
func
(
r
*
clearlineReader
)
Read
(
p
[]
byte
)
(
n
int
,
err
error
)
{
n
,
err
=
r
.
Reader
.
Read
(
p
)
if
err
==
io
.
EOF
{
// callback
fmt
.
Fprintf
(
r
.
out
,
"
\0
33[2K
\r
"
)
// clear progress bar line on EOF
}
return
}
func
progressBarForReader
(
out
io
.
Writer
,
r
io
.
Reader
,
l
int64
)
(
*
pb
.
ProgressBar
,
io
.
Reader
)
{
// setup bar reader
// TODO: get total length of files
bar
:=
pb
.
New
(
0
)
.
SetUnits
(
pb
.
U_BYTES
)
bar
:=
pb
.
New
64
(
l
)
.
SetUnits
(
pb
.
U_BYTES
)
bar
.
Output
=
out
// the progress bar lib doesn't give us a way to get the width of the output,
// so as a hack we just use a callback to measure the output, then git rid of it
bar
.
Callback
=
func
(
line
string
)
{
terminalWidth
:=
len
(
line
)
bar
.
Callback
=
nil
log
.
Infof
(
"terminal width: %v
\n
"
,
terminalWidth
)
}
barR
:=
bar
.
NewProxyReader
(
r
)
return
bar
,
barR
return
bar
,
&
clearlineReader
{
barR
,
out
}
}
type
getWriter
struct
{
...
...
@@ -159,7 +181,7 @@ func (gw *getWriter) writeArchive(r io.Reader, fpath string) error {
defer
file
.
Close
()
fmt
.
Fprintf
(
gw
.
Out
,
"Saving archive to %s
\n
"
,
fpath
)
bar
,
barR
:=
progressBarForReader
(
gw
.
Err
,
r
)
bar
,
barR
:=
progressBarForReader
(
gw
.
Err
,
r
,
0
)
bar
.
Start
()
defer
bar
.
Finish
()
...
...
@@ -169,7 +191,7 @@ func (gw *getWriter) writeArchive(r io.Reader, fpath string) error {
func
(
gw
*
getWriter
)
writeExtracted
(
r
io
.
Reader
,
fpath
string
)
error
{
fmt
.
Fprintf
(
gw
.
Out
,
"Saving file(s) to %s
\n
"
,
fpath
)
bar
,
barR
:=
progressBarForReader
(
gw
.
Err
,
r
)
bar
,
barR
:=
progressBarForReader
(
gw
.
Err
,
r
,
0
)
bar
.
Start
()
defer
bar
.
Finish
()
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论