Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 19 additions & 1 deletion cmd/serve/serve.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package serve

import (
"os"

"github.com/kardianos/service"
"github.com/spf13/cobra"

Expand All @@ -9,7 +11,11 @@ import (
"github.com/anyproto/anytype-cli/core/serviceprogram"
)

var listenAddress string
var (
listenAddress string
quietMode bool
verboseMode bool
)

func NewServeCmd() *cobra.Command {
cmd := &cobra.Command{
Expand All @@ -21,11 +27,23 @@ func NewServeCmd() *cobra.Command {
}

cmd.Flags().StringVar(&listenAddress, "listen-address", config.DefaultAPIAddress, "API listen address in `host:port` format")
cmd.Flags().BoolVarP(&quietMode, "quiet", "q", false, "Suppress most output (only errors)")
cmd.Flags().BoolVarP(&verboseMode, "verbose", "v", false, "Show detailed output (debug level)")
cmd.MarkFlagsMutuallyExclusive("quiet", "verbose")

return cmd
}

func runServer(cmd *cobra.Command, args []string) error {
// Configure anytype-heart log level via environment variables (must be set before server starts)
if quietMode {
os.Setenv("ANYTYPE_LOG_LEVEL", "*=FATAL")
os.Setenv("ANYTYPE_LOG_NOGELF", "1")
} else if verboseMode {
os.Setenv("ANYTYPE_LOG_LEVEL", "*=DEBUG")
}
// Default log level (ERROR) is set in grpcserver/server.go if not specified

svcConfig := &service.Config{
Name: "anytype",
DisplayName: "Anytype",
Expand Down
53 changes: 53 additions & 0 deletions cmd/serve/serve_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package serve

import (
"strings"
"testing"

"github.com/anyproto/anytype-cli/core/config"
Expand Down Expand Up @@ -51,3 +52,55 @@ func TestServeCmd_ListenAddressFlagCustomValue(t *testing.T) {
t.Errorf("listen-address value = %v, want %v", flag.Value.String(), customAddr)
}
}

func TestServeCmd_QuietFlag(t *testing.T) {
cmd := NewServeCmd()

flag := cmd.Flag("quiet")
if flag == nil {
t.Fatal("quiet flag not found")
}

if flag.Shorthand != "q" {
t.Errorf("quiet shorthand = %v, want q", flag.Shorthand)
}

if flag.DefValue != "false" {
t.Errorf("quiet default = %v, want false", flag.DefValue)
}
}

func TestServeCmd_VerboseFlag(t *testing.T) {
cmd := NewServeCmd()

flag := cmd.Flag("verbose")
if flag == nil {
t.Fatal("verbose flag not found")
}

if flag.Shorthand != "v" {
t.Errorf("verbose shorthand = %v, want v", flag.Shorthand)
}

if flag.DefValue != "false" {
t.Errorf("verbose default = %v, want false", flag.DefValue)
}
}

func TestServeCmd_QuietAndVerboseMutuallyExclusive(t *testing.T) {
cmd := NewServeCmd()
cmd.SetArgs([]string{"--quiet", "--verbose"})

err := cmd.Execute()
if err == nil {
t.Fatal("expected error when using --quiet and --verbose together")
}

errMsg := err.Error()
if !strings.Contains(errMsg, "quiet") {
t.Errorf("error message should mention 'quiet' flag, got: %q", errMsg)
}
if !strings.Contains(errMsg, "verbose") {
t.Errorf("error message should mention 'verbose' flag, got: %q", errMsg)
}
}