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 (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
|
|
@ -61,8 +62,31 @@ const (
|
||||||
"\033[0m\r\n"
|
"\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() {
|
func main() {
|
||||||
|
if shouldShowBanner() {
|
||||||
fmt.Printf("%s", banner)
|
fmt.Printf("%s", banner)
|
||||||
|
}
|
||||||
cmd := NewPicoclawCommand()
|
cmd := NewPicoclawCommand()
|
||||||
if err := cmd.Execute(); err != nil {
|
if err := cmd.Execute(); err != nil {
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
"slices"
|
"slices"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
|
@ -54,3 +55,93 @@ func TestNewPicoclawCommand(t *testing.T) {
|
||||||
assert.False(t, subcmd.Hidden)
|
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