Add complete dependency list in "hugo env -v"

Fixes #8400
This commit is contained in:
Bjørn Erik Pedersen 2021-04-09 08:07:22 +02:00
parent 7fdd2b95e2
commit 9b83f45b6d
No known key found for this signature in database
GPG key ID: 330E6E2BD4859D8F
2 changed files with 45 additions and 1 deletions

View file

@ -16,6 +16,8 @@ package commands
import ( import (
"runtime" "runtime"
"github.com/gohugoio/hugo/common/hugo"
"github.com/spf13/cobra" "github.com/spf13/cobra"
jww "github.com/spf13/jwalterweatherman" jww "github.com/spf13/jwalterweatherman"
) )
@ -31,15 +33,28 @@ func newEnvCmd() *envCmd {
baseCmd: newBaseCmd(&cobra.Command{ baseCmd: newBaseCmd(&cobra.Command{
Use: "env", Use: "env",
Short: "Print Hugo version and environment info", Short: "Print Hugo version and environment info",
Long: `Print Hugo version and environment info. This is useful in Hugo bug reports.`, Long: `Print Hugo version and environment info. This is useful in Hugo bug reports.
If you add the -v flag, you will get a full dependency list.
`,
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
printHugoVersion() printHugoVersion()
jww.FEEDBACK.Printf("GOOS=%q\n", runtime.GOOS) jww.FEEDBACK.Printf("GOOS=%q\n", runtime.GOOS)
jww.FEEDBACK.Printf("GOARCH=%q\n", runtime.GOARCH) jww.FEEDBACK.Printf("GOARCH=%q\n", runtime.GOARCH)
jww.FEEDBACK.Printf("GOVERSION=%q\n", runtime.Version()) jww.FEEDBACK.Printf("GOVERSION=%q\n", runtime.Version())
isVerbose, _ := cmd.Flags().GetBool("verbose")
if isVerbose {
deps := hugo.GetDependencyList()
for _, dep := range deps {
jww.FEEDBACK.Printf("%s\n", dep)
}
}
return nil return nil
}, },
}), }),
} }
} }

View file

@ -18,6 +18,8 @@ import (
"html/template" "html/template"
"os" "os"
"path/filepath" "path/filepath"
"runtime/debug"
"sort"
"strings" "strings"
"github.com/gohugoio/hugo/hugofs/files" "github.com/gohugoio/hugo/hugofs/files"
@ -107,3 +109,30 @@ func GetExecEnviron(workDir string, cfg config.Provider, fs afero.Fs) []string {
return env return env
} }
// GetDependencyList returns a sorted dependency list on the format package="version".
// It includes both Go dependencies and (a manually maintained) list of C(++) dependencies.
func GetDependencyList() []string {
var deps []string
formatDep := func(path, version string) string {
return fmt.Sprintf("%s=%q", path, version)
}
if IsExtended {
deps = append(deps, formatDep("github.com/sass/libsass", "3.6.4"))
}
bi, ok := debug.ReadBuildInfo()
if !ok {
return deps
}
for _, dep := range bi.Deps {
deps = append(deps, formatDep(dep.Path, dep.Version))
}
sort.Strings(deps)
return deps
}