Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
7d18f748
提交
7d18f748
authored
6月 21, 2016
作者:
Jeromy Johnson
提交者:
GitHub
6月 21, 2016
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #2880 from yuvallanger/swarm-filters-save-config
Swarm filters save config (fix #2878)
上级
c6443fd9
d608f329
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
174 行增加
和
0 行删除
+174
-0
swarm.go
core/commands/swarm.go
+138
-0
t0141-addfilter.sh
test/sharness/t0141-addfilter.sh
+36
-0
没有找到文件。
core/commands/swarm.go
浏览文件 @
7d18f748
...
...
@@ -9,6 +9,9 @@ import (
"sort"
cmds
"github.com/ipfs/go-ipfs/commands"
repo
"github.com/ipfs/go-ipfs/repo"
config
"github.com/ipfs/go-ipfs/repo/config"
"github.com/ipfs/go-ipfs/repo/fsrepo"
iaddr
"github.com/ipfs/go-ipfs/thirdparty/ipfsaddr"
pstore
"gx/ipfs/QmXHUpFsnpCmanRnacqYkFoLoFfEq5yS2nUgGkAjJ1Nj9j/go-libp2p-peerstore"
swarm
"gx/ipfs/QmdBpVuSYuTGDA8Kn66CbKvEThXqKUh2nTANZEhzSxqrmJ/go-libp2p/p2p/net/swarm"
...
...
@@ -458,6 +461,23 @@ add your filters to the ipfs config file.
return
}
if
len
(
req
.
Arguments
())
==
0
{
res
.
SetError
(
errors
.
New
(
"no filters to add"
),
cmds
.
ErrClient
)
return
}
r
,
err
:=
fsrepo
.
Open
(
req
.
InvocContext
()
.
ConfigRoot
)
if
err
!=
nil
{
res
.
SetError
(
err
,
cmds
.
ErrNormal
)
return
}
defer
r
.
Close
()
cfg
,
err
:=
r
.
Config
()
if
err
!=
nil
{
res
.
SetError
(
err
,
cmds
.
ErrNormal
)
return
}
for
_
,
arg
:=
range
req
.
Arguments
()
{
mask
,
err
:=
mafilter
.
NewMask
(
arg
)
if
err
!=
nil
{
...
...
@@ -467,7 +487,20 @@ add your filters to the ipfs config file.
snet
.
Filters
.
AddDialFilter
(
mask
)
}
added
,
err
:=
filtersAdd
(
r
,
cfg
,
req
.
Arguments
())
if
err
!=
nil
{
res
.
SetError
(
err
,
cmds
.
ErrNormal
)
return
}
res
.
SetOutput
(
&
stringList
{
added
})
},
Marshalers
:
cmds
.
MarshalerMap
{
cmds
.
Text
:
stringListMarshaler
,
},
Type
:
stringList
{},
}
var
swarmFiltersRmCmd
=
&
cmds
.
Command
{
...
...
@@ -500,11 +533,32 @@ remove your filters from the ipfs config file.
return
}
r
,
err
:=
fsrepo
.
Open
(
req
.
InvocContext
()
.
ConfigRoot
)
if
err
!=
nil
{
res
.
SetError
(
err
,
cmds
.
ErrNormal
)
return
}
defer
r
.
Close
()
cfg
,
err
:=
r
.
Config
()
if
err
!=
nil
{
res
.
SetError
(
err
,
cmds
.
ErrNormal
)
return
}
if
req
.
Arguments
()[
0
]
==
"all"
||
req
.
Arguments
()[
0
]
==
"*"
{
fs
:=
snet
.
Filters
.
Filters
()
for
_
,
f
:=
range
fs
{
snet
.
Filters
.
Remove
(
f
)
}
removed
,
err
:=
filtersRemoveAll
(
r
,
cfg
)
if
err
!=
nil
{
res
.
SetError
(
err
,
cmds
.
ErrNormal
)
return
}
res
.
SetOutput
(
&
stringList
{
removed
})
return
}
...
...
@@ -517,5 +571,89 @@ remove your filters from the ipfs config file.
snet
.
Filters
.
Remove
(
mask
)
}
removed
,
err
:=
filtersRemove
(
r
,
cfg
,
req
.
Arguments
())
res
.
SetOutput
(
&
stringList
{
removed
})
},
Marshalers
:
cmds
.
MarshalerMap
{
cmds
.
Text
:
stringListMarshaler
,
},
Type
:
stringList
{},
}
func
filtersAdd
(
r
repo
.
Repo
,
cfg
*
config
.
Config
,
filters
[]
string
)
([]
string
,
error
)
{
addedMap
:=
map
[
string
]
struct
{}{}
addedList
:=
make
([]
string
,
0
,
len
(
filters
))
// re-add cfg swarm filters to rm dupes
oldFilters
:=
cfg
.
Swarm
.
AddrFilters
cfg
.
Swarm
.
AddrFilters
=
nil
// add new filters
for
_
,
filter
:=
range
filters
{
if
_
,
found
:=
addedMap
[
filter
];
found
{
continue
}
cfg
.
Swarm
.
AddrFilters
=
append
(
cfg
.
Swarm
.
AddrFilters
,
filter
)
addedList
=
append
(
addedList
,
filter
)
addedMap
[
filter
]
=
struct
{}{}
}
// add back original filters. in this order so that we output them.
for
_
,
filter
:=
range
oldFilters
{
if
_
,
found
:=
addedMap
[
filter
];
found
{
continue
}
cfg
.
Swarm
.
AddrFilters
=
append
(
cfg
.
Swarm
.
AddrFilters
,
filter
)
addedMap
[
filter
]
=
struct
{}{}
}
if
err
:=
r
.
SetConfig
(
cfg
);
err
!=
nil
{
return
nil
,
err
}
return
addedList
,
nil
}
func
filtersRemoveAll
(
r
repo
.
Repo
,
cfg
*
config
.
Config
)
([]
string
,
error
)
{
removed
:=
cfg
.
Swarm
.
AddrFilters
cfg
.
Swarm
.
AddrFilters
=
nil
if
err
:=
r
.
SetConfig
(
cfg
);
err
!=
nil
{
return
nil
,
err
}
return
removed
,
nil
}
func
filtersRemove
(
r
repo
.
Repo
,
cfg
*
config
.
Config
,
toRemoveFilters
[]
string
)
([]
string
,
error
)
{
removed
:=
make
([]
string
,
0
,
len
(
toRemoveFilters
))
keep
:=
make
([]
string
,
0
,
len
(
cfg
.
Swarm
.
AddrFilters
))
oldFilters
:=
cfg
.
Swarm
.
AddrFilters
for
_
,
oldFilter
:=
range
oldFilters
{
found
:=
false
for
_
,
toRemoveFilter
:=
range
toRemoveFilters
{
if
oldFilter
==
toRemoveFilter
{
found
=
true
removed
=
append
(
removed
,
toRemoveFilter
)
break
}
}
if
!
found
{
keep
=
append
(
keep
,
oldFilter
)
}
}
cfg
.
Swarm
.
AddrFilters
=
keep
if
err
:=
r
.
SetConfig
(
cfg
);
err
!=
nil
{
return
nil
,
err
}
return
removed
,
nil
}
test/sharness/t0141-addfilter.sh
浏览文件 @
7d18f748
...
...
@@ -31,38 +31,74 @@ test_swarm_filter_cmd() {
'
}
test_config_swarm_addrfilters_cmd
()
{
printf
""
>
list_expected
for
AF
in
"
$@
"
do
echo
"
$AF
"
>>
list_expected
done
test_expect_success
"'ipfs config Swarm.AddrFilters' succeeds"
'
ipfs config Swarm.AddrFilters > list_actual
'
printf
""
>
list_actual_cleaned
if
[
"
$(
cat
list_actual
)
"
!=
"[]"
-a
"
$(
cat
list_actual
)
"
!=
"null"
]
;
then
grep
-v
"^
\]
"
list_actual |
grep
-v
"^
\[
"
|
tr
-d
'" ,'
>
list_actual_cleaned
fi
test_expect_success
"'ipfs config Swarm.AddrFilters' output looks good"
'
test_sort_cmp list_expected list_actual_cleaned
'
}
test_swarm_filters
()
{
# expect first address from config
test_swarm_filter_cmd
$AF1
$AF4
test_config_swarm_addrfilters_cmd
$AF1
$AF4
ipfs swarm filters rm all
test_swarm_filter_cmd
test_config_swarm_addrfilters_cmd
test_expect_success
"'ipfs swarm filter add' succeeds"
'
ipfs swarm filters add $AF1 $AF2 $AF3
'
test_swarm_filter_cmd
$AF1
$AF2
$AF3
test_config_swarm_addrfilters_cmd
$AF1
$AF2
$AF3
test_expect_success
"'ipfs swarm filter rm' succeeds"
'
ipfs swarm filters rm $AF2 $AF3
'
test_swarm_filter_cmd
$AF1
test_config_swarm_addrfilters_cmd
$AF1
test_expect_success
"'ipfs swarm filter add' succeeds"
'
ipfs swarm filters add $AF4 $AF2
'
test_swarm_filter_cmd
$AF1
$AF2
$AF4
test_config_swarm_addrfilters_cmd
$AF1
$AF2
$AF4
test_expect_success
"'ipfs swarm filter rm' succeeds"
'
ipfs swarm filters rm $AF1 $AF2 $AF4
'
test_swarm_filter_cmd
test_config_swarm_addrfilters_cmd
}
test_expect_success
"init without any filters"
'
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论