mirror of
https://github.com/neilotoole/sq.git
synced 2024-12-18 21:52:28 +03:00
Switched more flags over to options mechanism (#394)
* Switched more flags over to options mechanism * flag.IngestHeader * flag.CSVEmptyAsNull and flag.CSVDelim * flag.PingTimeout * more flags * flag.LogEnabled * logging flags
This commit is contained in:
parent
1adabaa5ed
commit
fabc46c758
@ -20,6 +20,7 @@ import (
|
|||||||
"github.com/neilotoole/sq/libsq/core/lg"
|
"github.com/neilotoole/sq/libsq/core/lg"
|
||||||
"github.com/neilotoole/sq/libsq/core/lg/lga"
|
"github.com/neilotoole/sq/libsq/core/lg/lga"
|
||||||
"github.com/neilotoole/sq/libsq/core/stringz"
|
"github.com/neilotoole/sq/libsq/core/stringz"
|
||||||
|
"github.com/neilotoole/sq/libsq/driver"
|
||||||
"github.com/neilotoole/sq/libsq/source"
|
"github.com/neilotoole/sq/libsq/source"
|
||||||
"github.com/neilotoole/sq/libsq/source/drivertype"
|
"github.com/neilotoole/sq/libsq/source/drivertype"
|
||||||
"github.com/neilotoole/sq/libsq/source/location"
|
"github.com/neilotoole/sq/libsq/source/location"
|
||||||
@ -159,7 +160,7 @@ More examples:
|
|||||||
cmdMarkRequiresConfigLock(cmd)
|
cmdMarkRequiresConfigLock(cmd)
|
||||||
addTextFormatFlags(cmd)
|
addTextFormatFlags(cmd)
|
||||||
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
||||||
cmd.Flags().BoolP(flag.Compact, flag.CompactShort, false, flag.CompactUsage)
|
addOptionFlag(cmd.Flags(), OptCompact)
|
||||||
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
||||||
|
|
||||||
cmd.Flags().StringP(flag.AddDriver, flag.AddDriverShort, "", flag.AddDriverUsage)
|
cmd.Flags().StringP(flag.AddDriver, flag.AddDriverShort, "", flag.AddDriverUsage)
|
||||||
@ -170,11 +171,13 @@ More examples:
|
|||||||
cmd.Flags().Bool(flag.SkipVerify, false, flag.SkipVerifyUsage)
|
cmd.Flags().Bool(flag.SkipVerify, false, flag.SkipVerifyUsage)
|
||||||
cmd.Flags().BoolP(flag.AddActive, flag.AddActiveShort, false, flag.AddActiveUsage)
|
cmd.Flags().BoolP(flag.AddActive, flag.AddActiveShort, false, flag.AddActiveUsage)
|
||||||
|
|
||||||
cmd.Flags().Bool(flag.IngestHeader, false, flag.IngestHeaderUsage)
|
addOptionFlag(cmd.Flags(), driver.OptIngestHeader)
|
||||||
|
// cmd.Flags().Bool(flag.IngestHeader, false, flag.IngestHeaderUsage)
|
||||||
cmd.Flags().Bool(flag.CSVEmptyAsNull, true, flag.CSVEmptyAsNullUsage)
|
addOptionFlag(cmd.Flags(), csv.OptEmptyAsNull)
|
||||||
cmd.Flags().String(flag.CSVDelim, flag.CSVDelimDefault, flag.CSVDelimUsage)
|
addOptionFlag(cmd.Flags(), csv.OptDelim)
|
||||||
panicOn(cmd.RegisterFlagCompletionFunc(flag.CSVDelim, completeStrings(-1, csv.NamedDelims()...)))
|
// cmd.Flags().Bool(flag.CSVEmptyAsNull, true, flag.CSVEmptyAsNullUsage)
|
||||||
|
// cmd.Flags().String(flag.CSVDelim, flag.CSVDelimDefault, flag.CSVDelimUsage)
|
||||||
|
panicOn(cmd.RegisterFlagCompletionFunc(csv.OptDelim.Flag(), completeStrings(-1, csv.NamedDelims()...)))
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,7 @@ just for that source.`,
|
|||||||
addTextFormatFlags(cmd)
|
addTextFormatFlags(cmd)
|
||||||
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
||||||
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
||||||
cmd.Flags().BoolP(flag.Compact, flag.CompactShort, false, flag.CompactUsage)
|
addOptionFlag(cmd.Flags(), OptCompact)
|
||||||
|
|
||||||
cmd.Flags().String(flag.ConfigSrc, "", flag.ConfigSrcUsage)
|
cmd.Flags().String(flag.ConfigSrc, "", flag.ConfigSrcUsage)
|
||||||
panicOn(cmd.RegisterFlagCompletionFunc(flag.ConfigSrc, completeHandle(1, true)))
|
panicOn(cmd.RegisterFlagCompletionFunc(flag.ConfigSrc, completeHandle(1, true)))
|
||||||
|
@ -40,7 +40,7 @@ just for that source.`,
|
|||||||
addTextFormatFlags(cmd)
|
addTextFormatFlags(cmd)
|
||||||
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
||||||
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
||||||
cmd.Flags().BoolP(flag.Compact, flag.CompactShort, false, flag.CompactUsage)
|
addOptionFlag(cmd.Flags(), OptCompact)
|
||||||
|
|
||||||
cmd.Flags().String(flag.ConfigSrc, "", flag.ConfigSrcUsage)
|
cmd.Flags().String(flag.ConfigSrc, "", flag.ConfigSrcUsage)
|
||||||
panicOn(cmd.RegisterFlagCompletionFunc(flag.ConfigSrc, completeHandle(1, true)))
|
panicOn(cmd.RegisterFlagCompletionFunc(flag.ConfigSrc, completeHandle(1, true)))
|
||||||
|
@ -44,7 +44,7 @@ Use "sq config ls -v" to list available options.`,
|
|||||||
cmdMarkRequiresConfigLock(cmd)
|
cmdMarkRequiresConfigLock(cmd)
|
||||||
addTextFormatFlags(cmd)
|
addTextFormatFlags(cmd)
|
||||||
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
||||||
cmd.Flags().BoolP(flag.Compact, flag.CompactShort, false, flag.CompactUsage)
|
addOptionFlag(cmd.Flags(), OptCompact)
|
||||||
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
||||||
|
|
||||||
cmd.Flags().String(flag.ConfigSrc, "", flag.ConfigSrcUsage)
|
cmd.Flags().String(flag.ConfigSrc, "", flag.ConfigSrcUsage)
|
||||||
|
@ -99,7 +99,7 @@ func execDBDumpCatalog(cmd *cobra.Command, args []string) error {
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
errPrefix = fmt.Sprintf("db dump catalog: %s", src.Handle)
|
errPrefix = fmt.Sprintf("db dump catalog: %s", src.Handle)
|
||||||
dumpVerbose = cmdFlagBool(cmd, flag.Verbose)
|
dumpVerbose = OptVerbose.Get(src.Options)
|
||||||
dumpNoOwner = cmdFlagBool(cmd, flag.DBDumpNoOwner)
|
dumpNoOwner = cmdFlagBool(cmd, flag.DBDumpNoOwner)
|
||||||
dumpLongFlags = cmdFlagBool(cmd, flag.DBPrintLongToolCmd)
|
dumpLongFlags = cmdFlagBool(cmd, flag.DBPrintLongToolCmd)
|
||||||
dumpFile string
|
dumpFile string
|
||||||
@ -211,7 +211,7 @@ func execDBDumpCluster(cmd *cobra.Command, args []string) error {
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
errPrefix = fmt.Sprintf("db dump cluster: %s", src.Handle)
|
errPrefix = fmt.Sprintf("db dump cluster: %s", src.Handle)
|
||||||
dumpVerbose = cmdFlagBool(cmd, flag.Verbose)
|
dumpVerbose = OptVerbose.Get(src.Options)
|
||||||
dumpNoOwner = cmdFlagBool(cmd, flag.DBDumpNoOwner)
|
dumpNoOwner = cmdFlagBool(cmd, flag.DBDumpNoOwner)
|
||||||
dumpLongFlags = cmdFlagBool(cmd, flag.DBPrintLongToolCmd)
|
dumpLongFlags = cmdFlagBool(cmd, flag.DBPrintLongToolCmd)
|
||||||
dumpFile string
|
dumpFile string
|
||||||
|
@ -83,8 +83,6 @@ func execDBExec(cmd *cobra.Command, args []string) error {
|
|||||||
// scriptString is the optional SQL command string.
|
// scriptString is the optional SQL command string.
|
||||||
// If empty, scriptFile or stdin is used.
|
// If empty, scriptFile or stdin is used.
|
||||||
cmdString string
|
cmdString string
|
||||||
|
|
||||||
verbose = cmdFlagBool(cmd, flag.Verbose)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if src, err = getCmdSource(cmd, args); err != nil {
|
if src, err = getCmdSource(cmd, args); err != nil {
|
||||||
@ -113,7 +111,7 @@ func execDBExec(cmd *cobra.Command, args []string) error {
|
|||||||
switch src.Type { //nolint:exhaustive
|
switch src.Type { //nolint:exhaustive
|
||||||
case drivertype.Pg:
|
case drivertype.Pg:
|
||||||
params := &postgres.ExecToolParams{
|
params := &postgres.ExecToolParams{
|
||||||
Verbose: verbose,
|
Verbose: OptVerbose.Get(src.Options),
|
||||||
ScriptFile: scriptFile,
|
ScriptFile: scriptFile,
|
||||||
CmdString: cmdString,
|
CmdString: cmdString,
|
||||||
LongFlags: cmdFlagChanged(cmd, flag.DBPrintLongToolCmd),
|
LongFlags: cmdFlagChanged(cmd, flag.DBPrintLongToolCmd),
|
||||||
|
@ -100,7 +100,7 @@ func execDBRestoreCatalog(cmd *cobra.Command, args []string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
verbose := cmdFlagBool(cmd, flag.Verbose)
|
verbose := OptVerbose.Get(src.Options)
|
||||||
noOwner := cmdFlagBool(cmd, flag.DBRestoreNoOwner)
|
noOwner := cmdFlagBool(cmd, flag.DBRestoreNoOwner)
|
||||||
|
|
||||||
var execCmd *execz.Cmd
|
var execCmd *execz.Cmd
|
||||||
@ -213,7 +213,7 @@ func execDBRestoreCluster(cmd *cobra.Command, args []string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
verbose := cmdFlagBool(cmd, flag.Verbose)
|
verbose := OptVerbose.Get(src.Options)
|
||||||
|
|
||||||
// FIXME: get rid of noOwner from this command?
|
// FIXME: get rid of noOwner from this command?
|
||||||
// noOwner := cmdFlagBool(cmd, flag.RestoreNoOwner)
|
// noOwner := cmdFlagBool(cmd, flag.RestoreNoOwner)
|
||||||
|
@ -35,7 +35,7 @@ func newDriverListCmd() *cobra.Command {
|
|||||||
addTextFormatFlags(cmd)
|
addTextFormatFlags(cmd)
|
||||||
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
||||||
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
||||||
cmd.Flags().BoolP(flag.Compact, flag.CompactShort, false, flag.CompactUsage)
|
addOptionFlag(cmd.Flags(), OptCompact)
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ Use 'sq ls -g' to list groups.`,
|
|||||||
|
|
||||||
addTextFormatFlags(cmd)
|
addTextFormatFlags(cmd)
|
||||||
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
||||||
cmd.Flags().BoolP(flag.Compact, flag.CompactShort, false, flag.CompactUsage)
|
addOptionFlag(cmd.Flags(), OptCompact)
|
||||||
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
|
@ -90,7 +90,7 @@ formats both show extensive detail.`,
|
|||||||
|
|
||||||
addTextFormatFlags(cmd)
|
addTextFormatFlags(cmd)
|
||||||
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
||||||
cmd.Flags().BoolP(flag.Compact, flag.CompactShort, false, flag.CompactUsage)
|
addOptionFlag(cmd.Flags(), OptCompact)
|
||||||
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
||||||
|
|
||||||
cmd.Flags().BoolP(flag.InspectOverview, flag.InspectOverviewShort, false, flag.InspectOverviewUsage)
|
cmd.Flags().BoolP(flag.InspectOverview, flag.InspectOverviewShort, false, flag.InspectOverviewUsage)
|
||||||
@ -221,7 +221,7 @@ func execInspect(cmd *cobra.Command, args []string) error {
|
|||||||
|
|
||||||
// This is a bit hacky, but it works... if not "--verbose", then just zap
|
// This is a bit hacky, but it works... if not "--verbose", then just zap
|
||||||
// the DBVars, as we usually don't want to see those
|
// the DBVars, as we usually don't want to see those
|
||||||
if !cmdFlagIsSetTrue(cmd, flag.Verbose) {
|
if !OptVerbose.Get(src.Options) {
|
||||||
srcMeta.DBProperties = nil
|
srcMeta.DBProperties = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ any further descendants.
|
|||||||
|
|
||||||
addTextFormatFlags(cmd)
|
addTextFormatFlags(cmd)
|
||||||
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
||||||
cmd.Flags().BoolP(flag.Compact, flag.CompactShort, false, flag.CompactUsage)
|
addOptionFlag(cmd.Flags(), OptCompact)
|
||||||
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
||||||
|
|
||||||
cmd.Flags().BoolP(flag.ListGroup, flag.ListGroupShort, false, flag.ListGroupUsage)
|
cmd.Flags().BoolP(flag.ListGroup, flag.ListGroupShort, false, flag.ListGroupUsage)
|
||||||
|
@ -45,7 +45,7 @@ source handles are files, and groups are directories.`,
|
|||||||
cmdMarkRequiresConfigLock(cmd)
|
cmdMarkRequiresConfigLock(cmd)
|
||||||
addTextFormatFlags(cmd)
|
addTextFormatFlags(cmd)
|
||||||
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
||||||
cmd.Flags().BoolP(flag.Compact, flag.CompactShort, false, flag.CompactUsage)
|
addOptionFlag(cmd.Flags(), OptCompact)
|
||||||
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
|
@ -68,9 +68,10 @@ The exit code is 1 if ping fails for any of the sources.`,
|
|||||||
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
||||||
cmd.Flags().BoolP(flag.CSV, flag.CSVShort, false, flag.CSVUsage)
|
cmd.Flags().BoolP(flag.CSV, flag.CSVShort, false, flag.CSVUsage)
|
||||||
cmd.Flags().Bool(flag.TSV, false, flag.TSVUsage)
|
cmd.Flags().Bool(flag.TSV, false, flag.TSVUsage)
|
||||||
cmd.Flags().BoolP(flag.Compact, flag.CompactShort, false, flag.CompactUsage)
|
addOptionFlag(cmd.Flags(), OptCompact)
|
||||||
|
|
||||||
cmd.Flags().Duration(flag.PingTimeout, time.Second*10, flag.PingTimeoutUsage)
|
addOptionFlag(cmd.Flags(), OptPingCmdTimeout)
|
||||||
|
// cmd.Flags().Duration(flag.PingTimeout, time.Second*10, flag.PingTimeoutUsage)
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ may have changed, if that source or group was removed.`,
|
|||||||
cmdMarkRequiresConfigLock(cmd)
|
cmdMarkRequiresConfigLock(cmd)
|
||||||
addTextFormatFlags(cmd)
|
addTextFormatFlags(cmd)
|
||||||
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
||||||
cmd.Flags().BoolP(flag.Compact, flag.CompactShort, false, flag.CompactUsage)
|
addOptionFlag(cmd.Flags(), OptCompact)
|
||||||
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
@ -96,24 +96,27 @@ See docs and more: https://sq.io`,
|
|||||||
cmd.PersistentFlags().Bool(flag.Help, false, "Show help")
|
cmd.PersistentFlags().Bool(flag.Help, false, "Show help")
|
||||||
|
|
||||||
addQueryCmdFlags(cmd)
|
addQueryCmdFlags(cmd)
|
||||||
|
|
||||||
cmd.Flags().Bool(flag.Version, false, flag.VersionUsage)
|
cmd.Flags().Bool(flag.Version, false, flag.VersionUsage)
|
||||||
|
|
||||||
cmd.PersistentFlags().BoolP(flag.Monochrome, flag.MonochromeShort, false, flag.MonochromeUsage)
|
addOptionFlag(cmd.PersistentFlags(), OptMonochrome)
|
||||||
|
|
||||||
addOptionFlag(cmd.PersistentFlags(), OptProgress)
|
addOptionFlag(cmd.PersistentFlags(), OptProgress)
|
||||||
addOptionFlag(cmd.PersistentFlags(), OptRedact)
|
addOptionFlag(cmd.PersistentFlags(), OptRedact)
|
||||||
|
addOptionFlag(cmd.PersistentFlags(), OptVerbose)
|
||||||
|
|
||||||
// TODO: Move the rest of the option flags over to addOptionFlag
|
// flag.Config can't use the option flag mechanism, because... well,
|
||||||
cmd.PersistentFlags().BoolP(flag.Verbose, flag.VerboseShort, false, flag.VerboseUsage)
|
// because it's the config flag, and it exists above the realm of
|
||||||
|
// options. It's the flag that tells us where to find the config file,
|
||||||
|
// thus it can't be an option stored in the config file.
|
||||||
cmd.PersistentFlags().String(flag.Config, "", flag.ConfigUsage)
|
cmd.PersistentFlags().String(flag.Config, "", flag.ConfigUsage)
|
||||||
|
|
||||||
cmd.PersistentFlags().Bool(flag.LogEnabled, false, flag.LogEnabledUsage)
|
addOptionFlag(cmd.PersistentFlags(), OptLogEnabled)
|
||||||
panicOn(cmd.RegisterFlagCompletionFunc(flag.LogEnabled, completeBool))
|
panicOn(cmd.RegisterFlagCompletionFunc(OptLogEnabled.Flag(), completeBool))
|
||||||
cmd.PersistentFlags().String(flag.LogFile, "", flag.LogFileUsage)
|
|
||||||
|
|
||||||
cmd.PersistentFlags().String(flag.LogLevel, "", flag.LogLevelUsage)
|
addOptionFlag(cmd.PersistentFlags(), OptLogFile)
|
||||||
panicOn(cmd.RegisterFlagCompletionFunc(flag.LogLevel, completeStrings(
|
|
||||||
|
addOptionFlag(cmd.PersistentFlags(), OptLogLevel)
|
||||||
|
panicOn(cmd.RegisterFlagCompletionFunc(OptLogLevel.Flag(), completeStrings(
|
||||||
1,
|
1,
|
||||||
slog.LevelDebug.String(),
|
slog.LevelDebug.String(),
|
||||||
slog.LevelInfo.String(),
|
slog.LevelInfo.String(),
|
||||||
@ -121,11 +124,12 @@ See docs and more: https://sq.io`,
|
|||||||
slog.LevelError.String(),
|
slog.LevelError.String(),
|
||||||
)))
|
)))
|
||||||
|
|
||||||
cmd.PersistentFlags().String(flag.LogFormat, "", flag.LogFormatUsage)
|
addOptionFlag(cmd.PersistentFlags(), OptLogFormat)
|
||||||
panicOn(cmd.RegisterFlagCompletionFunc(flag.LogFormat, completeStrings(
|
panicOn(cmd.RegisterFlagCompletionFunc(OptLogFormat.Flag(), completeStrings(
|
||||||
1,
|
1,
|
||||||
string(format.Text),
|
string(format.Text),
|
||||||
string(format.JSON),
|
string(format.JSON),
|
||||||
)))
|
)))
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
@ -307,6 +307,15 @@ func preprocessUserSLQ(ctx context.Context, ru *run.Run, args []string) (string,
|
|||||||
// addTextFormatFlags adds the flags for --text format.
|
// addTextFormatFlags adds the flags for --text format.
|
||||||
func addTextFormatFlags(cmd *cobra.Command) {
|
func addTextFormatFlags(cmd *cobra.Command) {
|
||||||
cmd.Flags().BoolP(flag.Text, flag.TextShort, false, flag.TextUsage)
|
cmd.Flags().BoolP(flag.Text, flag.TextShort, false, flag.TextUsage)
|
||||||
|
|
||||||
|
// Note that we don't use:
|
||||||
|
//
|
||||||
|
// addOptionFlag(cmd.Flags(), OptPrintHeader)
|
||||||
|
//
|
||||||
|
// This is because, unlike other flags, printing the header is controllable
|
||||||
|
// via both --header (-h) and --no-header (-H). At the time of implementation,
|
||||||
|
// it seemed the ergonomics were better when both -h and -H were available.
|
||||||
|
// So, it'll probably stay this way.
|
||||||
cmd.Flags().BoolP(flag.Header, flag.HeaderShort, true, flag.HeaderUsage)
|
cmd.Flags().BoolP(flag.Header, flag.HeaderShort, true, flag.HeaderUsage)
|
||||||
cmd.Flags().BoolP(flag.NoHeader, flag.NoHeaderShort, false, flag.NoHeaderUsage)
|
cmd.Flags().BoolP(flag.NoHeader, flag.NoHeaderShort, false, flag.NoHeaderUsage)
|
||||||
cmd.MarkFlagsMutuallyExclusive(flag.Header, flag.NoHeader)
|
cmd.MarkFlagsMutuallyExclusive(flag.Header, flag.NoHeader)
|
||||||
@ -347,11 +356,11 @@ func addQueryCmdFlags(cmd *cobra.Command) {
|
|||||||
cmd.Flags().String(flag.IngestDriver, "", flag.IngestDriverUsage)
|
cmd.Flags().String(flag.IngestDriver, "", flag.IngestDriverUsage)
|
||||||
panicOn(cmd.RegisterFlagCompletionFunc(flag.IngestDriver, completeDriverType))
|
panicOn(cmd.RegisterFlagCompletionFunc(flag.IngestDriver, completeDriverType))
|
||||||
|
|
||||||
cmd.Flags().Bool(flag.IngestHeader, false, flag.IngestHeaderUsage)
|
addOptionFlag(cmd.Flags(), driver.OptIngestHeader)
|
||||||
addOptionFlag(cmd.Flags(), driver.OptIngestCache)
|
addOptionFlag(cmd.Flags(), driver.OptIngestCache)
|
||||||
cmd.Flags().Bool(flag.CSVEmptyAsNull, true, flag.CSVEmptyAsNullUsage)
|
addOptionFlag(cmd.Flags(), csv.OptDelim)
|
||||||
cmd.Flags().String(flag.CSVDelim, flag.CSVDelimDefault, flag.CSVDelimUsage)
|
panicOn(cmd.RegisterFlagCompletionFunc(csv.OptDelim.Key(), completeStrings(-1, csv.NamedDelims()...)))
|
||||||
panicOn(cmd.RegisterFlagCompletionFunc(flag.CSVDelim, completeStrings(-1, csv.NamedDelims()...)))
|
addOptionFlag(cmd.Flags(), csv.OptEmptyAsNull)
|
||||||
}
|
}
|
||||||
|
|
||||||
// addResultFormatFlags adds the individual flags that control result
|
// addResultFormatFlags adds the individual flags that control result
|
||||||
@ -373,7 +382,7 @@ func addResultFormatFlags(cmd *cobra.Command) {
|
|||||||
|
|
||||||
cmd.MarkFlagsMutuallyExclusive(flag.OutputFormatFlags...)
|
cmd.MarkFlagsMutuallyExclusive(flag.OutputFormatFlags...)
|
||||||
|
|
||||||
cmd.Flags().BoolP(flag.Compact, flag.CompactShort, false, flag.CompactUsage)
|
addOptionFlag(cmd.Flags(), OptCompact)
|
||||||
}
|
}
|
||||||
|
|
||||||
// extractFlagArgsValues returns a map {key:value} of predefined variables
|
// extractFlagArgsValues returns a map {key:value} of predefined variables
|
||||||
|
@ -10,10 +10,10 @@ import (
|
|||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
"github.com/neilotoole/sq/cli/flag"
|
|
||||||
"github.com/neilotoole/sq/cli/testrun"
|
"github.com/neilotoole/sq/cli/testrun"
|
||||||
"github.com/neilotoole/sq/drivers/userdriver"
|
"github.com/neilotoole/sq/drivers/userdriver"
|
||||||
"github.com/neilotoole/sq/libsq/core/tablefq"
|
"github.com/neilotoole/sq/libsq/core/tablefq"
|
||||||
|
"github.com/neilotoole/sq/libsq/driver"
|
||||||
"github.com/neilotoole/sq/libsq/source"
|
"github.com/neilotoole/sq/libsq/source"
|
||||||
"github.com/neilotoole/sq/testh"
|
"github.com/neilotoole/sq/testh"
|
||||||
"github.com/neilotoole/sq/testh/proj"
|
"github.com/neilotoole/sq/testh/proj"
|
||||||
@ -122,6 +122,8 @@ func TestCmdSQL_SelectFromUserDriver(t *testing.T) {
|
|||||||
func TestCmdSQL_StdinQuery(t *testing.T) {
|
func TestCmdSQL_StdinQuery(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
|
flagIngestHeader := driver.OptIngestHeader.Flag()
|
||||||
|
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
fpath string
|
fpath string
|
||||||
tbl string
|
tbl string
|
||||||
@ -131,25 +133,25 @@ func TestCmdSQL_StdinQuery(t *testing.T) {
|
|||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
fpath: proj.Abs(sakila.PathCSVActorNoHeader),
|
fpath: proj.Abs(sakila.PathCSVActorNoHeader),
|
||||||
flags: map[string]string{flag.IngestHeader: "false"},
|
flags: map[string]string{flagIngestHeader: "false"},
|
||||||
tbl: source.MonotableName,
|
tbl: source.MonotableName,
|
||||||
wantCount: sakila.TblActorCount,
|
wantCount: sakila.TblActorCount,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fpath: proj.Abs(sakila.PathCSVActor),
|
fpath: proj.Abs(sakila.PathCSVActor),
|
||||||
flags: map[string]string{flag.IngestHeader: "true"},
|
flags: map[string]string{flagIngestHeader: "true"},
|
||||||
tbl: source.MonotableName,
|
tbl: source.MonotableName,
|
||||||
wantCount: sakila.TblActorCount,
|
wantCount: sakila.TblActorCount,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fpath: proj.Abs(sakila.PathXLSXActorHeader),
|
fpath: proj.Abs(sakila.PathXLSXActorHeader),
|
||||||
flags: map[string]string{flag.IngestHeader: "true"},
|
flags: map[string]string{flagIngestHeader: "true"},
|
||||||
tbl: sakila.TblActor,
|
tbl: sakila.TblActor,
|
||||||
wantCount: sakila.TblActorCount,
|
wantCount: sakila.TblActorCount,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fpath: proj.Abs(sakila.PathXLSXSubset),
|
fpath: proj.Abs(sakila.PathXLSXSubset),
|
||||||
flags: map[string]string{flag.IngestHeader: "true"},
|
flags: map[string]string{flagIngestHeader: "true"},
|
||||||
tbl: sakila.TblActor,
|
tbl: sakila.TblActor,
|
||||||
wantCount: sakila.TblActorCount,
|
wantCount: sakila.TblActorCount,
|
||||||
},
|
},
|
||||||
|
@ -25,7 +25,7 @@ source. Otherwise, set @HANDLE as the active data source.`,
|
|||||||
|
|
||||||
addTextFormatFlags(cmd)
|
addTextFormatFlags(cmd)
|
||||||
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
||||||
cmd.Flags().BoolP(flag.Compact, flag.CompactShort, false, flag.CompactUsage)
|
addOptionFlag(cmd.Flags(), OptCompact)
|
||||||
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
|
@ -58,7 +58,7 @@ func newTblCopyCmd() *cobra.Command {
|
|||||||
|
|
||||||
addTextFormatFlags(cmd)
|
addTextFormatFlags(cmd)
|
||||||
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
||||||
cmd.Flags().BoolP(flag.Compact, flag.CompactShort, false, flag.CompactUsage)
|
addOptionFlag(cmd.Flags(), OptCompact)
|
||||||
cmd.Flags().Bool(flag.TblData, true, flag.TblDataUsage)
|
cmd.Flags().Bool(flag.TblData, true, flag.TblDataUsage)
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
|
@ -70,7 +70,7 @@ Before upgrading, check the changelog: https://sq.io/changelog`,
|
|||||||
|
|
||||||
addTextFormatFlags(cmd)
|
addTextFormatFlags(cmd)
|
||||||
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
cmd.Flags().BoolP(flag.JSON, flag.JSONShort, false, flag.JSONUsage)
|
||||||
cmd.Flags().BoolP(flag.Compact, flag.CompactShort, false, flag.CompactUsage)
|
addOptionFlag(cmd.Flags(), OptCompact)
|
||||||
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
cmd.Flags().BoolP(flag.YAML, flag.YAMLShort, false, flag.YAMLUsage)
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
// Package flag holds CLI flags.
|
// Package flag holds CLI flags. Note that many CLI flags are defined
|
||||||
|
// via the options package, and are not listed here.
|
||||||
package flag
|
package flag
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -25,10 +26,9 @@ const (
|
|||||||
HTML = "html"
|
HTML = "html"
|
||||||
HTMLUsage = "Output HTML table"
|
HTMLUsage = "Output HTML table"
|
||||||
|
|
||||||
Header = "header"
|
Header = "header"
|
||||||
HeaderShort = "h"
|
HeaderShort = "h"
|
||||||
HeaderUsage = "Print header row"
|
HeaderUsage = "Print header row"
|
||||||
|
|
||||||
NoHeader = "no-header"
|
NoHeader = "no-header"
|
||||||
NoHeaderShort = "H"
|
NoHeaderShort = "H"
|
||||||
NoHeaderUsage = "Don't print header row"
|
NoHeaderUsage = "Don't print header row"
|
||||||
@ -63,10 +63,6 @@ const (
|
|||||||
AddActiveShort = "a"
|
AddActiveShort = "a"
|
||||||
AddActiveUsage = "Make this the active source"
|
AddActiveUsage = "Make this the active source"
|
||||||
|
|
||||||
Monochrome = "monochrome"
|
|
||||||
MonochromeShort = "M"
|
|
||||||
MonochromeUsage = "Don't colorize output"
|
|
||||||
|
|
||||||
FileOutput = "output"
|
FileOutput = "output"
|
||||||
FileOutputShort = "o"
|
FileOutputShort = "o"
|
||||||
FileOutputUsage = "Write output to <file> instead of stdout"
|
FileOutputUsage = "Write output to <file> instead of stdout"
|
||||||
@ -92,10 +88,6 @@ const (
|
|||||||
CacheTreeSizeShort = "s"
|
CacheTreeSizeShort = "s"
|
||||||
CacheTreeSizeUsage = "Show sizes in cache tree"
|
CacheTreeSizeUsage = "Show sizes in cache tree"
|
||||||
|
|
||||||
Compact = "compact"
|
|
||||||
CompactShort = "c"
|
|
||||||
CompactUsage = "Compact instead of pretty-printed output"
|
|
||||||
|
|
||||||
Raw = "raw"
|
Raw = "raw"
|
||||||
RawShort = "r"
|
RawShort = "r"
|
||||||
RawUsage = "Output each record field in raw format without any encoding or delimiter"
|
RawUsage = "Output each record field in raw format without any encoding or delimiter"
|
||||||
@ -116,13 +108,6 @@ const (
|
|||||||
TblData = "data"
|
TblData = "data"
|
||||||
TblDataUsage = "Copy table data"
|
TblDataUsage = "Copy table data"
|
||||||
|
|
||||||
PingTimeout = "timeout"
|
|
||||||
PingTimeoutUsage = "Max time to wait for ping"
|
|
||||||
|
|
||||||
Verbose = "verbose"
|
|
||||||
VerboseShort = "v"
|
|
||||||
VerboseUsage = "Verbose output"
|
|
||||||
|
|
||||||
Version = "version"
|
Version = "version"
|
||||||
VersionUsage = "Print version info"
|
VersionUsage = "Print version info"
|
||||||
|
|
||||||
@ -146,16 +131,6 @@ const (
|
|||||||
Config = "config"
|
Config = "config"
|
||||||
ConfigUsage = "Load config from here"
|
ConfigUsage = "Load config from here"
|
||||||
|
|
||||||
IngestHeader = "ingest.header"
|
|
||||||
IngestHeaderUsage = "Treat first row of ingest data as header"
|
|
||||||
|
|
||||||
CSVEmptyAsNull = "driver.csv.empty-as-null"
|
|
||||||
CSVEmptyAsNullUsage = "Treat empty CSV fields as null"
|
|
||||||
|
|
||||||
CSVDelim = "driver.csv.delim"
|
|
||||||
CSVDelimUsage = "CSV delimiter: one of comma, space, pipe, tab, colon, semi, period"
|
|
||||||
CSVDelimDefault = "comma"
|
|
||||||
|
|
||||||
ConfigDelete = "delete"
|
ConfigDelete = "delete"
|
||||||
ConfigDeleteShort = "D"
|
ConfigDeleteShort = "D"
|
||||||
ConfigDeleteUsage = "Reset this option to default value"
|
ConfigDeleteUsage = "Reset this option to default value"
|
||||||
@ -172,18 +147,6 @@ const (
|
|||||||
InspectSchemataShort = "S"
|
InspectSchemataShort = "S"
|
||||||
InspectSchemataUsage = "List schemas (in current catalog) only"
|
InspectSchemataUsage = "List schemas (in current catalog) only"
|
||||||
|
|
||||||
LogEnabled = "log"
|
|
||||||
LogEnabledUsage = "Enable logging"
|
|
||||||
|
|
||||||
LogFile = "log.file"
|
|
||||||
LogFileUsage = "Path to log file; empty disables logging"
|
|
||||||
|
|
||||||
LogLevel = "log.level"
|
|
||||||
LogLevelUsage = "Log level: one of DEBUG, INFO, WARN, ERROR"
|
|
||||||
|
|
||||||
LogFormat = "log.format"
|
|
||||||
LogFormatUsage = `Log format: one of "text" or "json"`
|
|
||||||
|
|
||||||
DiffOverview = "overview"
|
DiffOverview = "overview"
|
||||||
DiffOverviewShort = "O"
|
DiffOverviewShort = "O"
|
||||||
DiffOverviewUsage = "Compare source overview"
|
DiffOverviewUsage = "Compare source overview"
|
||||||
|
@ -14,7 +14,6 @@ import (
|
|||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
"github.com/neilotoole/sq/cli/config"
|
"github.com/neilotoole/sq/cli/config"
|
||||||
"github.com/neilotoole/sq/cli/flag"
|
|
||||||
"github.com/neilotoole/sq/cli/output/format"
|
"github.com/neilotoole/sq/cli/output/format"
|
||||||
"github.com/neilotoole/sq/libsq/core/errz"
|
"github.com/neilotoole/sq/libsq/core/errz"
|
||||||
"github.com/neilotoole/sq/libsq/core/ioz/httpz"
|
"github.com/neilotoole/sq/libsq/core/ioz/httpz"
|
||||||
@ -217,18 +216,19 @@ func getLogEnabled(ctx context.Context, osArgs []string, cfg *config.Config) boo
|
|||||||
bootLog := lg.FromContext(ctx)
|
bootLog := lg.FromContext(ctx)
|
||||||
var enabled bool
|
var enabled bool
|
||||||
|
|
||||||
val, ok, err := getBootstrapFlagValue(flag.LogEnabled, "", flag.LogEnabledUsage, osArgs)
|
flg := OptLogEnabled.Flag()
|
||||||
|
val, ok, err := getBootstrapFlagValue(flg, "", OptLogEnabled.Usage(), osArgs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
bootLog.Warn("Reading log 'enabled' from flag", lga.Flag, flag.LogEnabled, lga.Err, err)
|
bootLog.Warn("Reading log 'enabled' from flag", lga.Flag, flg, lga.Err, err)
|
||||||
}
|
}
|
||||||
if ok {
|
if ok {
|
||||||
bootLog.Debug("Using log 'enabled' specified via flag", lga.Flag, flag.LogEnabled, lga.Val, val)
|
bootLog.Debug("Using log 'enabled' specified via flag", lga.Flag, flg, lga.Val, val)
|
||||||
|
|
||||||
enabled, err = stringz.ParseBool(val)
|
enabled, err = stringz.ParseBool(val)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
bootLog.Error(
|
bootLog.Error(
|
||||||
"Reading bool flag",
|
"Reading bool flag",
|
||||||
lga.Flag, flag.LogEnabled,
|
lga.Flag, flg,
|
||||||
lga.Val, val,
|
lga.Val, val,
|
||||||
)
|
)
|
||||||
// When in doubt, enable logging?
|
// When in doubt, enable logging?
|
||||||
@ -275,19 +275,20 @@ func getLogEnabled(ctx context.Context, osArgs []string, cfg *config.Config) boo
|
|||||||
func getLogLevel(ctx context.Context, osArgs []string, cfg *config.Config) slog.Level {
|
func getLogLevel(ctx context.Context, osArgs []string, cfg *config.Config) slog.Level {
|
||||||
bootLog := lg.FromContext(ctx)
|
bootLog := lg.FromContext(ctx)
|
||||||
|
|
||||||
val, ok, err := getBootstrapFlagValue(flag.LogLevel, "", flag.LogLevelUsage, osArgs)
|
flg := OptLogLevel.Flag()
|
||||||
|
val, ok, err := getBootstrapFlagValue(flg, "", OptLogLevel.Usage(), osArgs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
bootLog.Warn("Reading log level from flag", lga.Flag, flag.LogLevel, lga.Err, err)
|
bootLog.Warn("Reading log level from flag", lga.Flag, flg, lga.Err, err)
|
||||||
}
|
}
|
||||||
if ok {
|
if ok {
|
||||||
bootLog.Debug("Using log level specified via flag", lga.Flag, flag.LogLevel, lga.Val, val)
|
bootLog.Debug("Using log level specified via flag", lga.Flag, flg, lga.Val, val)
|
||||||
|
|
||||||
lvl := new(slog.Level)
|
lvl := new(slog.Level)
|
||||||
if err = lvl.UnmarshalText([]byte(val)); err == nil {
|
if err = lvl.UnmarshalText([]byte(val)); err == nil {
|
||||||
return *lvl
|
return *lvl
|
||||||
}
|
}
|
||||||
bootLog.Error("Invalid log level specified via flag",
|
bootLog.Error("Invalid log level specified via flag",
|
||||||
lga.Flag, flag.LogLevel, lga.Val, val, lga.Err, err)
|
lga.Flag, flg, lga.Val, val, lga.Err, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
val, ok = os.LookupEnv(config.EnvarLogLevel)
|
val, ok = os.LookupEnv(config.EnvarLogLevel)
|
||||||
@ -319,12 +320,13 @@ func getLogLevel(ctx context.Context, osArgs []string, cfg *config.Config) slog.
|
|||||||
func getLogFormat(ctx context.Context, osArgs []string, cfg *config.Config) format.Format {
|
func getLogFormat(ctx context.Context, osArgs []string, cfg *config.Config) format.Format {
|
||||||
bootLog := lg.FromContext(ctx)
|
bootLog := lg.FromContext(ctx)
|
||||||
|
|
||||||
val, ok, err := getBootstrapFlagValue(flag.LogFormat, "", flag.LogFormatUsage, osArgs)
|
flg := OptLogFormat.Flag()
|
||||||
|
val, ok, err := getBootstrapFlagValue(flg, "", OptLogFormat.Usage(), osArgs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
bootLog.Warn("Error reading log format from flag", lga.Flag, flag.LogFormat, lga.Err, err)
|
bootLog.Warn("Error reading log format from flag", lga.Flag, flg, lga.Err, err)
|
||||||
}
|
}
|
||||||
if ok {
|
if ok {
|
||||||
bootLog.Debug("Using log format specified via flag", lga.Flag, flag.LogFormat, lga.Val, val)
|
bootLog.Debug("Using log format specified via flag", lga.Flag, flg, lga.Val, val)
|
||||||
|
|
||||||
f := new(format.Format)
|
f := new(format.Format)
|
||||||
if err = f.UnmarshalText([]byte(val)); err == nil {
|
if err = f.UnmarshalText([]byte(val)); err == nil {
|
||||||
@ -335,7 +337,7 @@ func getLogFormat(ctx context.Context, osArgs []string, cfg *config.Config) form
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
bootLog.Error("Invalid log format specified via flag",
|
bootLog.Error("Invalid log format specified via flag",
|
||||||
lga.Flag, flag.LogFormat, lga.Val, val, lga.Err, err)
|
lga.Flag, flg, lga.Val, val, lga.Err, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
val, ok = os.LookupEnv(config.EnvarLogFormat)
|
val, ok = os.LookupEnv(config.EnvarLogFormat)
|
||||||
@ -371,12 +373,13 @@ func getLogFormat(ctx context.Context, osArgs []string, cfg *config.Config) form
|
|||||||
func getLogFilePath(ctx context.Context, osArgs []string, cfg *config.Config) string {
|
func getLogFilePath(ctx context.Context, osArgs []string, cfg *config.Config) string {
|
||||||
bootLog := lg.FromContext(ctx)
|
bootLog := lg.FromContext(ctx)
|
||||||
|
|
||||||
fp, ok, err := getBootstrapFlagValue(flag.LogFile, "", flag.LogFileUsage, osArgs)
|
flg := OptLogFile.Flag()
|
||||||
|
fp, ok, err := getBootstrapFlagValue(flg, "", OptLogFile.Usage(), osArgs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
bootLog.Warn("Reading log file from flag", lga.Flag, flag.LogFile, lga.Err, err)
|
bootLog.Warn("Reading log file from flag", lga.Flag, flg, lga.Err, err)
|
||||||
}
|
}
|
||||||
if ok {
|
if ok {
|
||||||
bootLog.Debug("Log file specified via flag", lga.Flag, flag.LogFile, lga.Path, fp)
|
bootLog.Debug("Log file specified via flag", lga.Flag, flg, lga.Path, fp)
|
||||||
return fp
|
return fp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user