diff --git a/bin/hledger-check-tag-files.hs b/bin/hledger-check-tag-files.hs new file mode 100755 index 000000000..ae7145bc4 --- /dev/null +++ b/bin/hledger-check-tag-files.hs @@ -0,0 +1,32 @@ +#!/usr/bin/env stack +-- stack script --compile --resolver nightly-2020-03-26 --package hledger-lib --package hledger --package directory --package text +-- Add this to see more progress: --verbosity info +-- Change --resolver to an already-installed one if you like + +-- Read the default journal and give an error if any tag values +-- containing '/' do not exist as file paths. Usage: +-- +-- $ hledger-check-tag-files.hs # compiles if needed +-- +-- or: +-- +-- $ hledger check-tag-files # compiles if there's no compiled version + +import Control.Monad +import qualified Data.Text as T +import Hledger.Cli +import System.Directory +import System.Exit + +main = withJournalDo defcliopts $ \j -> do + let filetags = [ (t,v) + | (t',v') <- concatMap transactionAllTags $ jtxns j + , let t = T.unpack t' + , let v = T.unpack v' + , '/' `elem` v + ] + forM_ filetags $ \(t,f) -> do + exists <- doesFileExist f + when (not exists) $ do + putStrLn $ "file not found in tag: " ++ t ++ ": " ++ f + exitFailure