Using stack's script command meant that the scripts needed to be compatible, and regularly tested, with a hledger release in stackage, rather than the latest hledger source. This created hassles for maintainers, contributors and sometimes for users. To simplify things overall, we now require script users to check out the hledger source tree and run the scripts (or, bin/compile.sh) from there once so they compile themselves. Some notes on alternative setups are included (in one of the scripts, and referenced by the others). This ensures that users and our CI tests are building scripts the same way. Current stack does not allow a stack options line to be used with the "stack ghc" command, unfortunately, so instead we are using env's -S flag, which hopefully has sufficiently wide support by now, and putting all arguments in the shebang line. This method will probably require complete explicit --package options, unlike "stack script", so more testing and tweaking is expected. Probably we're going to end up with some long shebang lines. This isn't pretty but seems like a possible way to keep things manageable.
		
			
				
	
	
		
			42 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Haskell
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Haskell
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env -S stack ghc --verbosity info --package hledger -- -O0
 | |
| -- See hledger-check-fancyassertions.hs
 | |
| 
 | |
| {-# OPTIONS_GHC -Wno-missing-signatures -Wno-name-shadowing #-}
 | |
| {-# LANGUAGE NamedFieldPuns #-}
 | |
| {-# LANGUAGE QuasiQuotes #-}
 | |
| {-# LANGUAGE RecordWildCards #-}
 | |
| 
 | |
| import Data.String.QQ (s)
 | |
| import qualified Data.Text.IO as T
 | |
| import Hledger
 | |
| import Hledger.Cli
 | |
| 
 | |
| ------------------------------------------------------------------------------
 | |
| cmdmode = hledgerCommandMode
 | |
|   [s| swap-dates
 | |
| Swap date and date2, on transactions which have date2 defined.
 | |
| (Does not yet swap posting dates.)
 | |
| _FLAGS
 | |
|   |]
 | |
|   [] 
 | |
|   [generalflagsgroup1]
 | |
|   []
 | |
|   ([], Nothing) -- Just $ argsFlag "[QUERY]")
 | |
| ------------------------------------------------------------------------------
 | |
| 
 | |
| main :: IO ()
 | |
| main = do
 | |
|   opts@CliOpts{reportspec_=rspec} <- getHledgerCliOpts cmdmode
 | |
|   withJournalDo opts $
 | |
|    \j -> do
 | |
|     d <- getCurrentDay
 | |
|     let
 | |
|       q = rsQuery rspec
 | |
|       ts = filter (q `matchesTransaction`) $ jtxns $ journalSelectingAmountFromOpts (rsOpts rspec) j
 | |
|       ts' = map transactionSwapDates ts
 | |
|     mapM_ (T.putStrLn . showTransaction) ts'
 | |
| 
 | |
| transactionSwapDates :: Transaction -> Transaction
 | |
| transactionSwapDates t@Transaction{tdate2=Nothing} = t
 | |
| transactionSwapDates t@Transaction{tdate2=Just d} = t{tdate=d, tdate2=Just $ tdate t}
 |