Unverified 提交 b50b8f45 作者: Steven Allen 提交者: GitHub

Merge pull request #6115 from ipfs/feat/modversion

feat: add version deps command [modversion]
......@@ -38,6 +38,7 @@ func TestROCommands(t *testing.T) {
"/refs",
"/resolve",
"/version",
"/version/deps",
}
cmdSet := make(map[string]struct{})
......@@ -211,6 +212,7 @@ func TestCommands(t *testing.T) {
"/urlstore",
"/urlstore/add",
"/version",
"/version/deps",
"/cid",
"/cid/format",
"/cid/base32",
......
package commands
import (
"errors"
"fmt"
"io"
"runtime"
"runtime/debug"
version "github.com/ipfs/go-ipfs"
fsrepo "github.com/ipfs/go-ipfs/repo/fsrepo"
"github.com/ipfs/go-ipfs-cmdkit"
cmdkit "github.com/ipfs/go-ipfs-cmdkit"
cmds "github.com/ipfs/go-ipfs-cmds"
)
......@@ -32,6 +34,9 @@ var VersionCmd = &cmds.Command{
Tagline: "Show ipfs version information.",
ShortDescription: "Returns the current version of ipfs and exits.",
},
Subcommands: map[string]*cmds.Command{
"deps": depsVersionCommand,
},
Options: []cmdkit.Option{
cmdkit.BoolOption(versionNumberOptionName, "n", "Only show the version number."),
......@@ -83,3 +88,56 @@ var VersionCmd = &cmds.Command{
},
Type: VersionOutput{},
}
type Dependency struct {
Path string
Version string
ReplacedBy string
Sum string
}
const pkgVersionFmt = "%s@%s"
var depsVersionCommand = &cmds.Command{
Helptext: cmdkit.HelpText{
Tagline: "Shows information about dependencies used for build",
ShortDescription: `
Print out all dependencies and their versions.`,
},
Type: Dependency{},
Run: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {
info, ok := debug.ReadBuildInfo()
if !ok {
return errors.New("no embedded dependency information")
}
toDependency := func(mod *debug.Module) (dep Dependency) {
dep.Path = mod.Path
dep.Version = mod.Version
dep.Sum = mod.Sum
if repl := mod.Replace; repl != nil {
dep.ReplacedBy = fmt.Sprintf(pkgVersionFmt, repl.Path, repl.Version)
}
return
}
if err := res.Emit(toDependency(&info.Main)); err != nil {
return err
}
for _, dep := range info.Deps {
if err := res.Emit(toDependency(dep)); err != nil {
return err
}
}
return nil
},
Encoders: cmds.EncoderMap{
cmds.Text: cmds.MakeTypedEncoder(func(req *cmds.Request, w io.Writer, dep Dependency) error {
fmt.Fprintf(w, pkgVersionFmt, dep.Path, dep.Version)
if dep.ReplacedBy != "" {
fmt.Fprintf(w, " => %s", dep.ReplacedBy)
}
fmt.Fprintf(w, "\n")
return nil
}),
},
}
......@@ -41,6 +41,16 @@ test_expect_success "ipfs version --all has all required fields" '
grep "Golang version" version_all.txt
'
test_expect_success "ipfs version deps succeeds" '
ipfs version deps >deps.txt
'
test_expect_success "ipfs version deps output looks good" '
head -1 deps.txt | grep "go-ipfs@(devel)" &&
[[ $(tail -n +2 deps.txt | egrep -v -c "^[^ @]+@v[^ @]+( => [^ @]+@v[^ @]+)?$") -eq 0 ]] ||
test_fsh cat deps.txt
'
test_expect_success "'ipfs commands' succeeds" '
ipfs commands >commands.txt
'
......@@ -83,6 +93,7 @@ test_expect_success "All commands accept --help" '
test_expect_failure "All ipfs root commands are mentioned in base helptext" '
echo 0 > fail
ipfs --help > help.txt
cut -d" " -f 2 commands.txt | grep -v ipfs | sort -u | \
while read cmd
do
......@@ -113,7 +124,7 @@ test_expect_success "All ipfs commands fail when passed a bad flag" '
echo 0 > fail
while read -r cmd
do
test_must_fail $cmd --badflag >/dev/null ||
test_must_fail $cmd --badflag >/dev/null 2>&1 ||
{ echo "$cmd exit with code 0 when passed --badflag"; echo 1 > fail; }
done <commands.txt
......
......@@ -71,6 +71,16 @@ test_expect_success "ipfs version output looks good" '
test_fsh cat version.txt
'
test_expect_success "ipfs version deps succeeds" '
ipfs version deps >deps.txt
'
test_expect_success "ipfs version deps output looks good" '
head -1 deps.txt | grep "go-ipfs@(devel)" &&
[[ $(tail -n +2 deps.txt | egrep -v -c "^[^ @]+@v[^ @]+( => [^ @]+@v[^ @]+)?$") -eq 0 ]] ||
test_fsh cat deps.txt
'
test_expect_success "ipfs help succeeds" '
ipfs help >help.txt
'
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论