fix-recursive-includes
Fix recursive includes beyond depth 3. Also add a test case for the bug.
This commit is contained in:
parent
1a8353457d
commit
5e576e9ff0
@ -123,6 +123,7 @@ import Text.ParserCombinators.Parsec hiding (parse)
|
||||
import Prelude hiding (readFile, putStr, putStrLn, print, getContents)
|
||||
import System.IO.UTF8
|
||||
#endif
|
||||
import System.FilePath
|
||||
import Hledger.Data.Utils
|
||||
import Hledger.Data.Types
|
||||
import Hledger.Data.Dates
|
||||
@ -214,7 +215,7 @@ ledgerInclude = do many1 spacenonewline
|
||||
outerPos <- getPosition
|
||||
let inIncluded = show outerPos ++ " in included file " ++ show filename ++ ":\n"
|
||||
return $ do contents <- expandPath outerPos filename >>= readFileE outerPos
|
||||
case runParser journalFile outerState filename contents of
|
||||
case runParser journalFile outerState (combine ((takeDirectory . sourceName) outerPos) filename) contents of
|
||||
Right l -> l `catchError` (throwError . (inIncluded ++))
|
||||
Left perr -> throwError $ inIncluded ++ show perr
|
||||
where readFileE outerPos filename = ErrorT $ liftM Right (readFile filename) `catch` leftError
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
# nested includes in subdirectories
|
||||
mkdir -p b/c ; printf '2010/1/1\n (C) 1\n' >b/c/c.journal ; printf '2010/1/1\n (B) 1\n!include c/c.journal\n' >b/b.journal ; printf '2010/1/1\n (A) 1\n!include b/b.journal\n' >a.journal ; hledger -f a.journal print; rm -rf b
|
||||
mkdir -p b/c/d ; printf '2010/1/1\n (D) 1\n' >b/c/d/d.journal ; printf '2010/1/1\n (C) 1\n!include d/d.journal\n' >b/c/c.journal ; printf '2010/1/1\n (B) 1\n!include c/c.journal\n' >b/b.journal ; printf '2010/1/1\n (A) 1\n!include b/b.journal\n' >a.journal ; hledger -f a.journal print; rm -rf b
|
||||
>>>
|
||||
2010/01/01
|
||||
(A) 1
|
||||
@ -10,3 +10,6 @@ mkdir -p b/c ; printf '2010/1/1\n (C) 1\n' >b/c/c.journal ; printf '2010/1/1\n
|
||||
2010/01/01
|
||||
(C) 1
|
||||
|
||||
2010/01/01
|
||||
(D) 1
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user