fix: avoid printing banner in completion commands, add env PICOCLAW_NO_BANNER to control printing banner or not
This commit is contained in:
parent
26f623ed32
commit
66db91012d
2 changed files with 116 additions and 1 deletions
|
|
@ -9,6 +9,7 @@ package main
|
|||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
|
|
@ -61,8 +62,31 @@ const (
|
|||
"\033[0m\r\n"
|
||||
)
|
||||
|
||||
// shouldShowBanner returns true if the banner should be displayed.
|
||||
// Banner is suppressed when:
|
||||
// - PICOCLAW_NO_BANNER environment variable is set to "1" or "true"
|
||||
// - Running shell completion commands (e.g., __complete, completion)
|
||||
func shouldShowBanner() bool {
|
||||
// Check environment variable
|
||||
if noBanner := os.Getenv("PICOCLAW_NO_BANNER"); noBanner == "1" || strings.ToLower(noBanner) == "true" {
|
||||
return false
|
||||
}
|
||||
|
||||
// Check for shell completion commands
|
||||
// Cobra uses "__complete" and "__completeNoDesc" for completion
|
||||
for _, arg := range os.Args[1:] {
|
||||
if strings.HasPrefix(arg, "__complete") || arg == "completion" {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func main() {
|
||||
fmt.Printf("%s", banner)
|
||||
if shouldShowBanner() {
|
||||
fmt.Printf("%s", banner)
|
||||
}
|
||||
cmd := NewPicoclawCommand()
|
||||
if err := cmd.Execute(); err != nil {
|
||||
os.Exit(1)
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package main
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"slices"
|
||||
"testing"
|
||||
|
||||
|
|
@ -54,3 +55,93 @@ func TestNewPicoclawCommand(t *testing.T) {
|
|||
assert.False(t, subcmd.Hidden)
|
||||
}
|
||||
}
|
||||
|
||||
func TestShouldShowBanner(t *testing.T) {
|
||||
// Save original args to restore later
|
||||
originalArgs := os.Args
|
||||
defer func() { os.Args = originalArgs }()
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
args []string
|
||||
envVar string
|
||||
expected bool
|
||||
}{
|
||||
{
|
||||
name: "default shows banner",
|
||||
args: []string{"picoclaw"},
|
||||
envVar: "",
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
name: "normal command shows banner",
|
||||
args: []string{"picoclaw", "version"},
|
||||
envVar: "",
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
name: "__complete suppresses banner",
|
||||
args: []string{"picoclaw", "__complete", "ver"},
|
||||
envVar: "",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
name: "__completeNoDesc suppresses banner",
|
||||
args: []string{"picoclaw", "__completeNoDesc", "ver"},
|
||||
envVar: "",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
name: "completion command suppresses banner",
|
||||
args: []string{"picoclaw", "completion", "bash"},
|
||||
envVar: "",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
name: "PICOCLAW_NO_BANNER=1 suppresses banner",
|
||||
args: []string{"picoclaw", "version"},
|
||||
envVar: "1",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
name: "PICOCLAW_NO_BANNER=true suppresses banner",
|
||||
args: []string{"picoclaw", "version"},
|
||||
envVar: "true",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
name: "PICOCLAW_NO_BANNER=TRUE suppresses banner",
|
||||
args: []string{"picoclaw", "version"},
|
||||
envVar: "TRUE",
|
||||
expected: false,
|
||||
},
|
||||
{
|
||||
name: "PICOCLAW_NO_BANNER=0 does not suppress banner",
|
||||
args: []string{"picoclaw", "version"},
|
||||
envVar: "0",
|
||||
expected: true,
|
||||
},
|
||||
{
|
||||
name: "PICOCLAW_NO_BANNER=false does not suppress banner",
|
||||
args: []string{"picoclaw", "version"},
|
||||
envVar: "false",
|
||||
expected: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
os.Args = tt.args
|
||||
|
||||
if tt.envVar != "" {
|
||||
t.Setenv("PICOCLAW_NO_BANNER", tt.envVar)
|
||||
} else {
|
||||
// Clear env var if not set in test
|
||||
os.Unsetenv("PICOCLAW_NO_BANNER")
|
||||
}
|
||||
|
||||
result := shouldShowBanner()
|
||||
assert.Equal(t, tt.expected, result)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue