diff options
| author | Grégoire Duchêne <gduchene@awhk.org> | 2022-06-19 13:31:49 +0100 |
|---|---|---|
| committer | Grégoire Duchêne <gduchene@awhk.org> | 2022-06-19 13:40:39 +0100 |
| commit | 41d23c22df853b0bdf35e2d0988c8d4c4281d42f (patch) | |
| tree | 48ddc49039d6ceded97914374171157515b004be /main.go | |
| parent | 21456154ef3172490cef72a3b69bf59bb9795e43 (diff) | |
Move redirection logic to a separate packagev0.4.0
Also, add an optional ‘-c’ flag to pass the path to a configuration file
that can be used to specify several matching patterns and replacements.
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 19 |
1 files changed, 18 insertions, 1 deletions
@@ -7,20 +7,24 @@ 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") @@ -32,7 +36,20 @@ func main() { done := make(chan os.Signal, 1) signal.Notify(done, os.Interrupt, syscall.SIGTERM) - srv := http.Server{Handler: &redirector{regexp.MustCompile(*from), *to, *vcs}} + 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) |
