cli: make rewrite a builtin command
This commit is contained in:
		
							parent
							
								
									89f694707b
								
							
						
					
					
						commit
						d2d7dbbce0
					
				| @ -28,6 +28,7 @@ module Hledger.Cli.Commands ( | ||||
|   ,module Hledger.Cli.Commands.Printunique | ||||
|   ,module Hledger.Cli.Commands.Register | ||||
|   ,module Hledger.Cli.Commands.Registermatch | ||||
|   ,module Hledger.Cli.Commands.Rewrite | ||||
|   ,module Hledger.Cli.Commands.Stats | ||||
| )  | ||||
| where | ||||
| @ -63,6 +64,7 @@ import Hledger.Cli.Commands.Print | ||||
| import Hledger.Cli.Commands.Printunique | ||||
| import Hledger.Cli.Commands.Register | ||||
| import Hledger.Cli.Commands.Registermatch | ||||
| import Hledger.Cli.Commands.Rewrite | ||||
| import Hledger.Cli.Commands.Stats | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -1,33 +1,26 @@ | ||||
| #!/usr/bin/env stack | ||||
| {- stack runghc --verbosity info | ||||
|   --package hledger-lib | ||||
|   --package hledger | ||||
|   --package here | ||||
|   --package megaparsec | ||||
|   --package text | ||||
|   --package Diff | ||||
| -} | ||||
| 
 | ||||
| {-# OPTIONS_GHC -Wno-missing-signatures -Wno-name-shadowing #-} | ||||
| {-# LANGUAGE OverloadedStrings, LambdaCase, DeriveTraversable, ViewPatterns, QuasiQuotes #-} | ||||
| 
 | ||||
| module Hledger.Cli.Commands.Rewrite ( | ||||
|   rewritemode | ||||
|  ,rewrite | ||||
| )  | ||||
| where | ||||
| 
 | ||||
| import Control.Monad.Writer | ||||
| import Data.List (sortOn, foldl') | ||||
| import Data.String.Here | ||||
| import qualified Data.Text as T | ||||
| -- hledger lib, cli and cmdargs utils | ||||
| import Hledger.Cli hiding (outputflags) | ||||
| -- more utils for parsing | ||||
| -- #if !MIN_VERSION_base(4,8,0) | ||||
| -- import Control.Applicative.Compat ((<*)) | ||||
| -- #endif | ||||
| import Hledger | ||||
| import Hledger.Data.AutoTransaction (runModifierTransaction) | ||||
| import Hledger.Cli.CliOptions | ||||
| import Hledger.Cli.Commands.Print | ||||
| --import Hledger.Cli hiding (outputflags) | ||||
| import System.Console.CmdArgs.Explicit | ||||
| import Text.Printf | ||||
| import Text.Megaparsec | ||||
| import qualified Data.Algorithm.Diff as D | ||||
| import Hledger.Data.AutoTransaction (runModifierTransaction) | ||||
| 
 | ||||
| ------------------------------------------------------------------------------ | ||||
| cmdmode = hledgerCommandMode | ||||
| rewritemode = hledgerCommandMode | ||||
|   [here| rewrite | ||||
| Print all transactions, adding custom postings to the matched ones. | ||||
| 
 | ||||
| @ -166,13 +159,10 @@ https://github.com/simonmichael/hledger/issues/99 | ||||
| -- TODO interpolating match groups in replacement | ||||
| -- TODO allow using this on unbalanced entries, eg to rewrite while editing | ||||
| 
 | ||||
| main :: IO () | ||||
| main = do | ||||
|   opts@CliOpts{rawopts_=rawopts,reportopts_=ropts} <- getHledgerCliOpts cmdmode | ||||
| rewrite opts@CliOpts{rawopts_=rawopts,reportopts_=ropts} j@Journal{jtxns=ts} = do  | ||||
|   d <- getCurrentDay | ||||
|   let q = queryFromOpts d ropts | ||||
|   modifier <- modifierTransactionFromOpts rawopts | ||||
|   withJournalDo opts $ \opts' j@Journal{jtxns=ts} -> do | ||||
|   -- create re-writer | ||||
|   let modifiers = modifier : jmodifiertxns j | ||||
|       -- Note that some query matches require transaction. Thus modifiers | ||||
| @ -181,7 +171,7 @@ main = do | ||||
|   -- rewrite matched transactions | ||||
|   let j' = j{jtxns=map modifier' ts} | ||||
|   -- run the print command, showing all transactions | ||||
|     outputFromOpts rawopts opts'{reportopts_=ropts{query_=""}} j j' | ||||
|   outputFromOpts rawopts opts{reportopts_=ropts{query_=""}} j j' | ||||
| 
 | ||||
| postingp' :: T.Text -> IO Posting | ||||
| postingp' t = runErroringJournalParser (postingp Nothing <* eof) t' >>= \case | ||||
| @ -89,11 +89,6 @@ is an old pie chart generator, in need of some love. | ||||
| [hledger-check.hs](https://github.com/simonmichael/hledger/blob/master/bin/hledger-check.hs) | ||||
| checks more powerful account balance assertions. | ||||
| 
 | ||||
| ### rewrite | ||||
| 
 | ||||
| [hledger-rewrite.hs](https://github.com/simonmichael/hledger/blob/master/bin/hledger-rewrite.hs#L28) | ||||
| Adds one or more custom postings to matched transactions. | ||||
| 
 | ||||
| ### tags | ||||
| 
 | ||||
| [hledger-tags.hs](https://github.com/simonmichael/hledger/blob/master/bin/hledger-tags.hs) | ||||
|  | ||||
| @ -685,6 +685,9 @@ Print the one posting whose transaction description is closest to DESC, | ||||
| in the style of the register command. | ||||
| Helps ledger-autosync detect already-seen transactions when importing. | ||||
| 
 | ||||
| ## rewrite | ||||
| Print all transactions, adding custom postings to the matched ones. | ||||
| 
 | ||||
| ## stats | ||||
| Show some journal statistics. | ||||
| 
 | ||||
|  | ||||
| @ -120,6 +120,7 @@ library: | ||||
|   - Hledger.Cli.Commands.Printunique | ||||
|   - Hledger.Cli.Commands.Register | ||||
|   - Hledger.Cli.Commands.Registermatch | ||||
|   - Hledger.Cli.Commands.Rewrite | ||||
|   - Hledger.Cli.Commands.Stats | ||||
|   - Hledger.Cli.CompoundBalanceCommand | ||||
|   - Text.Tabular.AsciiWide | ||||
| @ -130,6 +131,7 @@ library: | ||||
|   - cmdargs >=0.10 && <0.11 | ||||
|   - csv | ||||
|   - data-default >=0.5 | ||||
|   - Diff | ||||
|   - hashable >=1.2.4 | ||||
|   - haskeline >=0.6 && <=0.8 | ||||
|   - HUnit | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user