Commit 1f8556b2 authored by Nick Thomas's avatar Nick Thomas

Initial feature-flagged go/ruby switch

parent 1cc2993f
......@@ -12,6 +12,7 @@ tags
custom_hooks
hooks/*.d
/go_build
/bin/gitlab-shell
/bin/gitaly-upload-pack
/bin/gitaly-receive-pack
/bin/gitaly-upload-archive
......@@ -49,3 +49,6 @@ log_level: INFO
# Set to true to see real usernames in the logs instead of key ids, which is easier to follow, but
# incurs an extra API call on every gitlab-shell command.
audit_usernames: false
# Feature flag: go or ruby
experimental: false
package main
import (
"fmt"
"os"
"path/filepath"
"syscall"
"gitlab.com/gitlab-org/gitlab-shell/go/internal/config"
)
func experiment() {
fmt.Println("Experiment! nothing works!")
os.Exit(1)
}
func main() {
root := filepath.Dir(os.Args[0])
ruby := filepath.Join(root, "gitlab-shell-ruby")
config, err := config.New()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
if config.Experimental {
experiment()
} else {
execErr := syscall.Exec(ruby, os.Args, os.Environ())
if execErr != nil {
fmt.Fprintf(os.Stderr, "Failed to exec(%q): %v\n", ruby, execErr)
os.Exit(1)
}
}
}
......@@ -14,9 +14,10 @@ const (
)
type Config struct {
RootDir string
LogFile string `yaml:"log_file"`
LogFormat string `yaml:"log_format"`
RootDir string
LogFile string `yaml:"log_file"`
LogFormat string `yaml:"log_format"`
Experimental bool `yaml:"experimental"`
}
func New() (*Config, error) {
......
......@@ -8,14 +8,16 @@ import (
func TestConfigLogFile(t *testing.T) {
testRoot := "/foo/bar"
testCases := []struct {
yaml string
path string
format string
yaml string
path string
format string
experimental bool
}{
{path: "/foo/bar/gitlab-shell.log", format: "text"},
{yaml: "log_file: my-log.log", path: "/foo/bar/my-log.log", format: "text"},
{yaml: "log_file: /qux/my-log.log", path: "/qux/my-log.log", format: "text"},
{yaml: "log_format: json", path: "/foo/bar/gitlab-shell.log", format: "json"},
{yaml: "experimental: true", path: "/foo/bar/gitlab-shell.log", format: "text", experimental: true},
}
for _, tc := range testCases {
......@@ -25,6 +27,10 @@ func TestConfigLogFile(t *testing.T) {
t.Fatal(err)
}
if cfg.Experimental != tc.experimental {
t.Fatalf("expected %v, got %v", tc.experimental, cfg.Experimental)
}
if cfg.LogFile != tc.path {
t.Fatalf("expected %q, got %q", tc.path, cfg.LogFile)
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment