Change convert to use a struct instead of global variables
This commit is contained in:
parent
97fcfd145c
commit
59f8bdcc54
@ -20,47 +20,46 @@ import (
|
|||||||
"github.com/kr/pretty"
|
"github.com/kr/pretty"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
type convertFlags struct {
|
||||||
convertFS = flag.NewFlagSet("convert", flag.ExitOnError)
|
write bool
|
||||||
convertFlags = struct {
|
printXML bool
|
||||||
write bool
|
printResource bool
|
||||||
printXML bool
|
recurse bool
|
||||||
printResource bool
|
logging bool
|
||||||
recurse bool
|
parts string
|
||||||
logging bool
|
}
|
||||||
parts string
|
|
||||||
}{}
|
|
||||||
)
|
|
||||||
|
|
||||||
func convert(arguments []string) {
|
func convert(arguments ...string) error {
|
||||||
convertFS.BoolVar(&convertFlags.write, "w", false, "Replace the file with XML data")
|
var (
|
||||||
convertFS.BoolVar(&convertFlags.printXML, "x", false, "Print XML to stdout")
|
convertFS = flag.NewFlagSet("convert", flag.ExitOnError)
|
||||||
convertFS.BoolVar(&convertFlags.printResource, "R", false, "Print the resource struct to stderr")
|
cvFlags = convertFlags{}
|
||||||
convertFS.BoolVar(&convertFlags.recurse, "r", false, "Recurse into directories")
|
)
|
||||||
convertFS.BoolVar(&convertFlags.logging, "l", false, "Enable logging to stderr")
|
convertFS.BoolVar(&cvFlags.write, "w", false, "Replace the file with XML data")
|
||||||
convertFS.StringVar(&convertFlags.parts, "p", "", "Parts to filter logging for, comma separated")
|
convertFS.BoolVar(&cvFlags.printXML, "x", false, "Print XML to stdout")
|
||||||
|
convertFS.BoolVar(&cvFlags.printResource, "R", false, "Print the resource struct to stderr")
|
||||||
|
convertFS.BoolVar(&cvFlags.recurse, "r", false, "Recurse into directories")
|
||||||
|
convertFS.BoolVar(&cvFlags.logging, "l", false, "Enable logging to stderr")
|
||||||
|
convertFS.StringVar(&cvFlags.parts, "p", "", "Parts to filter logging for, comma separated")
|
||||||
convertFS.Parse(arguments)
|
convertFS.Parse(arguments)
|
||||||
if convertFlags.logging {
|
if cvFlags.logging {
|
||||||
lsgo.Logger = lsgo.NewFilter(map[string][]string{
|
lsgo.Logger = lsgo.NewFilter(map[string][]string{
|
||||||
"part": strings.Split(convertFlags.parts, ","),
|
"part": strings.Split(cvFlags.parts, ","),
|
||||||
}, log.NewLogfmtLogger(os.Stderr))
|
}, log.NewLogfmtLogger(os.Stderr))
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, v := range convertFS.Args() {
|
for _, v := range convertFS.Args() {
|
||||||
fi, err := os.Stat(v)
|
fi, err := os.Stat(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintln(os.Stderr, err)
|
return err
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
switch {
|
switch {
|
||||||
case !fi.IsDir():
|
case !fi.IsDir():
|
||||||
err = openLSF(v)
|
err = cvFlags.openLSF(v)
|
||||||
if err != nil && !errors.As(err, &lsgo.HeaderError{}) {
|
if err != nil && !errors.As(err, &lsgo.HeaderError{}) {
|
||||||
fmt.Fprintln(os.Stderr, err)
|
return err
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case convertFlags.recurse:
|
case cvFlags.recurse:
|
||||||
_ = filepath.Walk(v, func(path string, info os.FileInfo, err error) error {
|
_ = filepath.Walk(v, func(path string, info os.FileInfo, err error) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil
|
return nil
|
||||||
@ -71,21 +70,21 @@ func convert(arguments []string) {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
err = openLSF(path)
|
err = cvFlags.openLSF(path)
|
||||||
if err != nil && !errors.As(err, &lsgo.HeaderError{}) {
|
if err != nil && !errors.Is(err, lsgo.ErrFormat) {
|
||||||
fmt.Fprintln(os.Stderr, err)
|
fmt.Fprintln(os.Stderr, err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
|
||||||
default:
|
default:
|
||||||
fmt.Fprintf(os.Stderr, "lsconvert: %s: Is a directory\n", v)
|
return fmt.Errorf("lsconvert: %s: Is a directory\n", v)
|
||||||
os.Exit(1)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func openLSF(filename string) error {
|
func (cf *convertFlags) openLSF(filename string) error {
|
||||||
var (
|
var (
|
||||||
l *lsgo.Resource
|
l *lsgo.Resource
|
||||||
err error
|
err error
|
||||||
@ -99,21 +98,21 @@ func openLSF(filename string) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("reading LSF file %s failed: %w", filename, err)
|
return fmt.Errorf("reading LSF file %s failed: %w", filename, err)
|
||||||
}
|
}
|
||||||
if convertFlags.printResource {
|
if cf.printResource {
|
||||||
pretty.Log(l)
|
pretty.Log(l)
|
||||||
}
|
}
|
||||||
if convertFlags.printXML || convertFlags.write {
|
if cf.printXML || cf.write {
|
||||||
n, err = marshalXML(l)
|
n, err = marshalXML(l)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("creating XML from LSF file %s failed: %w", filename, err)
|
return fmt.Errorf("creating XML from LSF file %s failed: %w", filename, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if convertFlags.write {
|
if cf.write {
|
||||||
f, err = os.OpenFile(filename, os.O_TRUNC|os.O_RDWR, 0o666)
|
f, err = os.OpenFile(filename, os.O_TRUNC|os.O_RDWR, 0o666)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("writing XML from LSF file %s failed: %w", filename, err)
|
return fmt.Errorf("writing XML from LSF file %s failed: %w", filename, err)
|
||||||
}
|
}
|
||||||
} else if convertFlags.printXML {
|
} else if cf.printXML {
|
||||||
f = os.Stdout
|
f = os.Stdout
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,7 +187,7 @@ func readLSF(filename string) (*lsgo.Resource, error) {
|
|||||||
|
|
||||||
l, _, err = lsgo.Decode(r)
|
l, _, err = lsgo.Decode(r)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, fmt.Errorf("decoding %q failed: %w", filename, err)
|
||||||
}
|
}
|
||||||
return &l, nil
|
return &l, nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user