Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
22c653c7
提交
22c653c7
authored
6月 30, 2015
作者:
Juan Batiz-Benet
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1354 from rht/get-flag
Don't use tar reader for '-C' flag
上级
74a331db
37981787
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
50 行增加
和
18 行删除
+50
-18
get.go
core/commands/get.go
+50
-18
没有找到文件。
core/commands/get.go
浏览文件 @
22c653c7
package
commands
import
(
"bufio"
"compress/gzip"
"errors"
"fmt"
...
...
@@ -16,6 +17,7 @@ import (
core
"github.com/ipfs/go-ipfs/core"
path
"github.com/ipfs/go-ipfs/path"
tar
"github.com/ipfs/go-ipfs/thirdparty/tar"
uio
"github.com/ipfs/go-ipfs/unixfs/io"
utar
"github.com/ipfs/go-ipfs/unixfs/tar"
)
...
...
@@ -63,7 +65,20 @@ may also specify the level of compression by specifying '-l=<1-9>'.
return
}
reader
,
err
:=
get
(
req
.
Context
()
.
Context
,
node
,
req
.
Arguments
()[
0
],
cmplvl
)
// Validate path string
p
,
err
:=
path
.
ParsePath
(
req
.
Arguments
()[
0
])
if
err
!=
nil
{
res
.
SetError
(
fmt
.
Errorf
(
"failed to validate path: %v"
,
err
),
cmds
.
ErrNormal
)
return
}
var
reader
io
.
Reader
if
archive
,
_
,
_
:=
req
.
Option
(
"archive"
)
.
Bool
();
!
archive
&&
cmplvl
!=
gzip
.
NoCompression
{
// only use this when the flag is '-C' without '-a'
reader
,
err
=
getZip
(
req
.
Context
()
.
Context
,
node
,
p
,
cmplvl
)
}
else
{
reader
,
err
=
get
(
req
.
Context
()
.
Context
,
node
,
p
,
cmplvl
)
}
if
err
!=
nil
{
res
.
SetError
(
err
,
cmds
.
ErrNormal
)
return
...
...
@@ -89,8 +104,8 @@ may also specify the level of compression by specifying '-l=<1-9>'.
return
}
if
archive
,
_
,
_
:=
req
.
Option
(
"archive"
)
.
Bool
();
archive
{
if
!
strings
.
HasSuffix
(
outPath
,
".tar"
)
{
if
archive
,
_
,
_
:=
req
.
Option
(
"archive"
)
.
Bool
();
archive
||
cmplvl
!=
gzip
.
NoCompression
{
if
archive
&&
!
strings
.
HasSuffix
(
outPath
,
".tar"
)
{
outPath
+=
".tar"
}
if
cmplvl
!=
gzip
.
NoCompression
{
...
...
@@ -127,19 +142,7 @@ may also specify the level of compression by specifying '-l=<1-9>'.
bar
.
Output
=
os
.
Stderr
// wrap the reader with the progress bar proxy reader
// if the output is compressed, also wrap it in a gzip.Reader
var
reader
io
.
Reader
if
cmplvl
!=
gzip
.
NoCompression
{
gzipReader
,
err
:=
gzip
.
NewReader
(
outReader
)
if
err
!=
nil
{
res
.
SetError
(
err
,
cmds
.
ErrNormal
)
return
}
defer
gzipReader
.
Close
()
reader
=
bar
.
NewProxyReader
(
gzipReader
)
}
else
{
reader
=
bar
.
NewProxyReader
(
outReader
)
}
reader
:=
bar
.
NewProxyReader
(
outReader
)
bar
.
Start
()
defer
bar
.
Finish
()
...
...
@@ -166,8 +169,7 @@ func getCompressOptions(req cmds.Request) (int, error) {
return
gzip
.
NoCompression
,
nil
}
func
get
(
ctx
context
.
Context
,
node
*
core
.
IpfsNode
,
p
string
,
compression
int
)
(
io
.
Reader
,
error
)
{
pathToResolve
:=
path
.
Path
(
p
)
func
get
(
ctx
context
.
Context
,
node
*
core
.
IpfsNode
,
pathToResolve
path
.
Path
,
compression
int
)
(
io
.
Reader
,
error
)
{
dagnode
,
err
:=
core
.
Resolve
(
ctx
,
node
,
pathToResolve
)
if
err
!=
nil
{
return
nil
,
err
...
...
@@ -175,3 +177,33 @@ func get(ctx context.Context, node *core.IpfsNode, p string, compression int) (i
return
utar
.
NewReader
(
pathToResolve
,
node
.
DAG
,
dagnode
,
compression
)
}
// getZip is equivalent to `ipfs getdag $hash | gzip`
func
getZip
(
ctx
context
.
Context
,
node
*
core
.
IpfsNode
,
pathToResolve
path
.
Path
,
compression
int
)
(
io
.
Reader
,
error
)
{
dagnode
,
err
:=
core
.
Resolve
(
ctx
,
node
,
pathToResolve
)
if
err
!=
nil
{
return
nil
,
err
}
reader
,
err
:=
uio
.
NewDagReader
(
ctx
,
dagnode
,
node
.
DAG
)
if
err
!=
nil
{
return
nil
,
err
}
pr
,
pw
:=
io
.
Pipe
()
gw
,
err
:=
gzip
.
NewWriterLevel
(
pw
,
compression
)
if
err
!=
nil
{
return
nil
,
err
}
bufin
:=
bufio
.
NewReader
(
reader
)
go
func
()
{
_
,
err
:=
bufin
.
WriteTo
(
gw
)
if
err
!=
nil
{
log
.
Error
(
"Fail to compress the stream"
)
}
gw
.
Close
()
pw
.
Close
()
}()
return
pr
,
nil
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论