2020-03-28 03:20:43 +03:00
|
|
|
#!/usr/bin/env cabal
|
|
|
|
{- cabal:
|
2020-08-15 19:51:44 +03:00
|
|
|
build-depends: base, directory, hledger, text
|
2020-03-28 03:20:43 +03:00
|
|
|
-}
|
|
|
|
{-
|
2020-11-27 23:29:39 +03:00
|
|
|
hledger-check-tagfiles cabal script (requires cabal 3+).
|
2020-03-28 03:20:43 +03:00
|
|
|
Read the default journal and give an error if any tag values
|
|
|
|
containing '/' do not exist as file paths.
|
|
|
|
Usage:
|
|
|
|
|
2020-11-27 23:29:39 +03:00
|
|
|
$ hledger-check-tagfiles.hs # compiles every time (?)
|
2020-03-28 03:20:43 +03:00
|
|
|
|
|
|
|
or:
|
|
|
|
|
2020-11-27 23:29:39 +03:00
|
|
|
$ hledger check-tagfiles # compiles every time (?)
|
2020-03-28 03:20:43 +03:00
|
|
|
-}
|
|
|
|
|
|
|
|
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
|
2021-08-16 07:57:15 +03:00
|
|
|
unless exists $ do
|
2020-03-28 03:20:43 +03:00
|
|
|
putStrLn $ "file not found in tag: " ++ t ++ ": " ++ f
|
|
|
|
exitFailure
|