diff --git a/commands/env.go b/commands/env.go index 975c3bd0a..65808b1be 100644 --- a/commands/env.go +++ b/commands/env.go @@ -16,6 +16,8 @@ package commands import ( "runtime" + "github.com/gohugoio/hugo/common/hugo" + "github.com/spf13/cobra" jww "github.com/spf13/jwalterweatherman" ) @@ -31,15 +33,28 @@ func newEnvCmd() *envCmd { baseCmd: newBaseCmd(&cobra.Command{ Use: "env", 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 { printHugoVersion() jww.FEEDBACK.Printf("GOOS=%q\n", runtime.GOOS) jww.FEEDBACK.Printf("GOARCH=%q\n", runtime.GOARCH) 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 }, }), } + } diff --git a/common/hugo/hugo.go b/common/hugo/hugo.go index 1aae80776..6e94a8a33 100644 --- a/common/hugo/hugo.go +++ b/common/hugo/hugo.go @@ -18,6 +18,8 @@ import ( "html/template" "os" "path/filepath" + "runtime/debug" + "sort" "strings" "github.com/gohugoio/hugo/hugofs/files" @@ -107,3 +109,30 @@ func GetExecEnviron(workDir string, cfg config.Provider, fs afero.Fs) []string { 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 +}