Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • master
  • v1.0.0
  • v1.1.0
  • v1.1.1
  • v1.10.0
  • v1.10.1
  • v1.10.2
  • v1.11.0
  • v1.12.0
  • v1.13.0
  • v1.13.1
  • v1.13.2
  • v1.14.0
  • v1.15.0
  • v1.16.0
  • v1.16.1
  • v1.16.2
  • v1.16.3
  • v1.16.4
  • v1.16.5
  • v1.2.0
  • v1.2.1
  • v1.2.2
  • v1.2.3
  • v1.3.0
  • v1.3.1
  • v1.4.0
  • v1.5.0
  • v1.6.0
  • v1.7.0
  • v1.8.0
  • v1.8.1
  • v1.8.2
  • v1.8.3
  • v1.9.0
35 results

Target

Select target project
  • oss/libraries/go/application/xflags
1 result
Select Git revision
  • master
  • v1.0.0
  • v1.1.0
  • v1.1.1
  • v1.10.0
  • v1.10.1
  • v1.10.2
  • v1.11.0
  • v1.12.0
  • v1.13.0
  • v1.13.1
  • v1.13.2
  • v1.14.0
  • v1.15.0
  • v1.16.0
  • v1.16.1
  • v1.16.2
  • v1.16.3
  • v1.16.4
  • v1.16.5
  • v1.2.0
  • v1.2.1
  • v1.2.2
  • v1.2.3
  • v1.3.0
  • v1.3.1
  • v1.4.0
  • v1.5.0
  • v1.6.0
  • v1.7.0
  • v1.8.0
  • v1.8.1
  • v1.8.2
  • v1.8.3
  • v1.9.0
35 results
Show changes
Commits on Source (4)
<a name="v1.4.0"></a>
## [v1.4.0] - 2022-10-09
### Add Features
- feat new Execute() Method for the automatic execution of command
- feat new function GetDefaults()
<a name="v1.3.1"></a> <a name="v1.3.1"></a>
## [v1.3.1] - 2022-10-08 ## [v1.3.1] - 2022-10-08
### Bug Fixes ### Bug Fixes
...@@ -52,6 +59,7 @@ ...@@ -52,6 +59,7 @@
<a name="v1.0.0"></a> <a name="v1.0.0"></a>
## v1.0.0 - 2022-10-04 ## v1.0.0 - 2022-10-04
[v1.4.0]: https://gitlab.schukai.com/oss/libraries/go/application/xflags/compare/v1.3.1...v1.4.0
[v1.3.1]: https://gitlab.schukai.com/oss/libraries/go/application/xflags/compare/v1.3.0...v1.3.1 [v1.3.1]: https://gitlab.schukai.com/oss/libraries/go/application/xflags/compare/v1.3.0...v1.3.1
[v1.3.0]: https://gitlab.schukai.com/oss/libraries/go/application/xflags/compare/v1.2.3...v1.3.0 [v1.3.0]: https://gitlab.schukai.com/oss/libraries/go/application/xflags/compare/v1.2.3...v1.3.0
[v1.2.3]: https://gitlab.schukai.com/oss/libraries/go/application/xflags/compare/v1.2.2...v1.2.3 [v1.2.3]: https://gitlab.schukai.com/oss/libraries/go/application/xflags/compare/v1.2.2...v1.2.3
......
...@@ -6,10 +6,52 @@ package xflags ...@@ -6,10 +6,52 @@ package xflags
import ( import (
"bytes" "bytes"
"flag" "flag"
"fmt"
"io" "io"
"os"
"reflect" "reflect"
) )
// Execute executes the command line arguments and calls the functions.
func Execute[C any, D any](cmd C, cnf D) *Settings[C] {
return execute(cmd, cnf, os.Args[0], os.Args[1:])
}
func (s *Settings[C]) PrintFlagOutput() {
fmt.Println(s.command.flagSet.Output())
}
// execute is the internal implementation of Execute.
func execute[C any, D any](cmd C, cnf D, name string, args []string) *Settings[C] {
instance := New(name, cmd)
if instance.HasErrors() {
return instance
}
instance.SetShadow(cnf)
if instance.HasErrors() {
return instance
}
instance.Parse(args)
if instance.HelpRequested() {
for i, err := range instance.errors {
if err == flag.ErrHelp {
instance.errors = append(instance.errors[:i], instance.errors[i+1:]...)
}
}
instance.PrintFlagOutput()
return instance
}
if instance.HasErrors() {
return instance
}
instance.Execute()
return instance
}
// New creates a new instance of the settings. // New creates a new instance of the settings.
// name should be the name of the command and comes from the first argument of the command line. // name should be the name of the command and comes from the first argument of the command line.
// os.Args[0] is a good choice. // os.Args[0] is a good choice.
...@@ -43,3 +85,13 @@ func (s *Settings[C]) Output() string { ...@@ -43,3 +85,13 @@ func (s *Settings[C]) Output() string {
func (s *Settings[C]) Args() []string { func (s *Settings[C]) Args() []string {
return s.args return s.args
} }
// GetDefaults returns the default values of the settings.
func (s *Settings[C]) GetDefaults() string {
mem := s.flagOutput
s.flagOutput.(*bytes.Buffer).Reset()
s.command.flagSet.PrintDefaults()
r := s.flagOutput.(*bytes.Buffer).String()
s.flagOutput = mem
return r
}
...@@ -8,22 +8,31 @@ import ( ...@@ -8,22 +8,31 @@ import (
"testing" "testing"
) )
//func TestUsage(t *testing.T) { func TestUsage(t *testing.T) {
//
// commands := New("root", CmdTest1{}) commands := New("root", CmdTest1{})
// args := []string{"-h"} args := []string{"-h"}
//
// commands.Parse(args) commands.Parse(args)
//
// assert.False(t, commands.HasErrors()) assert.True(t, commands.HelpRequested())
// if commands.HasErrors() {
// t.Log(commands.Errors()) usage := commands.GetDefaults()
// } assert.Equal(t, " -a\tMessage A\n -x int\n \tMessage X\n", usage)
//
// usage := commands.Usage() }
// assert.NotEmpty(t, usage) func TestExecute(t *testing.T) {
// instance := execute("root", CmdTest1{}, "test", []string{"-a", "hello", "-x", "1"})
//} assert.NotNil(t, instance)
}
func TestExecuteHelp(t *testing.T) {
cnf := struct {
}{}
instance := execute(CmdTest1{}, &cnf, "test", []string{"-h"})
assert.False(t, instance.HasErrors())
}
func TestNewIntWithError(t *testing.T) { func TestNewIntWithError(t *testing.T) {
...@@ -47,17 +56,17 @@ func TestNew(t *testing.T) { ...@@ -47,17 +56,17 @@ func TestNew(t *testing.T) {
} }
type CmdTest1 struct { type CmdTest1 struct {
A bool `short:"a"` A bool `short:"a" description:"Message A"`
Sub1 struct { Sub1 struct {
B bool `short:"b"` B bool `short:"b" description:"Message B"`
Sub2 struct { Sub2 struct {
C bool `short:"c"` C bool `short:"c" description:"Message C"`
Sub3 struct { Sub3 struct {
D bool `short:"d"` D bool `short:"d" description:"Message D"`
} `command:"sub3"` } `command:"sub3"`
} `command:"sub2"` } `command:"sub2"`
} `command:"sub1"` } `command:"sub1"`
aa int `short:"x"` aa int `short:"x" description:"Message X"`
} }
func TestCommand2(t *testing.T) { func TestCommand2(t *testing.T) {
......
...@@ -3,7 +3,10 @@ ...@@ -3,7 +3,10 @@
package xflags package xflags
import "os" import (
"flag"
"os"
)
// ParseOsArgs parses the os.Args. // ParseOsArgs parses the os.Args.
func (s *Settings[C]) ParseOsArgs() *Settings[C] { func (s *Settings[C]) ParseOsArgs() *Settings[C] {
...@@ -38,3 +41,14 @@ func (s *Settings[C]) Parse(args []string) *Settings[C] { ...@@ -38,3 +41,14 @@ func (s *Settings[C]) Parse(args []string) *Settings[C] {
return s return s
} }
func (s *Settings[C]) HelpRequested() bool {
for _, err := range s.errors {
if err == flag.ErrHelp {
return true
}
}
return false
}
{"version":"1.3.1"} {"version":"1.4.0"}