config.go (4536B)
1 // Copyright 2015 The Hugo Authors. All rights reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 // http://www.apache.org/licenses/LICENSE-2.0
7 //
8 // Unless required by applicable law or agreed to in writing, software
9 // distributed under the License is distributed on an "AS IS" BASIS,
10 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 // See the License for the specific language governing permissions and
12 // limitations under the License.Print the version number of Hug
13
14 package commands
15
16 import (
17 "encoding/json"
18 "fmt"
19 "os"
20 "reflect"
21 "regexp"
22 "sort"
23 "strings"
24 "time"
25
26 "github.com/gohugoio/hugo/common/maps"
27
28 "github.com/gohugoio/hugo/parser"
29 "github.com/gohugoio/hugo/parser/metadecoders"
30
31 "github.com/gohugoio/hugo/modules"
32
33 "github.com/spf13/cobra"
34 )
35
36 var _ cmder = (*configCmd)(nil)
37
38 type configCmd struct {
39 *baseBuilderCmd
40 }
41
42 func (b *commandsBuilder) newConfigCmd() *configCmd {
43 cc := &configCmd{}
44 cmd := &cobra.Command{
45 Use: "config",
46 Short: "Print the site configuration",
47 Long: `Print the site configuration, both default and custom settings.`,
48 RunE: cc.printConfig,
49 }
50
51 printMountsCmd := &cobra.Command{
52 Use: "mounts",
53 Short: "Print the configured file mounts",
54 RunE: cc.printMounts,
55 }
56
57 cmd.AddCommand(printMountsCmd)
58
59 cc.baseBuilderCmd = b.newBuilderBasicCmd(cmd)
60
61 return cc
62 }
63
64 func (c *configCmd) printMounts(cmd *cobra.Command, args []string) error {
65 cfg, err := initializeConfig(true, false, false, &c.hugoBuilderCommon, c, nil)
66 if err != nil {
67 return err
68 }
69
70 allModules := cfg.Cfg.Get("allmodules").(modules.Modules)
71
72 for _, m := range allModules {
73 if err := parser.InterfaceToConfig(&modMounts{m: m, verbose: c.verbose}, metadecoders.JSON, os.Stdout); err != nil {
74 return err
75 }
76 }
77 return nil
78 }
79
80 func (c *configCmd) printConfig(cmd *cobra.Command, args []string) error {
81 cfg, err := initializeConfig(true, false, false, &c.hugoBuilderCommon, c, nil)
82 if err != nil {
83 return err
84 }
85
86 allSettings := cfg.Cfg.Get("").(maps.Params)
87
88 // We need to clean up this, but we store objects in the config that
89 // isn't really interesting to the end user, so filter these.
90 ignoreKeysRe := regexp.MustCompile("client|sorted|filecacheconfigs|allmodules|multilingual")
91
92 separator := ": "
93
94 if len(cfg.configFiles) > 0 && strings.HasSuffix(cfg.configFiles[0], ".toml") {
95 separator = " = "
96 }
97
98 var keys []string
99 for k := range allSettings {
100 if ignoreKeysRe.MatchString(k) {
101 continue
102 }
103 keys = append(keys, k)
104 }
105 sort.Strings(keys)
106 for _, k := range keys {
107 kv := reflect.ValueOf(allSettings[k])
108 if kv.Kind() == reflect.String {
109 fmt.Printf("%s%s\"%+v\"\n", k, separator, allSettings[k])
110 } else {
111 fmt.Printf("%s%s%+v\n", k, separator, allSettings[k])
112 }
113 }
114
115 return nil
116 }
117
118 type modMounts struct {
119 verbose bool
120 m modules.Module
121 }
122
123 type modMount struct {
124 Source string `json:"source"`
125 Target string `json:"target"`
126 Lang string `json:"lang,omitempty"`
127 }
128
129 func (m *modMounts) MarshalJSON() ([]byte, error) {
130 var mounts []modMount
131
132 for _, mount := range m.m.Mounts() {
133 mounts = append(mounts, modMount{
134 Source: mount.Source,
135 Target: mount.Target,
136 Lang: mount.Lang,
137 })
138 }
139
140 var ownerPath string
141 if m.m.Owner() != nil {
142 ownerPath = m.m.Owner().Path()
143 }
144
145 if m.verbose {
146 config := m.m.Config()
147 return json.Marshal(&struct {
148 Path string `json:"path"`
149 Version string `json:"version"`
150 Time time.Time `json:"time"`
151 Owner string `json:"owner"`
152 Dir string `json:"dir"`
153 Meta map[string]any `json:"meta"`
154 HugoVersion modules.HugoVersion `json:"hugoVersion"`
155
156 Mounts []modMount `json:"mounts"`
157 }{
158 Path: m.m.Path(),
159 Version: m.m.Version(),
160 Time: m.m.Time(),
161 Owner: ownerPath,
162 Dir: m.m.Dir(),
163 Meta: config.Params,
164 HugoVersion: config.HugoVersion,
165 Mounts: mounts,
166 })
167 }
168
169 return json.Marshal(&struct {
170 Path string `json:"path"`
171 Version string `json:"version"`
172 Time time.Time `json:"time"`
173 Owner string `json:"owner"`
174 Dir string `json:"dir"`
175 Mounts []modMount `json:"mounts"`
176 }{
177 Path: m.m.Path(),
178 Version: m.m.Version(),
179 Time: m.m.Time(),
180 Owner: ownerPath,
181 Dir: m.m.Dir(),
182 Mounts: mounts,
183 })
184
185 }