Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
80c64ffa
提交
80c64ffa
authored
10月 02, 2014
作者:
Jeromy
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
break ipns into separate files
上级
41bc355b
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
153 行增加
和
132 行删除
+153
-132
ipns_unix.go
fuse/ipns/ipns_unix.go
+0
-132
link_unix.go
fuse/ipns/link_unix.go
+24
-0
mount_unix.go
fuse/ipns/mount_unix.go
+91
-0
repub_unix.go
fuse/ipns/repub_unix.go
+38
-0
没有找到文件。
fuse/ipns/ipns_unix.go
浏览文件 @
80c64ffa
package
ipns
import
(
"fmt"
"io/ioutil"
"os"
"os/exec"
"os/signal"
"path/filepath"
"runtime"
"syscall"
"time"
"bytes"
...
...
@@ -469,130 +464,3 @@ func (n *Node) Rename(req *fuse.RenameRequest, newDir fs.Node, intr fs.Intr) fus
}
return
nil
}
// Mount mounts an IpfsNode instance at a particular path. It
// serves until the process receives exit signals (to Unmount).
func
Mount
(
ipfs
*
core
.
IpfsNode
,
fpath
string
,
ipfspath
string
)
error
{
sigc
:=
make
(
chan
os
.
Signal
,
1
)
signal
.
Notify
(
sigc
,
syscall
.
SIGHUP
,
syscall
.
SIGINT
,
syscall
.
SIGTERM
,
syscall
.
SIGQUIT
)
go
func
()
{
<-
sigc
for
{
err
:=
Unmount
(
fpath
)
if
err
==
nil
{
return
}
time
.
Sleep
(
time
.
Millisecond
*
100
)
}
ipfs
.
Network
.
Close
()
}()
c
,
err
:=
fuse
.
Mount
(
fpath
)
if
err
!=
nil
{
return
err
}
defer
c
.
Close
()
fsys
,
err
:=
NewIpns
(
ipfs
,
ipfspath
)
if
err
!=
nil
{
return
err
}
err
=
fs
.
Serve
(
c
,
fsys
)
if
err
!=
nil
{
return
err
}
// check if the mount process has an error to report
<-
c
.
Ready
if
err
:=
c
.
MountError
;
err
!=
nil
{
return
err
}
return
nil
}
// Unmount attempts to unmount the provided FUSE mount point, forcibly
// if necessary.
func
Unmount
(
point
string
)
error
{
fmt
.
Printf
(
"Unmounting %s...
\n
"
,
point
)
var
cmd
*
exec
.
Cmd
switch
runtime
.
GOOS
{
case
"darwin"
:
cmd
=
exec
.
Command
(
"diskutil"
,
"umount"
,
"force"
,
point
)
case
"linux"
:
cmd
=
exec
.
Command
(
"fusermount"
,
"-u"
,
point
)
default
:
return
fmt
.
Errorf
(
"unmount: unimplemented"
)
}
errc
:=
make
(
chan
error
,
1
)
go
func
()
{
if
err
:=
exec
.
Command
(
"umount"
,
point
)
.
Run
();
err
==
nil
{
errc
<-
err
}
// retry to unmount with the fallback cmd
errc
<-
cmd
.
Run
()
}()
select
{
case
<-
time
.
After
(
1
*
time
.
Second
)
:
return
fmt
.
Errorf
(
"umount timeout"
)
case
err
:=
<-
errc
:
return
err
}
}
type
Link
struct
{
Target
string
}
func
(
l
*
Link
)
Attr
()
fuse
.
Attr
{
log
.
Debug
(
"Link attr."
)
return
fuse
.
Attr
{
Mode
:
os
.
ModeSymlink
|
0555
,
}
}
func
(
l
*
Link
)
Readlink
(
req
*
fuse
.
ReadlinkRequest
,
intr
fs
.
Intr
)
(
string
,
fuse
.
Error
)
{
log
.
Debug
(
"ReadLink: %s"
,
l
.
Target
)
return
l
.
Target
,
nil
}
type
Republisher
struct
{
Timeout
time
.
Duration
Publish
chan
struct
{}
node
*
Node
}
func
NewRepublisher
(
n
*
Node
,
tout
time
.
Duration
)
*
Republisher
{
return
&
Republisher
{
Timeout
:
tout
,
Publish
:
make
(
chan
struct
{}),
node
:
n
,
}
}
func
(
np
*
Republisher
)
Run
()
{
for
_
=
range
np
.
Publish
{
timer
:=
time
.
After
(
np
.
Timeout
)
for
{
select
{
case
<-
timer
:
//Do the publish!
log
.
Info
(
"Publishing Changes!"
)
err
:=
np
.
node
.
updateTree
()
if
err
!=
nil
{
log
.
Critical
(
"updateTree error: %s"
,
err
)
}
goto
done
case
<-
np
.
Publish
:
timer
=
time
.
After
(
np
.
Timeout
)
}
}
done
:
}
}
fuse/ipns/link_unix.go
0 → 100644
浏览文件 @
80c64ffa
package
ipns
import
(
"os"
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/bazil.org/fuse"
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/bazil.org/fuse/fs"
)
type
Link
struct
{
Target
string
}
func
(
l
*
Link
)
Attr
()
fuse
.
Attr
{
log
.
Debug
(
"Link attr."
)
return
fuse
.
Attr
{
Mode
:
os
.
ModeSymlink
|
0555
,
}
}
func
(
l
*
Link
)
Readlink
(
req
*
fuse
.
ReadlinkRequest
,
intr
fs
.
Intr
)
(
string
,
fuse
.
Error
)
{
log
.
Debug
(
"ReadLink: %s"
,
l
.
Target
)
return
l
.
Target
,
nil
}
fuse/ipns/mount_unix.go
0 → 100644
浏览文件 @
80c64ffa
package
ipns
import
(
"fmt"
"os"
"os/exec"
"os/signal"
"runtime"
"syscall"
"time"
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/bazil.org/fuse"
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/bazil.org/fuse/fs"
"github.com/jbenet/go-ipfs/core"
)
// Mount mounts an IpfsNode instance at a particular path. It
// serves until the process receives exit signals (to Unmount).
func
Mount
(
ipfs
*
core
.
IpfsNode
,
fpath
string
,
ipfspath
string
)
error
{
sigc
:=
make
(
chan
os
.
Signal
,
1
)
signal
.
Notify
(
sigc
,
syscall
.
SIGHUP
,
syscall
.
SIGINT
,
syscall
.
SIGTERM
,
syscall
.
SIGQUIT
)
go
func
()
{
<-
sigc
for
{
err
:=
Unmount
(
fpath
)
if
err
==
nil
{
return
}
time
.
Sleep
(
time
.
Millisecond
*
100
)
}
ipfs
.
Network
.
Close
()
}()
c
,
err
:=
fuse
.
Mount
(
fpath
)
if
err
!=
nil
{
return
err
}
defer
c
.
Close
()
fsys
,
err
:=
NewIpns
(
ipfs
,
ipfspath
)
if
err
!=
nil
{
return
err
}
err
=
fs
.
Serve
(
c
,
fsys
)
if
err
!=
nil
{
return
err
}
// check if the mount process has an error to report
<-
c
.
Ready
if
err
:=
c
.
MountError
;
err
!=
nil
{
return
err
}
return
nil
}
// Unmount attempts to unmount the provided FUSE mount point, forcibly
// if necessary.
func
Unmount
(
point
string
)
error
{
fmt
.
Printf
(
"Unmounting %s...
\n
"
,
point
)
var
cmd
*
exec
.
Cmd
switch
runtime
.
GOOS
{
case
"darwin"
:
cmd
=
exec
.
Command
(
"diskutil"
,
"umount"
,
"force"
,
point
)
case
"linux"
:
cmd
=
exec
.
Command
(
"fusermount"
,
"-u"
,
point
)
default
:
return
fmt
.
Errorf
(
"unmount: unimplemented"
)
}
errc
:=
make
(
chan
error
,
1
)
go
func
()
{
if
err
:=
exec
.
Command
(
"umount"
,
point
)
.
Run
();
err
==
nil
{
errc
<-
err
}
// retry to unmount with the fallback cmd
errc
<-
cmd
.
Run
()
}()
select
{
case
<-
time
.
After
(
1
*
time
.
Second
)
:
return
fmt
.
Errorf
(
"umount timeout"
)
case
err
:=
<-
errc
:
return
err
}
}
fuse/ipns/repub_unix.go
0 → 100644
浏览文件 @
80c64ffa
package
ipns
import
"time"
type
Republisher
struct
{
Timeout
time
.
Duration
Publish
chan
struct
{}
node
*
Node
}
func
NewRepublisher
(
n
*
Node
,
tout
time
.
Duration
)
*
Republisher
{
return
&
Republisher
{
Timeout
:
tout
,
Publish
:
make
(
chan
struct
{}),
node
:
n
,
}
}
func
(
np
*
Republisher
)
Run
()
{
for
_
=
range
np
.
Publish
{
timer
:=
time
.
After
(
np
.
Timeout
)
for
{
select
{
case
<-
timer
:
//Do the publish!
log
.
Info
(
"Publishing Changes!"
)
err
:=
np
.
node
.
updateTree
()
if
err
!=
nil
{
log
.
Critical
(
"updateTree error: %s"
,
err
)
}
goto
done
case
<-
np
.
Publish
:
timer
=
time
.
After
(
np
.
Timeout
)
}
}
done
:
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论