From 3b656ff372a465a9518f53352cbfafc67addf889 Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Wed, 31 Dec 2025 00:17:15 -1000 Subject: [PATCH] imp:add,import: also create directories when autocreating journal file When autocreating a journal file specified by -f or LEDGER_FILE, required parent directories will now also be autocreated if needed. --- hledger-lib/Hledger/Read.hs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/hledger-lib/Hledger/Read.hs b/hledger-lib/Hledger/Read.hs index 014d43e62..24c555338 100644 --- a/hledger-lib/Hledger/Read.hs +++ b/hledger-lib/Hledger/Read.hs @@ -151,9 +151,9 @@ import Data.Text qualified as T import Data.Text.IO qualified as T import Data.Time (Day) import Safe (headDef) -import System.Directory (doesFileExist) +import System.Directory (createDirectoryIfMissing, doesFileExist) import System.Environment (getEnv) -import System.FilePath ((<.>), (), splitDirectories, splitFileName, takeFileName) +import System.FilePath ((<.>), (), splitDirectories, splitFileName, takeDirectory, takeFileName) import System.Info (os) import System.IO (Handle, hPutStrLn, stderr) import Text.Printf (printf) @@ -431,6 +431,10 @@ ensureJournalFileExists f = do exists <- doesFileExist f unless exists $ do hPutStrLn stderr $ "Creating hledger journal file " <> show f + -- Create parent directories if they don't exist + let dir = takeDirectory f + unless (null dir || dir == ".") $ + createDirectoryIfMissing True dir -- note Hledger.Utils.UTF8.* do no line ending conversion on windows, -- we currently require unix line endings on all platforms. newJournalContent >>= T.writeFile f