diff options
Diffstat (limited to 'caddyfile/parse.go')
-rw-r--r-- | caddyfile/parse.go | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/caddyfile/parse.go b/caddyfile/parse.go index 13b23db05..c43c21b31 100644 --- a/caddyfile/parse.go +++ b/caddyfile/parse.go @@ -212,7 +212,7 @@ func (p *parser) doImport() error { // and then use glob to get list of matching filenames absFile, err := filepath.Abs(p.Dispenser.filename) if err != nil { - return p.Errf("Failed to get absolute path of file: %s", p.Dispenser.filename) + return p.Errf("Failed to get absolute path of file: %s: %v", p.Dispenser.filename, err) } var matches []string @@ -246,8 +246,8 @@ func (p *parser) doImport() error { if err != nil { return err } + var importLine int - importDir := filepath.Dir(importFile) for i, token := range newTokens { if token.Text == "import" { importLine = token.Line @@ -260,7 +260,7 @@ func (p *parser) doImport() error { } else if !filepath.IsAbs(importFile) { abs = filepath.Join(filepath.Dir(absFile), token.Text) } else { - abs = filepath.Join(importDir, token.Text) + abs = filepath.Join(filepath.Dir(importFile), token.Text) } newTokens[i] = Token{ Text: abs, @@ -269,6 +269,7 @@ func (p *parser) doImport() error { } } } + importedTokens = append(importedTokens, newTokens...) } @@ -300,8 +301,12 @@ func (p *parser) doSingleImport(importFile string) ([]Token, error) { return nil, p.Errf("Could not read tokens while importing %s: %v", importFile, err) } - // Tack the filename onto these tokens so errors show the imported file's name - filename := filepath.Base(importFile) + // Tack the file path onto these tokens so errors show the imported file's name + // (we use full, absolute path to avoid bugs: issue #1892) + filename, err := filepath.Abs(importFile) + if err != nil { + return nil, p.Errf("Failed to get absolute path of file: %s: %v", p.Dispenser.filename, err) + } for i := 0; i < len(importedTokens); i++ { importedTokens[i].File = filename } |