Skip to content

Commit

Permalink
fix: default flag parser for apps (backport #4483) (#4488)
Browse files Browse the repository at this point in the history
* fix: default flag parser for apps (#4483)

* fix default flag parse for apps

* remove bug condition

* fix. unit tests

* add changelog

---------

Co-authored-by: Julien Robert <[email protected]>
(cherry picked from commit 7f91423)

# Conflicts:
#	ignite/services/plugin/flag_test.go
#	ignite/services/plugin/grpc/v1/interface_flag.go

* fix merge conflicts

* Update changelog.md

---------

Co-authored-by: Danilo Pantani <[email protected]>
Co-authored-by: Julien Robert <[email protected]>
  • Loading branch information
3 people authored Feb 3, 2025
1 parent 6794cb2 commit e1e609e
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 29 deletions.
1 change: 1 addition & 0 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

- [#4474](https://github.com/ignite/cli/pull/4474) Fix issue in `build --release` command
- [#4479](https://github.com/ignite/cli/pull/4479) Scaffold an `uint64 type crashs Ignite
- [#4483](https://github.com/ignite/cli/pull/4483) Fix default flag parser for apps

## [`v28.7.0`](https://github.com/ignite/cli/releases/tag/v28.7.0)

Expand Down
12 changes: 1 addition & 11 deletions ignite/services/plugin/flag.go
Original file line number Diff line number Diff line change
Expand Up @@ -148,15 +148,5 @@ func flagValue(flag *Flag) string {
if flag.Value != "" {
return flag.Value
}
if flag.DefaultValue != "" {
return flag.DefaultValue
}
if flag.Type == FlagTypeBool ||
flag.Type == FlagTypeInt ||
flag.Type == FlagTypeInt64 ||
flag.Type == FlagTypeUint ||
flag.Type == FlagTypeUint64 {
return "0"
}
return ""
return flag.DefaultValue
}
17 changes: 11 additions & 6 deletions ignite/services/plugin/flag_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ func TestFlags_GetBool(t *testing.T) {
name: "flag without value and default value",
key: flagBool3,
f: testFlags,
want: false,
err: errors.New("strconv.ParseBool: parsing \"\": invalid syntax"),
},
{
name: "invalid flag type",
Expand Down Expand Up @@ -158,7 +158,7 @@ func TestFlags_GetInt(t *testing.T) {
name: "flag without value and default value",
key: flagInt3,
f: testFlags,
want: 0,
err: errors.New("strconv.Atoi: parsing \"\": invalid syntax"),
},
{
name: "invalid flag type",
Expand All @@ -182,7 +182,7 @@ func TestFlags_GetInt(t *testing.T) {
name: "wrong flag value without default or value",
key: flagWrongType3,
f: testFlags,
want: 0,
err: errors.New("strconv.Atoi: parsing \"\": invalid syntax"),
},
}
for _, tt := range tests {
Expand Down Expand Up @@ -223,7 +223,7 @@ func TestFlags_GetInt64(t *testing.T) {
name: "flag without value and default value",
key: flagInt643,
f: testFlags,
want: 0,
err: errors.New("strconv.ParseInt: parsing \"\": invalid syntax"),
},
{
name: "invalid flag type",
Expand Down Expand Up @@ -400,7 +400,7 @@ func TestFlags_GetUint(t *testing.T) {
name: "flag without value and default value",
key: flagUint3,
f: testFlags,
want: 0,
err: errors.New("strconv.ParseUint: parsing \"\": invalid syntax"),
},
{
name: "invalid flag type",
Expand Down Expand Up @@ -459,7 +459,7 @@ func TestFlags_GetUint64(t *testing.T) {
name: "flag without value and default value",
key: flagUint643,
f: testFlags,
want: 0,
err: errors.New("strconv.ParseUint: parsing \"\": invalid syntax"),
},
{
name: "invalid flag type",
Expand Down Expand Up @@ -570,6 +570,11 @@ func Test_flagValue(t *testing.T) {
flag: &Flag{Name: flagString1},
want: "",
},
{
name: "number without value and default value",
flag: &Flag{Name: flagUint642, Type: FlagTypeUint64},
want: "",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Expand Down
47 changes: 36 additions & 11 deletions ignite/services/plugin/grpc/v1/interface_flag.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,6 @@ func (f *Flag) ExportToFlagSet(fs *pflag.FlagSet) error {
if f.DefaultValue == "" {
f.DefaultValue = "0"
}
if f.Value == "" {
f.Value = "0"
}
}

switch f.Type {
Expand All @@ -56,46 +53,74 @@ func (f *Flag) ExportToFlagSet(fs *pflag.FlagSet) error {
}

fs.BoolP(f.Name, f.Shorthand, v, f.Usage)
fs.Set(f.Name, f.Value)
if f.Value != "" {
if err := fs.Set(f.Name, f.Value); err != nil {
return newDefaultFlagValueError(cobraFlagTypeBool, f.Value)
}
}
case Flag_TYPE_FLAG_INT:
v, err := strconv.Atoi(f.DefaultValue)
if err != nil {
return newDefaultFlagValueError(cobraFlagTypeInt, f.DefaultValue)
}

fs.IntP(f.Name, f.Shorthand, v, f.Usage)
fs.Set(f.Name, f.Value)
if f.Value != "" {
if err := fs.Set(f.Name, f.Value); err != nil {
return newDefaultFlagValueError(cobraFlagTypeInt, f.Value)
}
}
case Flag_TYPE_FLAG_UINT:
v, err := strconv.ParseUint(f.DefaultValue, 10, 64)
if err != nil {
return newDefaultFlagValueError(cobraFlagTypeUint, f.DefaultValue)
}

fs.UintP(f.Name, f.Shorthand, uint(v), f.Usage)
fs.Set(f.Name, f.Value)
if f.Value != "" {
if err := fs.Set(f.Name, f.Value); err != nil {
return newDefaultFlagValueError(cobraFlagTypeUint, f.Value)
}
}
case Flag_TYPE_FLAG_INT64:
v, err := strconv.ParseInt(f.DefaultValue, 10, 64)
if err != nil {
return newDefaultFlagValueError(cobraFlagTypeInt64, f.DefaultValue)
}

fs.Int64P(f.Name, f.Shorthand, v, f.Usage)
fs.Set(f.Name, f.Value)
if f.Value != "" {
if err := fs.Set(f.Name, f.Value); err != nil {
return newDefaultFlagValueError(cobraFlagTypeInt64, f.Value)
}
}
case Flag_TYPE_FLAG_UINT64:
v, err := strconv.ParseUint(f.DefaultValue, 10, 64)
if err != nil {
return newDefaultFlagValueError(cobraFlagTypeInt64, f.DefaultValue)
return newDefaultFlagValueError(cobraFlagTypeUint64, f.DefaultValue)
}

fs.Uint64P(f.Name, f.Shorthand, v, f.Usage)
fs.Set(f.Name, f.Value)
if f.Value != "" {
if err := fs.Set(f.Name, f.Value); err != nil {
return newDefaultFlagValueError(cobraFlagTypeUint64, f.Value)
}
}
case Flag_TYPE_FLAG_STRING_SLICE:
s := strings.Trim(f.DefaultValue, "[]")
fs.StringSliceP(f.Name, f.Shorthand, strings.Fields(s), f.Usage)
fs.Set(f.Name, strings.Trim(f.Value, "[]"))
if f.Value != "" {
if err := fs.Set(f.Name, strings.Trim(f.Value, "[]")); err != nil {
return newDefaultFlagValueError(cobraFlagTypeStringSlice, f.Value)
}
}
case Flag_TYPE_FLAG_STRING_UNSPECIFIED:
fs.StringP(f.Name, f.Shorthand, f.DefaultValue, f.Usage)
fs.Set(f.Name, f.Value)
if f.Value != "" {
if err := fs.Set(f.Name, f.Value); err != nil {
return newDefaultFlagValueError(cobraFlagTypeString, f.Value)
}
}
}
return nil
}
Expand Down
3 changes: 2 additions & 1 deletion integration/other_components/cmd_chain_registry_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ import (
"path/filepath"
"testing"

"github.com/stretchr/testify/require"

"github.com/ignite/cli/v28/ignite/pkg/cmdrunner/step"
envtest "github.com/ignite/cli/v28/integration"
"github.com/stretchr/testify/require"
)

func TestCreateChainRegistry(t *testing.T) {
Expand Down

0 comments on commit e1e609e

Please sign in to comment.