shithub: hugo

Download patch

ref: fdf1d94ebc7d1aa4855c62237f2edbd4bdade1a7
parent: 1157fef85908ea54883fe0dba6adc4861ba02162
author: Bjørn Erik Pedersen <[email protected]>
date: Mon Apr 9 13:54:43 EDT 2018

commands: Make benchmark non-global

See #4598

--- a/commands/benchmark.go
+++ b/commands/benchmark.go
@@ -23,42 +23,58 @@
 	jww "github.com/spf13/jwalterweatherman"
 )
 
-var (
+var _ cmder = (*benchmarkCmd)(nil)
+
+type cmder interface {
+	getCommand() *cobra.Command
+}
+
+type benchmarkCmd struct {
 	benchmarkTimes int
 	cpuProfileFile string
 	memProfileFile string
-)
 
-var benchmarkCmd = &cobra.Command{
-	Use:   "benchmark",
-	Short: "Benchmark Hugo by building a site a number of times.",
-	Long: `Hugo can build a site many times over and analyze the running process
-creating a benchmark.`,
+	cmd *cobra.Command
 }
 
-func init() {
-	initHugoBuilderFlags(benchmarkCmd)
-	initBenchmarkBuildingFlags(benchmarkCmd)
+func (c *benchmarkCmd) getCommand() *cobra.Command {
+	return c.cmd
+}
 
-	benchmarkCmd.Flags().StringVar(&cpuProfileFile, "cpuprofile", "", "path/filename for the CPU profile file")
-	benchmarkCmd.Flags().StringVar(&memProfileFile, "memprofile", "", "path/filename for the memory profile file")
-	benchmarkCmd.Flags().IntVarP(&benchmarkTimes, "count", "n", 13, "number of times to build the site")
+func newBenchmarkCmd() *benchmarkCmd {
+	cmd := &cobra.Command{
+		Use:   "benchmark",
+		Short: "Benchmark Hugo by building a site a number of times.",
+		Long: `Hugo can build a site many times over and analyze the running process
+creating a benchmark.`,
+	}
 
-	benchmarkCmd.RunE = benchmark
+	initHugoBuilderFlags(cmd)
+	initBenchmarkBuildingFlags(cmd)
+
+	c := &benchmarkCmd{cmd: cmd}
+
+	cmd.Flags().StringVar(&c.cpuProfileFile, "cpuprofile", "", "path/filename for the CPU profile file")
+	cmd.Flags().StringVar(&c.memProfileFile, "memprofile", "", "path/filename for the memory profile file")
+	cmd.Flags().IntVarP(&c.benchmarkTimes, "count", "n", 13, "number of times to build the site")
+
+	cmd.RunE = c.benchmark
+
+	return c
 }
 
-func benchmark(cmd *cobra.Command, args []string) error {
+func (c *benchmarkCmd) benchmark(cmd *cobra.Command, args []string) error {
 	cfgInit := func(c *commandeer) error {
 		return nil
 	}
-	c, err := InitializeConfig(false, cfgInit, benchmarkCmd)
+	comm, err := InitializeConfig(false, cfgInit, c.cmd)
 	if err != nil {
 		return err
 	}
 
 	var memProf *os.File
-	if memProfileFile != "" {
-		memProf, err = os.Create(memProfileFile)
+	if c.memProfileFile != "" {
+		memProf, err = os.Create(c.memProfileFile)
 		if err != nil {
 			return err
 		}
@@ -65,8 +81,8 @@
 	}
 
 	var cpuProf *os.File
-	if cpuProfileFile != "" {
-		cpuProf, err = os.Create(cpuProfileFile)
+	if c.cpuProfileFile != "" {
+		cpuProf, err = os.Create(c.cpuProfileFile)
 		if err != nil {
 			return err
 		}
@@ -81,8 +97,8 @@
 	}
 
 	t := time.Now()
-	for i := 0; i < benchmarkTimes; i++ {
-		if err = c.resetAndBuildSites(); err != nil {
+	for i := 0; i < c.benchmarkTimes; i++ {
+		if err = comm.resetAndBuildSites(); err != nil {
 			return err
 		}
 	}
@@ -102,9 +118,9 @@
 	totalMallocs := memStats.Mallocs - mallocs
 
 	jww.FEEDBACK.Println()
-	jww.FEEDBACK.Printf("Average time per operation: %vms\n", int(1000*totalTime.Seconds()/float64(benchmarkTimes)))
-	jww.FEEDBACK.Printf("Average memory allocated per operation: %vkB\n", totalMemAllocated/uint64(benchmarkTimes)/1024)
-	jww.FEEDBACK.Printf("Average allocations per operation: %v\n", totalMallocs/uint64(benchmarkTimes))
+	jww.FEEDBACK.Printf("Average time per operation: %vms\n", int(1000*totalTime.Seconds()/float64(c.benchmarkTimes)))
+	jww.FEEDBACK.Printf("Average memory allocated per operation: %vkB\n", totalMemAllocated/uint64(c.benchmarkTimes)/1024)
+	jww.FEEDBACK.Printf("Average allocations per operation: %v\n", totalMallocs/uint64(c.benchmarkTimes))
 
 	return nil
 }
--- a/commands/hugo.go
+++ b/commands/hugo.go
@@ -198,7 +198,7 @@
 	HugoCmd.AddCommand(envCmd)
 	HugoCmd.AddCommand(configCmd)
 	HugoCmd.AddCommand(checkCmd)
-	HugoCmd.AddCommand(benchmarkCmd)
+	HugoCmd.AddCommand(newBenchmarkCmd().getCommand())
 	HugoCmd.AddCommand(convertCmd)
 	HugoCmd.AddCommand(newCmd)
 	HugoCmd.AddCommand(listCmd)