Enable plain TTY logging mode + loose-data processing
This commit is contained in:
+17
-3
@@ -139,6 +139,20 @@ func isInteractiveTTY(w io.Writer) bool {
|
||||
return (info.Mode() & os.ModeCharDevice) != 0
|
||||
}
|
||||
|
||||
func spinnerEnabledFor(w io.Writer, level logLevel) bool {
|
||||
mode := strings.TrimSpace(strings.ToLower(os.Getenv("SOW_TOOLS_TTY_MODE")))
|
||||
switch mode {
|
||||
case "plain", "off", "0", "false", "no":
|
||||
return false
|
||||
case "spinner", "on", "1", "true", "yes":
|
||||
return level == logLevelNormal && isInteractiveTTY(w)
|
||||
case "", "auto":
|
||||
return isInteractiveTTY(w) && strings.TrimSpace(os.Getenv("CI")) == "" && level == logLevelNormal
|
||||
default:
|
||||
return isInteractiveTTY(w) && strings.TrimSpace(os.Getenv("CI")) == "" && level == logLevelNormal
|
||||
}
|
||||
}
|
||||
|
||||
var commands = []command{
|
||||
{
|
||||
name: "build",
|
||||
@@ -605,7 +619,7 @@ func newProjectConsole(ctx context, p *project.Project, commandName string) *pro
|
||||
commandName: commandName,
|
||||
commandLabel: projectCommandLabel(commandName),
|
||||
level: ctx.logLevel,
|
||||
spinnerEnabled: isInteractiveTTY(ctx.stderr) && strings.TrimSpace(os.Getenv("CI")) == "" && ctx.logLevel == logLevelNormal,
|
||||
spinnerEnabled: spinnerEnabledFor(ctx.stderr, ctx.logLevel),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -787,7 +801,7 @@ func newBuildHAKConsole(ctx context, p *project.Project, opts buildHAKOptions) *
|
||||
projectName: p.Config.Module.Name,
|
||||
planOnly: opts.planOnly,
|
||||
level: opts.logLevel,
|
||||
spinnerEnabled: isInteractiveTTY(ctx.stderr) && strings.TrimSpace(os.Getenv("CI")) == "" && opts.logLevel == logLevelNormal,
|
||||
spinnerEnabled: spinnerEnabledFor(ctx.stderr, opts.logLevel),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -962,7 +976,7 @@ func newTopdataConsole(ctx context, p *project.Project, commandName string) *top
|
||||
commandName: commandName,
|
||||
commandLabel: topdataCommandLabel(commandName),
|
||||
level: ctx.logLevel,
|
||||
spinnerEnabled: isInteractiveTTY(ctx.stderr) && strings.TrimSpace(os.Getenv("CI")) == "" && ctx.logLevel == logLevelNormal,
|
||||
spinnerEnabled: spinnerEnabledFor(ctx.stderr, ctx.logLevel),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -35,8 +35,7 @@ topdata:
|
||||
|
||||
sourceTime := time.Now().Add(-2 * time.Hour)
|
||||
outputTime := time.Now().Add(-1 * time.Hour)
|
||||
setFileTime(t, filepath.Join(root, "topdata", "assets", "gui", "testicon.png"), sourceTime)
|
||||
setFileTime(t, filepath.Join(root, "topdata", "data", "repadjust", "base.json"), sourceTime)
|
||||
setTreeTime(t, filepath.Join(root, "topdata"), sourceTime)
|
||||
setFileTime(t, filepath.Join(root, ".cache", "2da", "repadjust.2da"), outputTime)
|
||||
setFileTime(t, filepath.Join(root, "build", "sow_tlk.tlk"), outputTime)
|
||||
|
||||
@@ -130,6 +129,19 @@ haks:
|
||||
}
|
||||
}
|
||||
|
||||
func setTreeTime(t *testing.T, root string, modTime time.Time) {
|
||||
t.Helper()
|
||||
err := filepath.WalkDir(root, func(path string, d os.DirEntry, walkErr error) error {
|
||||
if walkErr != nil {
|
||||
return walkErr
|
||||
}
|
||||
return os.Chtimes(path, modTime, modTime)
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("set tree time under %s: %v", root, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRunBuildHAKsVerboseListsMappings(t *testing.T) {
|
||||
root := t.TempDir()
|
||||
mkdirAll(t, filepath.Join(root, "assets", "envi", "music", "westgate"))
|
||||
@@ -212,6 +224,13 @@ func TestTopdataConsoleSuppressesProgressInNormalMode(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestSpinnerEnabledForHonorsPlainTTYMode(t *testing.T) {
|
||||
t.Setenv("SOW_TOOLS_TTY_MODE", "plain")
|
||||
if spinnerEnabledFor(&bytes.Buffer{}, logLevelNormal) {
|
||||
t.Fatal("expected plain tty mode to disable spinner output")
|
||||
}
|
||||
}
|
||||
|
||||
func TestTopdataConsoleDebugProgressAndRelativePaths(t *testing.T) {
|
||||
var stdout bytes.Buffer
|
||||
console := &topdataConsole{
|
||||
|
||||
Reference in New Issue
Block a user