Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
36dfb7bc
提交
36dfb7bc
authored
11月 07, 2014
作者:
Matt Bell
提交者:
Juan Batiz-Benet
11月 14, 2014
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
core/commands2: Added 'update' command
上级
3df5202f
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
156 行增加
和
0 行删除
+156
-0
root.go
core/commands2/root.go
+1
-0
update.go
core/commands2/update.go
+155
-0
没有找到文件。
core/commands2/root.go
浏览文件 @
36dfb7bc
...
...
@@ -70,6 +70,7 @@ var rootSubcommands = map[string]*cmds.Command{
"bootstrap"
:
bootstrapCmd
,
"mount"
:
mountCmd
,
"block"
:
blockCmd
,
"update"
:
updateCmd
,
// test subcommands
// TODO: remove these when we don't need them anymore
...
...
core/commands2/update.go
0 → 100644
浏览文件 @
36dfb7bc
package
commands
import
(
"errors"
"fmt"
cmds
"github.com/jbenet/go-ipfs/commands"
"github.com/jbenet/go-ipfs/core"
"github.com/jbenet/go-ipfs/updates"
)
type
UpdateOutput
struct
{
OldVersion
string
NewVersion
string
}
var
updateCmd
=
&
cmds
.
Command
{
Help
:
`ipfs update - check for updates and apply them
ipfs update - apply
ipfs update check - just check
ipfs update log - list the changelogs
ipfs update is a utility command used to check for updates and apply them.
`
,
Run
:
func
(
res
cmds
.
Response
,
req
cmds
.
Request
)
{
n
:=
req
.
Context
()
.
Node
output
,
err
:=
updateApply
(
n
)
if
err
!=
nil
{
res
.
SetError
(
err
,
cmds
.
ErrNormal
)
return
}
res
.
SetOutput
(
output
)
},
Type
:
&
UpdateOutput
{},
Subcommands
:
map
[
string
]
*
cmds
.
Command
{
"check"
:
updateCheckCmd
,
"log"
:
updateLogCmd
,
},
Marshallers
:
map
[
cmds
.
EncodingType
]
cmds
.
Marshaller
{
cmds
.
Text
:
func
(
res
cmds
.
Response
)
([]
byte
,
error
)
{
v
:=
res
.
Output
()
.
(
*
UpdateOutput
)
s
:=
""
if
v
.
NewVersion
!=
v
.
OldVersion
{
s
=
fmt
.
Sprintf
(
"Successfully updated to IPFS version '%s' (from '%s')"
,
v
.
NewVersion
,
v
.
OldVersion
)
}
else
{
s
=
fmt
.
Sprintf
(
"Already updated to latest version ('%s')"
,
v
.
NewVersion
)
}
return
[]
byte
(
s
),
nil
},
},
}
var
updateCheckCmd
=
&
cmds
.
Command
{
Help
:
`ipfs update check <key>`
,
Run
:
func
(
res
cmds
.
Response
,
req
cmds
.
Request
)
{
n
:=
req
.
Context
()
.
Node
output
,
err
:=
updateCheck
(
n
)
if
err
!=
nil
{
res
.
SetError
(
err
,
cmds
.
ErrNormal
)
return
}
res
.
SetOutput
(
output
)
},
Type
:
&
UpdateOutput
{},
Marshallers
:
map
[
cmds
.
EncodingType
]
cmds
.
Marshaller
{
cmds
.
Text
:
func
(
res
cmds
.
Response
)
([]
byte
,
error
)
{
v
:=
res
.
Output
()
.
(
*
UpdateOutput
)
s
:=
""
if
v
.
NewVersion
!=
v
.
OldVersion
{
s
=
fmt
.
Sprintf
(
"A new version of IPFS is available ('%s', currently running '%s')"
,
v
.
NewVersion
,
v
.
OldVersion
)
}
else
{
s
=
fmt
.
Sprintf
(
"Already updated to latest version ('%s')"
,
v
.
NewVersion
)
}
return
[]
byte
(
s
),
nil
},
},
}
var
updateLogCmd
=
&
cmds
.
Command
{
Help
:
`ipfs update log - list the last versions and their changelog`
,
Run
:
func
(
res
cmds
.
Response
,
req
cmds
.
Request
)
{
n
:=
req
.
Context
()
.
Node
output
,
err
:=
updateLog
(
n
)
if
err
!=
nil
{
res
.
SetError
(
err
,
cmds
.
ErrNormal
)
return
}
res
.
SetOutput
(
output
)
},
}
// updateApply applies an update of the ipfs binary and shuts down the node if successful
func
updateApply
(
n
*
core
.
IpfsNode
)
(
*
UpdateOutput
,
error
)
{
// TODO: 'force bool' param that stops the daemon (if running) before update
output
:=
&
UpdateOutput
{
OldVersion
:
updates
.
Version
,
}
u
,
err
:=
updates
.
CheckForUpdate
()
if
err
!=
nil
{
return
nil
,
err
}
if
u
==
nil
{
output
.
NewVersion
=
updates
.
Version
return
output
,
nil
}
output
.
NewVersion
=
u
.
Version
if
n
.
OnlineMode
()
{
return
nil
,
errors
.
New
(
`You must stop the IPFS daemon before updating.`
)
}
if
err
=
updates
.
Apply
(
u
);
err
!=
nil
{
return
nil
,
err
}
return
output
,
nil
}
// updateCheck checks wether there is an update available
func
updateCheck
(
n
*
core
.
IpfsNode
)
(
*
UpdateOutput
,
error
)
{
output
:=
&
UpdateOutput
{
OldVersion
:
updates
.
Version
,
}
u
,
err
:=
updates
.
CheckForUpdate
()
if
err
!=
nil
{
return
nil
,
err
}
if
u
==
nil
{
output
.
NewVersion
=
updates
.
Version
return
output
,
nil
}
output
.
NewVersion
=
u
.
Version
return
output
,
nil
}
// updateLog lists the version available online
func
updateLog
(
n
*
core
.
IpfsNode
)
(
interface
{},
error
)
{
return
nil
,
errors
.
New
(
"Not yet implemented"
)
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论