diff options
author | Patrick Steinhardt <psteinhardt@gitlab.com> | 2022-06-30 14:59:47 +0300 |
---|---|---|
committer | Patrick Steinhardt <psteinhardt@gitlab.com> | 2022-07-06 09:13:23 +0300 |
commit | d3701bb9efdd2cbfdf21b2560ea22f273ee1120b (patch) | |
tree | c1c83e72f5aedcbaeffe82bc8daeeb2618aaeda0 | |
parent | 8a7bee35e279a75a4e861ccff4d1eb222df15adc (diff) |
git2go: Convert injection of feature flags to not use raw flags
Convert the logic to inject and extract feature flags in `gitaly-git2go`
to not use raw feature flags anymore. Instead, use `FromMetadataKey()`
and `FromContext()` to work on typed `FeatureFlag`s.
This prepares for the removal of `featureflag.Raw`.
-rw-r--r-- | cmd/gitaly-git2go-v15/main.go | 35 | ||||
-rw-r--r-- | internal/git2go/executor.go | 12 |
2 files changed, 25 insertions, 22 deletions
diff --git a/cmd/gitaly-git2go-v15/main.go b/cmd/gitaly-git2go-v15/main.go index 060cdb033..2ce2796ae 100644 --- a/cmd/gitaly-git2go-v15/main.go +++ b/cmd/gitaly-git2go-v15/main.go @@ -9,7 +9,6 @@ import ( "flag" "fmt" "os" - "strconv" "strings" "github.com/grpc-ecosystem/go-grpc-middleware/logging/logrus/ctxlogrus" @@ -17,7 +16,6 @@ import ( "github.com/sirupsen/logrus" "gitlab.com/gitlab-org/gitaly/v15/internal/git2go" glog "gitlab.com/gitlab-org/gitaly/v15/internal/log" - "gitlab.com/gitlab-org/gitaly/v15/internal/metadata" "gitlab.com/gitlab-org/gitaly/v15/internal/metadata/featureflag" "gitlab.com/gitlab-org/labkit/correlation" ) @@ -133,12 +131,8 @@ func main() { subcmdLogger.Infof("starting %s command", subcmdFlags.Name()) ctx = ctxlogrus.ToContext(ctx, subcmdLogger) - - featureFlags := make(featureflag.Raw) - enabledFeatureFlags.SetRaw(featureFlags, true) - disabledFeatureFlags.SetRaw(featureFlags, false) - - ctx = metadata.OutgoingToIncoming(featureflag.OutgoingWithRaw(ctx, featureFlags)) + ctx = enabledFeatureFlags.ToContext(ctx, true) + ctx = disabledFeatureFlags.ToContext(ctx, false) if err := subcmd.Run(ctx, decoder, encoder); err != nil { subcmdLogger.WithError(err).Errorf("%s command failed", subcmdFlags.Name()) @@ -148,10 +142,14 @@ func main() { subcmdLogger.Infof("%s command finished", subcmdFlags.Name()) } -type featureFlagArg []string +type featureFlagArg []featureflag.FeatureFlag func (v *featureFlagArg) String() string { - return strings.Join(*v, ",") + metadataKeys := make([]string, 0, len(*v)) + for _, flag := range *v { + metadataKeys = append(metadataKeys, flag.MetadataKey()) + } + return strings.Join(metadataKeys, ",") } func (v *featureFlagArg) Set(s string) error { @@ -159,15 +157,22 @@ func (v *featureFlagArg) Set(s string) error { return nil } - for _, enabledFF := range strings.Split(s, ",") { - *v = append(*v, enabledFF) + for _, metadataKey := range strings.Split(s, ",") { + flag, err := featureflag.FromMetadataKey(metadataKey) + if err != nil { + return err + } + + *v = append(*v, flag) } return nil } -func (v featureFlagArg) SetRaw(raw featureflag.Raw, enabled bool) { - for _, ff := range v { - raw[ff] = strconv.FormatBool(enabled) +func (v featureFlagArg) ToContext(ctx context.Context, enabled bool) context.Context { + for _, flag := range v { + ctx = featureflag.IncomingCtxWithFeatureFlag(ctx, flag, enabled) } + + return ctx } diff --git a/internal/git2go/executor.go b/internal/git2go/executor.go index c1e220f43..5007b6c6f 100644 --- a/internal/git2go/executor.go +++ b/internal/git2go/executor.go @@ -59,14 +59,12 @@ func (b *Executor) run(ctx context.Context, repo repository.GitRepo, stdin io.Re var enabledFeatureFlags, disabledFeatureFlags []string - for ff, value := range featureflag.RawFromContext(ctx) { + for flag, value := range featureflag.FromContext(ctx) { switch value { - case "true": - enabledFeatureFlags = append(enabledFeatureFlags, ff) - case "false": - disabledFeatureFlags = append(disabledFeatureFlags, ff) - default: - return nil, fmt.Errorf("invalid value for feature flag %q: %q", ff, value) + case true: + enabledFeatureFlags = append(enabledFeatureFlags, flag.MetadataKey()) + case false: + disabledFeatureFlags = append(disabledFeatureFlags, flag.MetadataKey()) } } |