bin: hledger-check-tag-files, a script using stack's script command

This commit is contained in:
Simon Michael 2020-03-27 16:43:14 -07:00
parent e7e9f1ee3b
commit a38694b247

32
bin/hledger-check-tag-files.hs Executable file
View File

@ -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