From 0450d69fc6ec2e3369d106547b6e49c539081cdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Mon, 30 Sep 2024 09:11:24 +0200 Subject: [PATCH] commands: Add "hugo build" as an alias for "hugo" Closes #11391 --- commands/commandeer.go | 16 ++++-- commands/commands.go | 33 ++++++++++++ docs/content/en/commands/hugo.md | 1 + docs/content/en/commands/hugo_build.md | 74 ++++++++++++++++++++++++++ testscripts/commands/gen.txt | 2 +- testscripts/commands/hugo_build.txt | 20 +++++++ 6 files changed, 142 insertions(+), 4 deletions(-) create mode 100644 docs/content/en/commands/hugo_build.md create mode 100644 testscripts/commands/hugo_build.txt diff --git a/commands/commandeer.go b/commands/commandeer.go index e8cde2114..841e8d81c 100644 --- a/commands/commandeer.go +++ b/commands/commandeer.go @@ -499,16 +499,26 @@ func (r *rootCommand) IsTestRun() bool { } func (r *rootCommand) Init(cd *simplecobra.Commandeer) error { + return r.initRootCommand("", cd) +} + +func (r *rootCommand) initRootCommand(subCommandName string, cd *simplecobra.Commandeer) error { cmd := cd.CobraCommand - cmd.Use = "hugo [flags]" - cmd.Short = "hugo builds your site" - cmd.Long = `hugo is the main command, used to build your Hugo site. + commandName := "hugo" + if subCommandName != "" { + commandName = subCommandName + } + cmd.Use = fmt.Sprintf("%s [flags]", commandName) + cmd.Short = fmt.Sprintf("%s builds your site", commandName) + cmd.Long = `COMMAND_NAME is the main command, used to build your Hugo site. Hugo is a Fast and Flexible Static Site Generator built with love by spf13 and friends in Go. Complete documentation is available at https://gohugo.io/.` + cmd.Long = strings.ReplaceAll(cmd.Long, "COMMAND_NAME", commandName) + // Configure persistent flags cmd.PersistentFlags().StringVarP(&r.source, "source", "s", "", "filesystem path to read files relative from") _ = cmd.MarkFlagDirname("source") diff --git a/commands/commands.go b/commands/commands.go index e21d743ab..10ab106e2 100644 --- a/commands/commands.go +++ b/commands/commands.go @@ -14,6 +14,8 @@ package commands import ( + "context" + "github.com/bep/simplecobra" ) @@ -21,6 +23,7 @@ import ( func newExec() (*simplecobra.Exec, error) { rootCmd := &rootCommand{ commands: []simplecobra.Commander{ + newHugoBuildCmd(), newVersionCmd(), newEnvCommand(), newServerCommand(), @@ -38,3 +41,33 @@ func newExec() (*simplecobra.Exec, error) { return simplecobra.New(rootCmd) } + +func newHugoBuildCmd() simplecobra.Commander { + return &hugoBuildCommand{} +} + +// hugoBuildCommand just delegates to the rootCommand. +type hugoBuildCommand struct { + rootCmd *rootCommand +} + +func (c *hugoBuildCommand) Commands() []simplecobra.Commander { + return nil +} + +func (c *hugoBuildCommand) Name() string { + return "build" +} + +func (c *hugoBuildCommand) Init(cd *simplecobra.Commandeer) error { + c.rootCmd = cd.Root.Command.(*rootCommand) + return c.rootCmd.initRootCommand("build", cd) +} + +func (c *hugoBuildCommand) PreRun(cd, runner *simplecobra.Commandeer) error { + return c.rootCmd.PreRun(cd, runner) +} + +func (c *hugoBuildCommand) Run(ctx context.Context, cd *simplecobra.Commandeer, args []string) error { + return c.rootCmd.Run(ctx, cd, args) +} diff --git a/docs/content/en/commands/hugo.md b/docs/content/en/commands/hugo.md index cfbe66053..badd6d7ea 100644 --- a/docs/content/en/commands/hugo.md +++ b/docs/content/en/commands/hugo.md @@ -70,6 +70,7 @@ hugo [flags] ### SEE ALSO +* [hugo build](/commands/hugo_build/) - build builds your site * [hugo completion](/commands/hugo_completion/) - Generate the autocompletion script for the specified shell * [hugo config](/commands/hugo_config/) - Print the site configuration * [hugo convert](/commands/hugo_convert/) - Convert your content to different formats diff --git a/docs/content/en/commands/hugo_build.md b/docs/content/en/commands/hugo_build.md new file mode 100644 index 000000000..72686cb9b --- /dev/null +++ b/docs/content/en/commands/hugo_build.md @@ -0,0 +1,74 @@ +--- +title: "hugo build" +slug: hugo_build +url: /commands/hugo_build/ +--- +## hugo build + +build builds your site + +### Synopsis + +build is the main command, used to build your Hugo site. + +Hugo is a Fast and Flexible Static Site Generator +built with love by spf13 and friends in Go. + +Complete documentation is available at https://gohugo.io/. + +``` +hugo build [flags] +``` + +### Options + +``` + -b, --baseURL string hostname (and path) to the root, e.g. https://spf13.com/ + -D, --buildDrafts include content marked as draft + -E, --buildExpired include expired content + -F, --buildFuture include content with publishdate in the future + --cacheDir string filesystem path to cache directory + --cleanDestinationDir remove files from destination not found in static directories + --clock string set the clock used by Hugo, e.g. --clock 2021-11-06T22:30:00.00+09:00 + --config string config file (default is hugo.yaml|json|toml) + --configDir string config dir (default "config") + -c, --contentDir string filesystem path to content directory + --debug debug output + -d, --destination string filesystem path to write files to + --disableKinds strings disable different kind of pages (home, RSS etc.) + --enableGitInfo add Git revision, date, author, and CODEOWNERS info to the pages + -e, --environment string build environment + --forceSyncStatic copy all files when static is changed. + --gc enable to run some cleanup tasks (remove unused cache files) after the build + -h, --help help for build + --ignoreCache ignores the cache directory + --ignoreVendorPaths string ignores any _vendor for module paths matching the given Glob pattern + -l, --layoutDir string filesystem path to layout directory + --logLevel string log level (debug|info|warn|error) + --minify minify any supported output format (HTML, XML etc.) + --noBuildLock don't create .hugo_build.lock file + --noChmod don't sync permission mode of files + --noTimes don't sync modification time of files + --panicOnWarning panic on first WARNING log + --poll string set this to a poll interval, e.g --poll 700ms, to use a poll based approach to watch for file system changes + --printI18nWarnings print missing translations + --printMemoryUsage print memory usage to screen at intervals + --printPathWarnings print warnings on duplicate target paths etc. + --printUnusedTemplates print warnings on unused templates. + --quiet build in quiet mode + --renderSegments strings named segments to render (configured in the segments config) + -M, --renderToMemory render to memory (mostly useful when running the server) + -s, --source string filesystem path to read files relative from + --templateMetrics display metrics about template executions + --templateMetricsHints calculate some improvement hints when combined with --templateMetrics + -t, --theme strings themes to use (located in /themes/THEMENAME/) + --themesDir string filesystem path to themes directory + --trace file write trace to file (not useful in general) + -v, --verbose verbose output + -w, --watch watch filesystem for changes and recreate as needed +``` + +### SEE ALSO + +* [hugo](/commands/hugo/) - hugo builds your site + diff --git a/testscripts/commands/gen.txt b/testscripts/commands/gen.txt index 22a936b41..16db9fe4a 100644 --- a/testscripts/commands/gen.txt +++ b/testscripts/commands/gen.txt @@ -1,6 +1,6 @@ # Test the gen commands. # Note that adding new commands will require updating the NUM_COMMANDS value. -env NUM_COMMANDS=43 +env NUM_COMMANDS=44 hugo gen -h stdout 'A collection of several useful generators\.' diff --git a/testscripts/commands/hugo_build.txt b/testscripts/commands/hugo_build.txt new file mode 100644 index 000000000..0bcbcba7a --- /dev/null +++ b/testscripts/commands/hugo_build.txt @@ -0,0 +1,20 @@ +# Test the hugo build command (alias for hugo) + +hugo build +stdout 'Pages.*|1' +stdout 'Total in' +checkfile public/index.html +checkfile public/p1/index.html +grep 'IsServer: false;IsProduction: true' public/index.html + +-- hugo.toml -- +baseURL = "http://example.org/" +disableKinds = ["RSS", "sitemap", "robotsTXT", "404", "taxonomy", "term"] +-- layouts/index.html -- +Home|IsServer: {{ hugo.IsServer }};IsProduction: {{ hugo.IsProduction }}| +-- layouts/_default/single.html -- +Title: {{ .Title }} +-- content/p1.md -- +--- +title: "P1" +---