Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
13de031b
提交
13de031b
authored
3月 18, 2015
作者:
Jeromy
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
code cleanup and better naming of methods
上级
b9658f0c
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
103 行增加
和
43 行删除
+103
-43
ipns_test.go
fuse/ipns/ipns_test.go
+27
-10
ipns_unix.go
fuse/ipns/ipns_unix.go
+63
-20
file.go
ipnsfs/file.go
+4
-4
dagmodifier.go
unixfs/mod/dagmodifier.go
+8
-8
dagmodifier_test.go
unixfs/mod/dagmodifier_test.go
+1
-1
没有找到文件。
fuse/ipns/ipns_test.go
浏览文件 @
13de031b
...
...
@@ -74,13 +74,23 @@ func verifyFile(t *testing.T, path string, data []byte) {
}
defer
fi
.
Close
()
out
,
err
:=
ioutil
.
ReadAll
(
fi
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
buf
:=
make
([]
byte
,
1024
)
offset
:=
0
for
{
n
,
err
:=
fi
.
Read
(
buf
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
!
bytes
.
Equal
(
buf
[
:
n
],
data
[
offset
:
offset
+
n
])
{
t
.
Fatal
(
"Data not equal"
)
}
if
!
bytes
.
Equal
(
out
,
data
)
{
t
.
Fatal
(
"Data not equal"
)
if
n
<
len
(
buf
)
{
break
}
offset
+=
n
}
}
...
...
@@ -130,16 +140,23 @@ func setupIpnsTest(t *testing.T, node *core.IpfsNode) (*core.IpfsNode, *fstest.M
}
func
TestIpnsLocalLink
(
t
*
testing
.
T
)
{
_
,
mnt
:=
setupIpnsTest
(
t
,
nil
)
nd
,
mnt
:=
setupIpnsTest
(
t
,
nil
)
defer
mnt
.
Close
()
name
:=
mnt
.
Dir
+
"/local"
finfo
,
err
:=
os
.
Stat
(
name
)
_
,
err
:=
os
.
Stat
(
name
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
linksto
,
err
:=
os
.
Readlink
(
name
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
t
.
Log
(
finfo
.
Name
())
if
linksto
!=
nd
.
Identity
.
Pretty
()
{
t
.
Fatal
(
"Link invalid"
)
}
}
// Test writing a file and reading it back
...
...
@@ -189,7 +206,7 @@ func TestFilePersistence(t *testing.T) {
}
}
func
Test
Deeper
Dirs
(
t
*
testing
.
T
)
{
func
Test
Multiple
Dirs
(
t
*
testing
.
T
)
{
node
,
mnt
:=
setupIpnsTest
(
t
,
nil
)
t
.
Log
(
"make a top level dir"
)
...
...
fuse/ipns/ipns_unix.go
浏览文件 @
13de031b
...
...
@@ -239,7 +239,9 @@ func (s *Directory) Lookup(ctx context.Context, name string) (fs.Node, error) {
case
*
nsfs
.
File
:
return
&
File
{
fi
:
child
},
nil
default
:
panic
(
"system has proven to be insane"
)
// NB: if this happens, we do not want to continue, unpredictable behaviour
// may occur.
panic
(
"invalid type found under directory. programmer error."
)
}
}
...
...
@@ -272,42 +274,83 @@ func (dir *Directory) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) {
}
func
(
fi
*
File
)
Read
(
ctx
context
.
Context
,
req
*
fuse
.
ReadRequest
,
resp
*
fuse
.
ReadResponse
)
error
{
_
,
err
:=
fi
.
fi
.
Seek
(
req
.
Offset
,
os
.
SEEK_SET
)
if
err
!=
nil
{
return
err
}
errs
:=
make
(
chan
error
,
1
)
go
func
()
{
_
,
err
:=
fi
.
fi
.
Seek
(
req
.
Offset
,
os
.
SEEK_SET
)
if
err
!=
nil
{
errs
<-
err
return
}
fisize
,
err
:=
fi
.
fi
.
Size
()
if
err
!=
nil
{
fisize
,
err
:=
fi
.
fi
.
Size
()
if
err
!=
nil
{
errs
<-
err
return
}
readsize
:=
min
(
req
.
Size
,
int
(
fisize
-
req
.
Offset
))
n
,
err
:=
io
.
ReadFull
(
fi
.
fi
,
resp
.
Data
[
:
readsize
])
resp
.
Data
=
resp
.
Data
[
:
n
]
errs
<-
err
}()
select
{
case
<-
ctx
.
Done
()
:
return
ctx
.
Err
()
case
err
:=
<-
errs
:
return
err
}
readsize
:=
min
(
req
.
Size
,
int
(
fisize
-
req
.
Offset
))
n
,
err
:=
io
.
ReadFull
(
fi
.
fi
,
resp
.
Data
[
:
readsize
])
resp
.
Data
=
resp
.
Data
[
:
n
]
return
err
// may be non-nil / not succeeded
}
func
(
fi
*
File
)
Write
(
ctx
context
.
Context
,
req
*
fuse
.
WriteRequest
,
resp
*
fuse
.
WriteResponse
)
error
{
wrote
,
err
:=
fi
.
fi
.
WriteAt
(
req
.
Data
,
req
.
Offset
)
if
err
!=
nil
{
errs
:=
make
(
chan
error
,
1
)
go
func
()
{
wrote
,
err
:=
fi
.
fi
.
WriteAt
(
req
.
Data
,
req
.
Offset
)
if
err
!=
nil
{
errs
<-
err
}
resp
.
Size
=
wrote
errs
<-
nil
}()
select
{
case
err
:=
<-
errs
:
return
err
case
<-
ctx
.
Done
()
:
return
ctx
.
Err
()
}
resp
.
Size
=
wrote
return
nil
}
func
(
fi
*
File
)
Flush
(
ctx
context
.
Context
,
req
*
fuse
.
FlushRequest
)
error
{
return
fi
.
fi
.
Close
()
errs
:=
make
(
chan
error
,
1
)
go
func
()
{
errs
<-
fi
.
fi
.
Close
()
}()
select
{
case
err
:=
<-
errs
:
return
err
case
<-
ctx
.
Done
()
:
return
ctx
.
Err
()
}
}
// Fsync flushes the content in the file to disk, but does not
// update the dag tree internally
func
(
fi
*
File
)
Fsync
(
ctx
context
.
Context
,
req
*
fuse
.
FsyncRequest
)
error
{
return
fi
.
fi
.
Flush
()
errs
:=
make
(
chan
error
,
1
)
go
func
()
{
errs
<-
fi
.
fi
.
Sync
()
}()
select
{
case
err
:=
<-
errs
:
return
err
case
<-
ctx
.
Done
()
:
return
ctx
.
Err
()
}
}
func
(
fi
*
File
)
Forget
()
{
err
:=
fi
.
fi
.
Flush
()
err
:=
fi
.
fi
.
Sync
()
if
err
!=
nil
{
log
.
Debug
(
"Forget file error: "
,
err
)
}
...
...
ipnsfs/file.go
浏览文件 @
13de031b
...
...
@@ -57,7 +57,7 @@ func (fi *File) Close() error {
fi
.
Lock
()
defer
fi
.
Unlock
()
if
fi
.
hasChanges
{
err
:=
fi
.
mod
.
Flush
()
err
:=
fi
.
mod
.
Sync
()
if
err
!=
nil
{
return
err
}
...
...
@@ -80,11 +80,11 @@ func (fi *File) Close() error {
return
nil
}
//
Flush
flushes the changes in the file to disk
func
(
fi
*
File
)
Flush
()
error
{
//
Sync
flushes the changes in the file to disk
func
(
fi
*
File
)
Sync
()
error
{
fi
.
Lock
()
defer
fi
.
Unlock
()
return
fi
.
mod
.
Flush
()
return
fi
.
mod
.
Sync
()
}
// Seek implements io.Seeker
...
...
unixfs/mod/dagmodifier.go
浏览文件 @
13de031b
...
...
@@ -80,7 +80,7 @@ func (dm *DagModifier) WriteAt(b []byte, offset int64) (int, error) {
}
}
err
=
dm
.
Flush
()
err
=
dm
.
Sync
()
if
err
!=
nil
{
return
0
,
err
}
...
...
@@ -133,7 +133,7 @@ func (dm *DagModifier) Write(b []byte) (int, error) {
}
dm
.
curWrOff
+=
uint64
(
n
)
if
dm
.
wrBuf
.
Len
()
>
writebufferSize
{
err
:=
dm
.
Flush
()
err
:=
dm
.
Sync
()
if
err
!=
nil
{
return
n
,
err
}
...
...
@@ -156,8 +156,8 @@ func (dm *DagModifier) Size() (int64, error) {
return
int64
(
pbn
.
GetFilesize
()),
nil
}
//
Flush
writes changes to this dag to disk
func
(
dm
*
DagModifier
)
Flush
()
error
{
//
Sync
writes changes to this dag to disk
func
(
dm
*
DagModifier
)
Sync
()
error
{
// No buffer? Nothing to do
if
dm
.
wrBuf
==
nil
{
return
nil
...
...
@@ -315,7 +315,7 @@ func (dm *DagModifier) appendData(node *mdag.Node, blks <-chan []byte) (*mdag.No
// Read data from this dag starting at the current offset
func
(
dm
*
DagModifier
)
Read
(
b
[]
byte
)
(
int
,
error
)
{
err
:=
dm
.
Flush
()
err
:=
dm
.
Sync
()
if
err
!=
nil
{
return
0
,
err
}
...
...
@@ -347,7 +347,7 @@ func (dm *DagModifier) Read(b []byte) (int, error) {
// GetNode gets the modified DAG Node
func
(
dm
*
DagModifier
)
GetNode
()
(
*
mdag
.
Node
,
error
)
{
err
:=
dm
.
Flush
()
err
:=
dm
.
Sync
()
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -360,7 +360,7 @@ func (dm *DagModifier) HasChanges() bool {
}
func
(
dm
*
DagModifier
)
Seek
(
offset
int64
,
whence
int
)
(
int64
,
error
)
{
err
:=
dm
.
Flush
()
err
:=
dm
.
Sync
()
if
err
!=
nil
{
return
0
,
err
}
...
...
@@ -389,7 +389,7 @@ func (dm *DagModifier) Seek(offset int64, whence int) (int64, error) {
}
func
(
dm
*
DagModifier
)
Truncate
(
size
int64
)
error
{
err
:=
dm
.
Flush
()
err
:=
dm
.
Sync
()
if
err
!=
nil
{
return
err
}
...
...
unixfs/mod/dagmodifier_test.go
浏览文件 @
13de031b
...
...
@@ -246,7 +246,7 @@ func TestMultiWriteAndFlush(t *testing.T) {
if
n
!=
1
{
t
.
Fatal
(
"Somehow wrote the wrong number of bytes! (n != 1)"
)
}
err
=
dagmod
.
Flush
()
err
=
dagmod
.
Sync
()
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论