hugo

Fork of github.com/gohugoio/hugo with reverse pagination support

git clone git://git.shimmy1996.com/hugo.git

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 }