From 623c3617263ddcceea808ea4e7edcc6ebe43a837 Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Tue, 19 Jan 2021 14:49:54 -0700 Subject: [PATCH] Resolve relative replacements This allows us to use user-defined replacements that have a relative path, since our temporary modules exist in different dirs. --- cmd/xcaddy/main.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/cmd/xcaddy/main.go b/cmd/xcaddy/main.go index bc0fe58..f2766e7 100644 --- a/cmd/xcaddy/main.go +++ b/cmd/xcaddy/main.go @@ -175,7 +175,7 @@ func runDev(ctx context.Context, args []string) error { // and since this tool is a carry-through for the user's actual // go.mod, we need to transfer their replace directives through // to the one we're making - cmd = exec.Command("go", "list", "-m", "-f={{if .Replace}}{{.Path}} => {{.Replace}}{{end}}", "all") + cmd = exec.Command("go", "list", "-m", "-f={{if .Replace}}{{.Path}}=>{{.Replace}}{{end}}", "all") cmd.Stderr = os.Stderr out, err = cmd.Output() if err != nil { @@ -186,10 +186,14 @@ func runDev(ctx context.Context, args []string) error { if len(parts) != 2 || parts[0] == "" || parts[1] == "" { continue } - replacements = append(replacements, xcaddy.NewReplace( - strings.TrimSpace(parts[0]), - strings.TrimSpace(parts[1]), - )) + + // adjust relative replacements in original module since our temporary module is in a different directory + if !filepath.IsAbs(parts[1]) { + parts[1] = filepath.Join(moduleDir, parts[1]) + log.Printf("[INFO] Resolved relative replacement %s to %s", line, parts[1]) + } + + replacements = append(replacements, xcaddy.NewReplace(parts[0], parts[1])) } // reconcile remaining path segments; for example if a module foo/a