diff --git a/config/module/detect_file.go b/config/module/detect_file.go index 2b8dbacbe..a7eb4c49f 100644 --- a/config/module/detect_file.go +++ b/config/module/detect_file.go @@ -2,6 +2,7 @@ package module import ( "fmt" + "os" "path/filepath" "runtime" ) @@ -20,7 +21,26 @@ func (d *FileDetector) Detect(src, pwd string) (string, bool, error) { "relative paths require a module with a pwd") } + // Stat the pwd to determine if its a symbolic link. If it is, + // then the pwd becomes the original directory. Otherwise, + // `filepath.Join` below does some weird stuff. + // + // We just ignore if the pwd doesn't exist. That error will be + // caught later when we try to use the URL. + if fi, err := os.Lstat(pwd); !os.IsNotExist(err) { + if err != nil { + return "", true, err + } + if fi.Mode()&os.ModeSymlink != 0 { + pwd, err = os.Readlink(pwd) + if err != nil { + return "", true, err + } + } + } + src = filepath.Join(pwd, src) + println(src) } return fmtFileURL(src), true, nil } diff --git a/config/module/tree_test.go b/config/module/tree_test.go index 2e4a82eec..9ac0c582d 100644 --- a/config/module/tree_test.go +++ b/config/module/tree_test.go @@ -126,7 +126,7 @@ func TestTreeLoad_parentRef(t *testing.T) { } actual := strings.TrimSpace(tree.String()) - expected := strings.TrimSpace(treeLoadStr) + expected := strings.TrimSpace(treeLoadParentStr) if actual != expected { t.Fatalf("bad: \n\n%s", actual) } @@ -277,6 +277,11 @@ root foo ` +const treeLoadParentStr = ` +root + a + b +` const treeLoadSubdirStr = ` root foo