check: ordereddates now checks each file separately (fix #1493)
This commit is contained in:
		
							parent
							
								
									2505c69f80
								
							
						
					
					
						commit
						e9f04d5ed6
					
				| @ -11,19 +11,26 @@ import Data.Semigroup ((<>)) | |||||||
| import qualified Data.Text as T | import qualified Data.Text as T | ||||||
| import Hledger | import Hledger | ||||||
| import Hledger.Cli.CliOptions | import Hledger.Cli.CliOptions | ||||||
|  | import Control.Monad (forM) | ||||||
|  | import Data.List (groupBy) | ||||||
| 
 | 
 | ||||||
| journalCheckOrdereddates :: CliOpts -> Journal -> Either String () | journalCheckOrdereddates :: CliOpts -> Journal -> Either String () | ||||||
| journalCheckOrdereddates CliOpts{reportspec_=rspec} j = do | journalCheckOrdereddates CliOpts{reportspec_=rspec} j = do | ||||||
|   let  |   let  | ||||||
|     ropts = (rsOpts rspec){accountlistmode_=ALFlat} |     ropts = (rsOpts rspec){accountlistmode_=ALFlat} | ||||||
|     ts = filter (rsQuery rspec `matchesTransaction`) $ |     -- check date ordering within each file, not across files | ||||||
|  |     filets =  | ||||||
|  |       groupBy (\t1 t2 -> transactionFile t1 == transactionFile t2) $ | ||||||
|  |       filter (rsQuery rspec `matchesTransaction`) $ | ||||||
|       jtxns $ journalSelectingAmountFromOpts ropts j |       jtxns $ journalSelectingAmountFromOpts ropts j | ||||||
|     checkunique = False -- boolopt "unique" rawopts  XXX was supported by checkdates command |     checkunique = False -- boolopt "unique" rawopts  XXX was supported by checkdates command | ||||||
|     compare a b = if checkunique then getdate a < getdate b else getdate a <= getdate b |     compare a b = if checkunique then getdate a < getdate b else getdate a <= getdate b | ||||||
|       where getdate = transactionDateFn ropts |       where getdate = transactionDateFn ropts | ||||||
|  |   either Left (const $ Right ()) $  | ||||||
|  |    forM filets $ \ts -> | ||||||
|     case checkTransactions compare ts of |     case checkTransactions compare ts of | ||||||
|     FoldAcc{fa_previous=Nothing} -> return () |       FoldAcc{fa_previous=Nothing} -> Right () | ||||||
|     FoldAcc{fa_error=Nothing}    -> return () |       FoldAcc{fa_error=Nothing}    -> Right () | ||||||
|       FoldAcc{fa_error=Just error, fa_previous=Just previous} -> do |       FoldAcc{fa_error=Just error, fa_previous=Just previous} -> do | ||||||
|         let |         let | ||||||
|           datestr = if date2_ ropts then "2" else "" |           datestr = if date2_ ropts then "2" else "" | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user