From bdace0aacf1a69b0034ba251155922cd97d20248 Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Mon, 4 Apr 2022 16:25:30 -0400 Subject: [PATCH 1/3] main: --file flag can be repeated now Signed-off-by: Vincent Batts --- cmd/gomtree/main.go | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/cmd/gomtree/main.go b/cmd/gomtree/main.go index 08f5aa0..cb2f96b 100644 --- a/cmd/gomtree/main.go +++ b/cmd/gomtree/main.go @@ -27,7 +27,7 @@ func main() { Aliases: []string{"c"}, Usage: "Create a directory hierarchy spec", }, - &cli.StringFlag{ + &cli.StringSliceFlag{ Name: "file", Aliases: []string{"f"}, Usage: "Directory hierarchy spec to validate", @@ -182,9 +182,9 @@ func mainApp(c *cli.Context) error { ) // -f - if c.String("file") != "" && !c.Bool("create") { + if len(c.StringSlice("file")) > 0 && !c.Bool("create") { // load the hierarchy, if we're not creating a new spec - fh, err := os.Open(c.String("file")) + fh, err := os.Open(c.StringSlice("file")[0]) if err != nil { return err } @@ -206,21 +206,25 @@ func mainApp(c *cli.Context) error { } if c.String("result-format") == "json" { - // if they're asking for json, give it to them - data := map[string][]mtree.Keyword{c.String("file"): specKeywords} - buf, err := json.MarshalIndent(data, "", " ") - if err != nil { - return err - } - fmt.Println(string(buf)) - } else { - fmt.Printf("Keywords used in [%s]:\n", c.String("file")) - for _, kw := range specKeywords { - fmt.Printf(" %s", kw) - if _, ok := mtree.KeywordFuncs[kw]; !ok { - fmt.Print(" (unsupported)") + for _, file := range c.StringSlice("file") { + // if they're asking for json, give it to them + data := map[string][]mtree.Keyword{file: specKeywords} + buf, err := json.MarshalIndent(data, "", " ") + if err != nil { + return err + } + fmt.Println(string(buf)) + } + } else { + for _, file := range c.StringSlice("file") { + fmt.Printf("Keywords used in [%s]:\n", file) + for _, kw := range specKeywords { + fmt.Printf(" %s", kw) + if _, ok := mtree.KeywordFuncs[kw]; !ok { + fmt.Print(" (unsupported)") + } + fmt.Printf("\n") } - fmt.Printf("\n") } } return nil @@ -338,8 +342,8 @@ func mainApp(c *cli.Context) error { // -c if c.Bool("create") { fh := os.Stdout - if c.String("file") != "" { - fh, err = os.Create(c.String("file")) + if len(c.StringSlice("file")) > 0 { + fh, err = os.Create(c.StringSlice("file")[0]) if err != nil { return err } From b5e683dfc9af717f52d0c893d86853930d220e7a Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Mon, 4 Apr 2022 17:43:17 -0400 Subject: [PATCH 2/3] main: compare two files with two -f flags Fixes: #159 ```shell vbatts@fogel:~/src/github.com/vbatts/go-mtree$ ./gomtree -c -f foo vbatts@fogel:~/src/github.com/vbatts/go-mtree$ ./gomtree -c -f bar -K sha256 vbatts@fogel:~/src/github.com/vbatts/go-mtree$ ./gomtree -f foo -f bar "foo": unexpected path ".": keyword "time": expected 1649109728.228935367; got 1649109734.412959677 FATA[0000] manifest validation failed vbatts@fogel:~/src/github.com/vbatts/go-mtree$ echo $? 1 ``` Signed-off-by: Vincent Batts --- cmd/gomtree/main.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/cmd/gomtree/main.go b/cmd/gomtree/main.go index cb2f96b..54cfb20 100644 --- a/cmd/gomtree/main.go +++ b/cmd/gomtree/main.go @@ -294,6 +294,17 @@ func mainApp(c *cli.Context) error { if err != nil { return err } + } else if len(c.StringSlice("file")) > 1 { + // load this second hierarchy file provided + fh, err := os.Open(c.StringSlice("file")[1]) + if err != nil { + return err + } + stateDh, err = mtree.ParseSpec(fh) + fh.Close() + if err != nil { + return err + } } else { // with a root directory stateDh, err = mtree.Walk(rootPath, excludes, currentKeywords, nil) From 2d841d54bf69232ffd82c3d1e6d0146a5d029b2d Mon Sep 17 00:00:00 2001 From: Vincent Batts Date: Mon, 4 Apr 2022 18:13:23 -0400 Subject: [PATCH 3/3] test: testing the double -f comparison Signed-off-by: Vincent Batts --- test/cli/0010.sh | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 test/cli/0010.sh diff --git a/test/cli/0010.sh b/test/cli/0010.sh new file mode 100644 index 0000000..265fdc0 --- /dev/null +++ b/test/cli/0010.sh @@ -0,0 +1,25 @@ +#!/bin/bash +set -e + +name=$(basename $0) +root="$(dirname $(dirname $(dirname $0)))" +gomtree=$(go run ${root}/test/realpath/main.go ${root}/gomtree) +t=$(mktemp -d /tmp/go-mtree.XXXXXX) + +echo "[${name}] Running in ${t}" + +## testing comparing two files + +pushd ${root} +mkdir -p ${t}/extract +git archive --format=tar HEAD^{tree} . | tar -C ${t}/extract/ -x + +${gomtree} -K sha256digest -c -p ${t}/extract/ > ${t}/${name}-1.mtree +rm -rf ${t}/extract/*.go +${gomtree} -K sha256digest -c -p ${t}/extract/ > ${t}/${name}-2.mtree + +# this _ought_ to fail because the files are missing now +! ${gomtree} -f ${t}/${name}-1.mtree -f ${t}/${name}-2.mtree + +popd +rm -rf ${t}