Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
6f750572
提交
6f750572
authored
10月 20, 2014
作者:
Jeromy
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add lock to pinner and rework cli
上级
31b0ff03
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
33 行增加
和
11 行删除
+33
-11
pin.go
cmd/ipfs/pin.go
+22
-11
pin.go
pin/pin.go
+11
-0
没有找到文件。
cmd/ipfs/pin.go
浏览文件 @
6f750572
...
...
@@ -8,36 +8,47 @@ import (
var
cmdIpfsPin
=
&
commander
.
Command
{
UsageLine
:
"pin"
,
Short
:
""
,
Long
:
`ipfs pin [add|rm] - object pinning commands
`
,
Subcommands
:
[]
*
commander
.
Command
{
cmdIpfsSubPin
,
cmdIpfsSubUnpin
,
},
}
var
cmdIpfsSubPin
=
&
commander
.
Command
{
UsageLine
:
"add"
,
Short
:
"pin an ipfs object to local storage."
,
Long
:
`ipfs pin <ipfs-path> - pin ipfs object to local storage.
Long
:
`ipfs pin
add
<ipfs-path> - pin ipfs object to local storage.
Retrieves the object named by <ipfs-path> and stores it locally
on disk.
`
,
Run
:
pinCmd
,
Run
:
pin
Sub
Cmd
,
Flag
:
*
flag
.
NewFlagSet
(
"ipfs-pin"
,
flag
.
ExitOnError
),
}
var
pinCmd
=
makeCommand
(
command
{
var
pin
Sub
Cmd
=
makeCommand
(
command
{
name
:
"pin"
,
args
:
1
,
flags
:
[]
string
{
"r"
,
"d"
},
cmdFn
:
commands
.
Pin
,
})
var
cmdIpfsUnpin
=
&
commander
.
Command
{
UsageLine
:
"
unpin
"
,
var
cmdIpfs
Sub
Unpin
=
&
commander
.
Command
{
UsageLine
:
"
rm
"
,
Short
:
"unpin an ipfs object from local storage."
,
Long
:
`ipfs
unpin
<ipfs-path> - unpin ipfs object from local storage.
Long
:
`ipfs
pin rm
<ipfs-path> - unpin ipfs object from local storage.
Removes the pin from the given object allowing it to be garbage
collected if needed.
`
,
Run
:
unpinCmd
,
Run
:
unpin
Sub
Cmd
,
Flag
:
*
flag
.
NewFlagSet
(
"ipfs-unpin"
,
flag
.
ExitOnError
),
}
var
unpinCmd
=
makeCommand
(
command
{
var
unpin
Sub
Cmd
=
makeCommand
(
command
{
name
:
"unpin"
,
args
:
1
,
flags
:
[]
string
{
"r"
,
"d"
},
...
...
@@ -45,7 +56,7 @@ var unpinCmd = makeCommand(command{
})
func
init
()
{
cmdIpfsPin
.
Flag
.
Bool
(
"r"
,
false
,
"pin objects recursively"
)
cmdIpfsPin
.
Flag
.
Int
(
"d"
,
1
,
"recursive depth"
)
cmdIpfsUnpin
.
Flag
.
Bool
(
"r"
,
false
,
"unpin objects recursively"
)
cmdIpfs
Sub
Pin
.
Flag
.
Bool
(
"r"
,
false
,
"pin objects recursively"
)
cmdIpfs
Sub
Pin
.
Flag
.
Int
(
"d"
,
1
,
"recursive depth"
)
cmdIpfs
Sub
Unpin
.
Flag
.
Bool
(
"r"
,
false
,
"unpin objects recursively"
)
}
pin/pin.go
浏览文件 @
6f750572
...
...
@@ -3,6 +3,8 @@ package pin
import
(
//ds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go"
"sync"
ds
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go"
nsds
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go/namespace"
"github.com/jbenet/go-ipfs/blocks/set"
...
...
@@ -22,6 +24,7 @@ type Pinner interface {
}
type
pinner
struct
{
lock
sync
.
RWMutex
recursePin
set
.
BlockSet
directPin
set
.
BlockSet
indirPin
*
indirectPin
...
...
@@ -49,6 +52,8 @@ func NewPinner(dstore ds.Datastore, serv *mdag.DAGService) Pinner {
}
func
(
p
*
pinner
)
Pin
(
node
*
mdag
.
Node
,
recurse
bool
)
error
{
p
.
lock
.
Lock
()
defer
p
.
lock
.
Unlock
()
k
,
err
:=
node
.
Key
()
if
err
!=
nil
{
return
err
...
...
@@ -72,6 +77,8 @@ func (p *pinner) Pin(node *mdag.Node, recurse bool) error {
}
func
(
p
*
pinner
)
Unpin
(
k
util
.
Key
,
recurse
bool
)
error
{
p
.
lock
.
Lock
()
defer
p
.
lock
.
Unlock
()
if
recurse
{
p
.
recursePin
.
RemoveBlock
(
k
)
node
,
err
:=
p
.
dserv
.
Get
(
k
)
...
...
@@ -134,6 +141,8 @@ func (p *pinner) pinLinks(node *mdag.Node) error {
}
func
(
p
*
pinner
)
IsPinned
(
key
util
.
Key
)
bool
{
p
.
lock
.
RLock
()
defer
p
.
lock
.
RUnlock
()
return
p
.
recursePin
.
HasKey
(
key
)
||
p
.
directPin
.
HasKey
(
key
)
||
p
.
indirPin
.
HasKey
(
key
)
...
...
@@ -164,6 +173,8 @@ func LoadPinner(d ds.Datastore, dserv *mdag.DAGService) (Pinner, error) {
}
func
(
p
*
pinner
)
Flush
()
error
{
p
.
lock
.
RLock
()
defer
p
.
lock
.
RUnlock
()
recurse
:=
p
.
recursePin
.
GetKeys
()
err
:=
p
.
dstore
.
Put
(
recursePinDatastoreKey
,
recurse
)
if
err
!=
nil
{
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论