diff options
Diffstat (limited to 'cmd/go-import-redirect')
| -rw-r--r-- | cmd/go-import-redirect/main.go | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/cmd/go-import-redirect/main.go b/cmd/go-import-redirect/main.go new file mode 100644 index 0000000..dd7e262 --- /dev/null +++ b/cmd/go-import-redirect/main.go @@ -0,0 +1,65 @@ +// SPDX-FileCopyrightText: © 2019 Grégoire Duchêne <gduchene@awhk.org> +// SPDX-License-Identifier: ISC + +//go:build !aws + +package main + +import ( + "context" + "encoding/json" + "flag" + "log" + "net/http" + "os" + "os/signal" + "regexp" + "strings" + "syscall" + "time" + + "go.awhk.org/core" + "go.awhk.org/go-import-redirect/pkg/redirector" +) + +var ( + addr = flag.String("addr", "localhost:8080", "address to listen on") + cfg = flag.String("c", "", "path to a configuration file") + from = flag.String("from", "", "package prefix to remove") + to = flag.String("to", "", "repository prefix to add") + vcs = flag.String("vcs", "git", "version control system to signal") +) + +func main() { + flag.Parse() + + done := make(chan os.Signal, 1) + signal.Notify(done, os.Interrupt, syscall.SIGTERM) + + h := &redirector.Redirector{Template: redirector.DefaultTemplate} + if *cfg != "" { + if err := json.NewDecoder(core.Must(os.Open(*cfg))).Decode(&h.Transformers); err != nil { + log.Fatalln(err) + } + } else { + h.Transformers = append(h.Transformers, redirector.Transformer{ + Pattern: &redirector.Pattern{regexp.MustCompile(strings.ReplaceAll(*from, `\\`, `\`))}, + Replacement: *to, + VCS: *vcs, + }) + } + + srv := http.Server{Handler: h} + go func() { + if err := srv.Serve(core.Must(core.Listen(*addr))); err != nil && err != http.ErrServerClosed { + log.Fatalln("server.Serve:", err) + } + }() + + <-done + ctx, cancel := context.WithTimeout(context.Background(), time.Second) + defer cancel() + if err := srv.Shutdown(ctx); err != nil && err != http.ErrServerClosed { + log.Fatalln("server.Shutdown:", err) + } +} |
