use csvvalue package for parsing csv inputs

This package is better suited for parsing single-line
CSV strings.

Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
Tonis Tiigi 2024-06-27 20:31:23 -07:00
parent af902caeaa
commit f7a32361ea
No known key found for this signature in database
GPG Key ID: AFA9DE5F8AB7AF39
9 changed files with 19 additions and 26 deletions

View File

@ -2,7 +2,6 @@ package bake
import ( import (
"context" "context"
"encoding/csv"
"io" "io"
"os" "os"
"path" "path"
@ -27,6 +26,7 @@ import (
"github.com/moby/buildkit/client/llb" "github.com/moby/buildkit/client/llb"
"github.com/moby/buildkit/session/auth/authprovider" "github.com/moby/buildkit/session/auth/authprovider"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/tonistiigi/go-csvvalue"
"github.com/zclconf/go-cty/cty" "github.com/zclconf/go-cty/cty"
"github.com/zclconf/go-cty/cty/convert" "github.com/zclconf/go-cty/cty/convert"
) )
@ -1393,8 +1393,7 @@ func removeAttestDupes(s []string) []string {
} }
func parseOutput(str string) map[string]string { func parseOutput(str string) map[string]string {
csvReader := csv.NewReader(strings.NewReader(str)) fields, err := csvvalue.Fields(str, nil)
fields, err := csvReader.Read()
if err != nil { if err != nil {
return nil return nil
} }

View File

@ -2,7 +2,6 @@ package builder
import ( import (
"context" "context"
"encoding/csv"
"encoding/json" "encoding/json"
"net/url" "net/url"
"os" "os"
@ -27,6 +26,7 @@ import (
"github.com/moby/buildkit/util/progress/progressui" "github.com/moby/buildkit/util/progress/progressui"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/spf13/pflag" "github.com/spf13/pflag"
"github.com/tonistiigi/go-csvvalue"
"golang.org/x/sync/errgroup" "golang.org/x/sync/errgroup"
) )
@ -601,8 +601,7 @@ func csvToMap(in []string) (map[string]string, error) {
} }
m := make(map[string]string, len(in)) m := make(map[string]string, len(in))
for _, s := range in { for _, s := range in {
csvReader := csv.NewReader(strings.NewReader(s)) fields, err := csvvalue.Fields(s, nil)
fields, err := csvReader.Read()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -5,7 +5,6 @@ import (
"context" "context"
"crypto/sha256" "crypto/sha256"
"encoding/base64" "encoding/base64"
"encoding/csv"
"encoding/hex" "encoding/hex"
"encoding/json" "encoding/json"
"fmt" "fmt"
@ -59,6 +58,7 @@ import (
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/spf13/pflag" "github.com/spf13/pflag"
"github.com/tonistiigi/go-csvvalue"
"go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/metric"
"google.golang.org/grpc/codes" "google.golang.org/grpc/codes"
@ -982,9 +982,9 @@ func (cfg *invokeConfig) parseInvokeConfig(invoke, on string) error {
return nil return nil
} }
csvReader := csv.NewReader(strings.NewReader(invoke)) csvParser := csvvalue.NewParser()
csvReader.LazyQuotes = true csvParser.LazyQuotes = true
fields, err := csvReader.Read() fields, err := csvParser.Fields(invoke, nil)
if err != nil { if err != nil {
return err return err
} }

2
go.mod
View File

@ -42,6 +42,7 @@ require (
github.com/spf13/pflag v1.0.5 github.com/spf13/pflag v1.0.5
github.com/stretchr/testify v1.9.0 github.com/stretchr/testify v1.9.0
github.com/tonistiigi/fsutil v0.0.0-20240424095704-91a3fc46842c github.com/tonistiigi/fsutil v0.0.0-20240424095704-91a3fc46842c
github.com/tonistiigi/go-csvvalue v0.0.0-20240619222358-bb8dd5cba3c2
github.com/zclconf/go-cty v1.14.4 github.com/zclconf/go-cty v1.14.4
go.opentelemetry.io/otel v1.21.0 go.opentelemetry.io/otel v1.21.0
go.opentelemetry.io/otel/metric v1.21.0 go.opentelemetry.io/otel/metric v1.21.0
@ -140,7 +141,6 @@ require (
github.com/secure-systems-lab/go-securesystemslib v0.4.0 // indirect github.com/secure-systems-lab/go-securesystemslib v0.4.0 // indirect
github.com/shibumi/go-pathspec v1.3.0 // indirect github.com/shibumi/go-pathspec v1.3.0 // indirect
github.com/theupdateframework/notary v0.7.0 // indirect github.com/theupdateframework/notary v0.7.0 // indirect
github.com/tonistiigi/go-csvvalue v0.0.0-20240619222358-bb8dd5cba3c2 // indirect
github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea // indirect github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea // indirect
github.com/tonistiigi/vt100 v0.0.0-20240514184818-90bafcd6abab // indirect github.com/tonistiigi/vt100 v0.0.0-20240514184818-90bafcd6abab // indirect
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect

View File

@ -1,13 +1,13 @@
package buildflags package buildflags
import ( import (
"encoding/csv"
"fmt" "fmt"
"strconv" "strconv"
"strings" "strings"
controllerapi "github.com/docker/buildx/controller/pb" controllerapi "github.com/docker/buildx/controller/pb"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/tonistiigi/go-csvvalue"
) )
func CanonicalizeAttest(attestType string, in string) string { func CanonicalizeAttest(attestType string, in string) string {
@ -45,8 +45,7 @@ func ParseAttest(in string) (*controllerapi.Attest, error) {
return nil, nil return nil, nil
} }
csvReader := csv.NewReader(strings.NewReader(in)) fields, err := csvvalue.Fields(in, nil)
fields, err := csvReader.Read()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -2,20 +2,19 @@ package buildflags
import ( import (
"context" "context"
"encoding/csv"
"os" "os"
"strings" "strings"
awsconfig "github.com/aws/aws-sdk-go-v2/config" awsconfig "github.com/aws/aws-sdk-go-v2/config"
controllerapi "github.com/docker/buildx/controller/pb" controllerapi "github.com/docker/buildx/controller/pb"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/tonistiigi/go-csvvalue"
) )
func ParseCacheEntry(in []string) ([]*controllerapi.CacheOptionsEntry, error) { func ParseCacheEntry(in []string) ([]*controllerapi.CacheOptionsEntry, error) {
outs := make([]*controllerapi.CacheOptionsEntry, 0, len(in)) outs := make([]*controllerapi.CacheOptionsEntry, 0, len(in))
for _, in := range in { for _, in := range in {
csvReader := csv.NewReader(strings.NewReader(in)) fields, err := csvvalue.Fields(in, nil)
fields, err := csvReader.Read()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -1,7 +1,6 @@
package buildflags package buildflags
import ( import (
"encoding/csv"
"regexp" "regexp"
"strings" "strings"
@ -11,6 +10,7 @@ import (
"github.com/moby/buildkit/exporter/containerimage/exptypes" "github.com/moby/buildkit/exporter/containerimage/exptypes"
ocispecs "github.com/opencontainers/image-spec/specs-go/v1" ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/tonistiigi/go-csvvalue"
) )
func ParseExports(inp []string) ([]*controllerapi.ExportEntry, error) { func ParseExports(inp []string) ([]*controllerapi.ExportEntry, error) {
@ -19,8 +19,7 @@ func ParseExports(inp []string) ([]*controllerapi.ExportEntry, error) {
return nil, nil return nil, nil
} }
for _, s := range inp { for _, s := range inp {
csvReader := csv.NewReader(strings.NewReader(s)) fields, err := csvvalue.Fields(s, nil)
fields, err := csvReader.Read()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -1,12 +1,12 @@
package buildflags package buildflags
import ( import (
"encoding/csv"
"strconv" "strconv"
"strings" "strings"
controllerapi "github.com/docker/buildx/controller/pb" controllerapi "github.com/docker/buildx/controller/pb"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/tonistiigi/go-csvvalue"
) )
const defaultPrintFunc = "build" const defaultPrintFunc = "build"
@ -16,8 +16,7 @@ func ParsePrintFunc(str string) (*controllerapi.PrintFunc, error) {
return nil, nil return nil, nil
} }
csvReader := csv.NewReader(strings.NewReader(str)) fields, err := csvvalue.Fields(str, nil)
fields, err := csvReader.Read()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -1,11 +1,11 @@
package buildflags package buildflags
import ( import (
"encoding/csv"
"strings" "strings"
controllerapi "github.com/docker/buildx/controller/pb" controllerapi "github.com/docker/buildx/controller/pb"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/tonistiigi/go-csvvalue"
) )
func ParseSecretSpecs(sl []string) ([]*controllerapi.Secret, error) { func ParseSecretSpecs(sl []string) ([]*controllerapi.Secret, error) {
@ -21,8 +21,7 @@ func ParseSecretSpecs(sl []string) ([]*controllerapi.Secret, error) {
} }
func parseSecret(value string) (*controllerapi.Secret, error) { func parseSecret(value string) (*controllerapi.Secret, error) {
csvReader := csv.NewReader(strings.NewReader(value)) fields, err := csvvalue.Fields(value, nil)
fields, err := csvReader.Read()
if err != nil { if err != nil {
return nil, errors.Wrap(err, "failed to parse csv secret") return nil, errors.Wrap(err, "failed to parse csv secret")
} }