feat(cli): add basis for new "emacs-builder" CLI tool written in Go

This will eventually replace the build-emacs-for-macos script that's
written in Ruby. The migration of functionality will happen bit by bit
over time.
This commit is contained in:
2021-05-23 18:27:13 +01:00
parent 3e1eb01e24
commit 8d87c01db7
9 changed files with 523 additions and 0 deletions

49
pkg/cli/options.go Normal file
View File

@@ -0,0 +1,49 @@
package cli
import (
"fmt"
"os"
"sync"
"time"
"github.com/hashicorp/go-hclog"
cli2 "github.com/urfave/cli/v2"
)
type Options struct {
quiet bool
}
func actionWrapper(
f func(*cli2.Context, *Options) error,
) func(*cli2.Context) error {
return func(c *cli2.Context) error {
opts := &Options{
quiet: c.Bool("quiet"),
}
levelStr := c.String("log-level")
level := hclog.LevelFromString(levelStr)
if level == hclog.NoLevel {
return fmt.Errorf("invalid log level \"%s\"", levelStr)
}
// Prevent things from logging if they weren't explicitly given a
// logger.
hclog.SetDefault(hclog.NewNullLogger())
// Create custom logger.
logr := hclog.New(&hclog.LoggerOptions{
Level: level,
Output: os.Stderr,
Mutex: &sync.Mutex{},
TimeFormat: time.RFC3339,
Color: hclog.ColorOff,
})
ctx := hclog.WithContext(c.Context, logr)
c.Context = ctx
return f(c, opts)
}
}