Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
ff27c03d
提交
ff27c03d
authored
9月 14, 2015
作者:
rht
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Decompose maybeGzwriter
License: MIT Signed-off-by:
rht
<
rhtbot@gmail.com
>
上级
7e691469
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
33 行增加
和
29 行删除
+33
-29
archive.go
unixfs/archive/archive.go
+33
-29
没有找到文件。
unixfs/archive/archive.go
浏览文件 @
ff27c03d
...
...
@@ -36,67 +36,71 @@ func DagArchive(ctx cxt.Context, nd *mdag.Node, name string, dag mdag.DAGService
// need to connect a writer to a reader
piper
,
pipew
:=
io
.
Pipe
()
checkErrAndClosePipe
:=
func
(
err
error
)
bool
{
if
err
!=
nil
{
pipew
.
CloseWithError
(
err
)
return
true
}
return
false
}
// use a buffered writer to parallelize task
bufw
:=
bufio
.
NewWriterSize
(
pipew
,
DefaultBufSize
)
// compression determines whether to use gzip compression.
var
maybeGzw
io
.
WriteCloser
var
err
error
if
compression
!=
gzip
.
NoCompression
{
maybeGzw
,
err
=
gzip
.
NewWriterLevel
(
bufw
,
compression
)
if
err
!=
nil
{
pipew
.
CloseWithError
(
err
)
return
nil
,
err
maybeGzw
,
err
:=
newMaybeGzWriter
(
bufw
,
compression
)
if
checkErrAndClosePipe
(
err
)
{
return
nil
,
err
}
closeGzwAndPipe
:=
func
()
{
if
err
:=
maybeGzw
.
Close
();
checkErrAndClosePipe
(
err
)
{
return
}
}
else
{
maybeGzw
=
&
identityWriteCloser
{
bufw
}
if
err
:=
bufw
.
Flush
();
checkErrAndClosePipe
(
err
)
{
return
}
pipew
.
Close
()
// everything seems to be ok.
}
if
!
archive
&&
compression
!=
gzip
.
NoCompression
{
// the case when the node is a file
dagr
,
err
:=
uio
.
NewDagReader
(
ctx
,
nd
,
dag
)
if
err
!=
nil
{
pipew
.
CloseWithError
(
err
)
if
checkErrAndClosePipe
(
err
)
{
return
nil
,
err
}
go
func
()
{
if
_
,
err
:=
dagr
.
WriteTo
(
maybeGzw
);
err
!=
nil
{
pipew
.
CloseWithError
(
err
)
return
}
maybeGzw
.
Close
()
if
err
:=
bufw
.
Flush
();
err
!=
nil
{
pipew
.
CloseWithError
(
err
)
if
_
,
err
:=
dagr
.
WriteTo
(
maybeGzw
);
checkErrAndClosePipe
(
err
)
{
return
}
pipew
.
Close
()
// everything seems to be ok.
closeGzwAndPipe
()
// everything seems to be ok
}()
}
else
{
// the case for 1. archive, and 2. not archived and not compressed, in which tar is used anyway as a transport format
// construct the tar writer
w
,
err
:=
tar
.
NewWriter
(
ctx
,
dag
,
archive
,
compression
,
maybeGzw
)
if
err
!=
nil
{
if
checkErrAndClosePipe
(
err
)
{
return
nil
,
err
}
go
func
()
{
// write all the nodes recursively
if
err
:=
w
.
WriteNode
(
nd
,
filename
);
err
!=
nil
{
pipew
.
CloseWithError
(
err
)
if
err
:=
w
.
WriteNode
(
nd
,
filename
);
checkErrAndClosePipe
(
err
)
{
return
}
w
.
Close
()
maybeGzw
.
Close
()
if
err
:=
bufw
.
Flush
();
err
!=
nil
{
pipew
.
CloseWithError
(
err
)
return
}
pipew
.
Close
()
// everything seems to be ok.
w
.
Close
()
// close tar writer
closeGzwAndPipe
()
// everything seems to be ok
}()
}
return
piper
,
nil
}
func
newMaybeGzWriter
(
w
io
.
Writer
,
compression
int
)
(
io
.
WriteCloser
,
error
)
{
if
compression
!=
gzip
.
NoCompression
{
return
gzip
.
NewWriterLevel
(
w
,
compression
)
}
return
&
identityWriteCloser
{
w
},
nil
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论