mirror of
https://github.com/ipfs/kubo.git
synced 2025-06-17 16:37:59 +08:00
89 lines
2.2 KiB
Go
89 lines
2.2 KiB
Go
package commands
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"runtime"
|
|
"strings"
|
|
|
|
cmds "github.com/ipfs/go-ipfs/commands"
|
|
config "github.com/ipfs/go-ipfs/repo/config"
|
|
fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo"
|
|
)
|
|
|
|
type VersionOutput struct {
|
|
Version string
|
|
Commit string
|
|
Repo string
|
|
System string
|
|
Golang string
|
|
}
|
|
|
|
var VersionCmd = &cmds.Command{
|
|
Helptext: cmds.HelpText{
|
|
Tagline: "Show ipfs version information.",
|
|
ShortDescription: "Returns the current version of ipfs and exits.",
|
|
},
|
|
|
|
Options: []cmds.Option{
|
|
cmds.BoolOption("number", "n", "Only show the version number.").Default(false),
|
|
cmds.BoolOption("commit", "Show the commit hash.").Default(false),
|
|
cmds.BoolOption("repo", "Show repo version.").Default(false),
|
|
cmds.BoolOption("all", "Show all version information").Default(false),
|
|
},
|
|
Run: func(req cmds.Request, res cmds.Response) {
|
|
res.SetOutput(&VersionOutput{
|
|
Version: config.CurrentVersionNumber,
|
|
Commit: config.CurrentCommit,
|
|
Repo: fmt.Sprint(fsrepo.RepoVersion),
|
|
System: runtime.GOARCH + "/" + runtime.GOOS, //TODO: Precise version here
|
|
Golang: runtime.Version(),
|
|
})
|
|
},
|
|
Marshalers: cmds.MarshalerMap{
|
|
cmds.Text: func(res cmds.Response) (io.Reader, error) {
|
|
v := res.Output().(*VersionOutput)
|
|
|
|
repo, _, err := res.Request().Option("repo").Bool()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if repo {
|
|
return strings.NewReader(v.Repo + "\n"), nil
|
|
}
|
|
|
|
commit, _, err := res.Request().Option("commit").Bool()
|
|
commitTxt := ""
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if commit {
|
|
commitTxt = "-" + v.Commit
|
|
}
|
|
|
|
number, _, err := res.Request().Option("number").Bool()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if number {
|
|
return strings.NewReader(fmt.Sprintln(v.Version + commitTxt)), nil
|
|
}
|
|
|
|
all, _, err := res.Request().Option("all").Bool()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if all {
|
|
out := fmt.Sprintf("go-ipfs version: %s-%s\n"+
|
|
"Repo version: %s\nSystem version: %s\nGolang version: %s\n",
|
|
v.Version, v.Commit, v.Repo, v.System, v.Golang)
|
|
return strings.NewReader(out), nil
|
|
}
|
|
|
|
return strings.NewReader(fmt.Sprintf("ipfs version %s%s\n", v.Version, commitTxt)), nil
|
|
},
|
|
},
|
|
Type: VersionOutput{},
|
|
}
|