1User-visible changes in the hledger command line tool and library.
2
3
4# 1.19 2020-09-01
5
6## general
7
8- When parsing dates, the year is now required to have at least four
9  digits. So eg we no longer accept `200/1/1` as a valid date, it
10  would need to be written `0200/1/1`. This was done for.. reasons,
11  and is experimental; let us know if it causes you trouble.
12
13- The --color/--colour=WHEN command line option, support for the
14  NO_COLOR environment variable, and smarter autodetection of colour
15  terminals have been added (#1296)
16
17- Command line options taking a numeric argument are now validated
18  more carefully, preventing issues with unexpected negatives or Int
19  overflow. (Stephen Morgan)
20
21- In queries, you can now specify a quarter like `2020q1` or `q4`
22  (the q is case-insensitive). (#1247, Henning Thieleman, Stephen Morgan)
23
24- In report intervals, `fortnightly` has been added as a synonym for
25  `biweekly`. (Stephen Morgan)
26
27- -t and -l command line flags have been added as short forms of
28  --tree and --flat (#1286)
29
30- All reports displaying accounts now choose flat mode by default
31  (Stephen Morgan)
32
33- Reports now show at most 2 commodities of multicommodity amounts,
34  unless the --no-elide flag is used. This helps keep them readable by
35  default, since multicolumn, multicommodity balance reports otherwise
36  tend to become very wide, especially in tree mode.
37
38- Numbers with more than 255 decimal places, which we do not support,
39  now give an error instead of silently misparsing. (#1326)
40
41- Digit groups are now limited to at most 255 digits each. (#1326)
42
43- Account aliases (on command line or in journal) containing a bad
44  regular expression now give a more detailed error message.
45
46- A tab character could get parsed as part of a commodity symbol, with
47  confusing results. This no longer happens. (#1301, Dmitry Astapov)
48
49- Debug output is now organised better by debug level.
50  The levels are:
51
52  0. normal command output only (no warnings)
53  1. useful warnings & most common troubleshooting info (valuation, eg)
54  2. common troubleshooting info, more detail
55  3. report options selection
56  4. report generation
57  5. report generation, more detail
58  6. input file reading
59  7. input file reading, more detail
60  8. command line parsing
61  9. any other rarely needed or more in-depth info
62
63- Added a missing lower bound for aeson, making cabal installs more
64  reliable. (#1268)
65
66- lib: parseAmountQueryTerm: allow whitespace around arg parts (#1312)
67  Whitespace around the operator, sign, or number is now tolerated.
68
69## commands
70
71- account,bal,bs,cf,is: --drop now also works in tree mode (Stephen Morgan)
72
73- add: fix an error in the command line help (arguments are inputs,
74  not a query)
75
76- aregister: a new command showing a transaction-oriented account
77  register, like hledger-ui, hledger-web, or your bank statement.
78  Each line represents a whole transaction in one account, unlike
79  the register command which shows individual postings possibly from
80  multiple accounts. You might prefer aregister when reconciling
81  real-world asset/liability accounts, and register when reviewing
82  detailed revenues/expenses. (#1294)
83
84- bal,bs,cf,is: boring parents are now elided by default in tabular
85  balance reports too, like single-column reports. (Stephen Morgan)
86
87- bal,bs,cf,is: monthly column headings are no longer elided to just
88  the short month name, if multiple years are being displayed.
89
90- bal --budget's column headings are now end dates rather than
91  periods when appropriate (ie with --cumulative or --historical).
92
93- bs,cf,is: -%/--no-total no longer forces --no-total (Stephen Morgan)
94
95- bs,cf,is: --no-total now hides subtotals as well as the grand total
96  (Stephen Morgan)
97
98- codes: a new command for listing transaction codes
99
100- print: a new `sql` output format has been added (Dmitry Astapov)
101
102- roi: errors are now shown without a call stack
103
104- tags: add --parsed flag, hide empties without --empty. With the
105  --parsed flag, all tags or values are shown in the order they are
106  parsed from the input data, including duplicates. With -E/--empty,
107  any blank/empty values will also be shown, otherwise they are
108  omitted.
109
110## journal format
111
112- account directives can specify a new `Cash` account type. This is a
113  subtype of `Asset`, denoting accounts which should be displayed
114  in `cashflow` reports.
115
116- The built-in regular expressions for choosing default account types
117  have been tweaked, and documentation for account types has been
118  improved.
119
120## csv format
121
122- Inferring the appropriate default field separator based on file
123  extension (, for .csv, ; for .ssv, \t for .tsv) now works as
124  documented.
125
126- Conditional rule patterns can now be grouped with the `&` (AND) operator,
127  allowing more powerful matching. (Michael Sanders)
128
129- Invalid csv rules files now give clearer parse error messages.
130  (Dmitry Astapov)
131
132- "If tables", a compact bulk format for conditional rules, have been
133  added. (Dmitry Astapov)
134
135- csv conversion with a lot of conditional rules is now faster (Dmitry Astapov)
136
137
138# 1.18.1 2020-06-21
139
140- journal: document recursive wildcards
141
142- by default, value reports work as in 1.17; to infer market prices from
143  transactions, add the new --infer-value flag. (#1239, #1253)
144
145- organise debug output better
146
147- print: amounts in csv output now have commodity symbol, digit group
148  separators and prices removed (Dmitry Astapov)
149
150
151# 1.18 2020-06-07
152
153## General
154
155- The --forecast flag now takes an optional argument
156  (--forecast=PERIODICEXPR), allowing periodic transactions to
157  start/end on any date and to overlap recorded transactions.
158  (#835, #1236) (Dmitry Astapov)
159
160- An upper case file extension no longer confuses file format
161  detection. (#1225)
162
163- In the commands list, redundant source scripts are now hidden
164  properly when a corresponding .com/.exe file exists. (#1225)
165
166- We now show `..` instead of `-` to indicate date ranges, eg in
167  report titles, to stand out more from hyphenated dates.
168  (Stephen Morgan)
169
170- Period expressions (eg in -p, date:, and periodic rules) now accept
171  `to`, `until`, `-`, or `..` as synonyms. (Stephen Morgan)
172
173- When parsing amounts, whitespace between sign and number is now allowed.
174
175- A clearer error message is shown on encountering a malformed regular
176  expression.
177
178## commands
179
180- commands allowing different output formats now list their supported
181  formats accurately in --help (#689)
182
183- commands allowing JSON output now actually produce JSON (#689)
184
185- bal, bs: show .. (not ,,) in report titles, like other reports
186
187## journal format
188
189- We now also infer market prices from transactions, like Ledger.
190  See https://hledger.org/hledger.html#market-prices (#1239).
191
192  Upgrade note: this means value reports (-V, -X etc.) can give
193  different output compared to hledger 1.17. If needed, you can
194  prevent this by adding a P directive declaring the old price, on or
195  after the date of the transaction causing the issue.
196
197- The include directive now accepts a file format prefix, like the
198  -f/--file option. This works with glob patterns too, applying the
199  prefix to each path. This can be useful when included files don't
200  have the standard file extension, eg:
201
202      include timedot:2020*.md
203
204- We now accept (and ignore) Ledger-style lot dates
205  (`[DATE]`) and four lot price forms (`{PRICE}`, `{{PRICE}}`,
206  `{=PRICE}`, `{{=PRICE}}`), anywhere after the posting amount but
207  before any balance assertion.
208
209- We now accept Ledger-style parenthesised "virtual posting
210  costs" (`(@)`, `(@@)`). In hledger these are equivalent to the
211  unparenthesised form.
212
213- The unbalanced transaction error message is clearer, especially when
214  postings all have the same sign, and is split into multiple lines
215  for readability.
216
217## csv format
218
219- You can now generate up to 99 postings in a transaction. (Vladimir Sorokin)
220
221- You can now generate postings with an explicit 0 amount. (#1112)
222
223- For each posting, when both numbered and unnumbered amount
224  assignments are active (eg: both `amount` and `amount1`), we ignore
225  the unnumbered ones. This makes it easier to override old `amount`
226  rules.
227
228- Fix a 1.17.1 regression involving amount-in/amount-out. (#1226)
229
230- Assigning too many non-zero or zero values to a posting amount now
231  gives a clearer error. (#1226)
232
233
234# 1.17.1.1 2020-03-19
235
236- update bounds after some belated hledger-* version bumps
237
238# 1.17.1 2020-03-19
239
240- csv: amount1 no longer forces a second posting or second posting amount.
241  The "special handling for pre 1.17 rules" should now be less
242  noticeable. amount1/amount2 no longer force a second posting or
243  explicit amounts on both postings. (Only amount/amount-in/amount-out
244  do that.) Error messages and handling of corner cases may be more
245  robust, also.
246
247- journal: a commodity directive without decimal mark now gives a more
248  verbose error message with examples
249
250- journal: inclusive balance assignments now work (#1207)
251
252- require newer Decimal, math-functions libs to ensure consistent
253  rounding behaviour, even when built with old GHCs/snapshots.
254  hledger uses banker's rounding (rounds to nearest even number, eg
255  0.5 displayed with zero decimal places is "0").
256
257# 1.17 2020-03-01
258
259## General
260
261- hledger's default date format is now YYYY-MM-DD (ISO-8601 dates).
262  (Brian Wignall, Jakob Schöttl, Simon Michael)
263
264- Drop the file format auto-detection feature.
265
266  For a long time hledger has auto-detected the file format when it's
267  not known, eg when reading from a file with unusual extension (like
268  .dat or .txt), or from standard input (-f-), or when using the
269  include directive (which currently ignores file extensions).  This
270  was done by trying all readers until one succeeded.  This worked
271  well in practice. But recent changes to timedot format have made
272  this kind of auto-detection unreliable. (timedot and journal formats
273  overlap).
274
275  For predictability and to minimise confusion, hledger will no longer
276  guess; when there's no file extension or reader prefix available, it
277  always assumes journal format.
278
279  To specify one of the other formats, you must use its standard file
280  extension (`.timeclock`, `.timedot`, `.csv`, `.ssv`, `.tsv`), or a
281  reader prefix (`-f csv:foo.txt`, `-f timedot:-`).
282
283  Experimental, feedback welcome.
284
285- Fix extra $ symbol (Mateus Furquim)
286
287- --output-format now rejects invalid formats
288
289- Numbers in JSON output now provide a floating point Number
290  representation as well as our native Decimal object representation,
291  since the later can sometimes contain 255-digit integers. The
292  floating point numbers can have up to 10 decimal digits (and an
293  unbounded number of integer digits.)
294  Experimental, suggestions needed. (#1195)
295
296- Fix finding latest date in queryEndDate Or queries and simplify
297  date comparison code. (Stephen Morgan)
298
299- Fix issue 457. (Jacek Generowicz)
300  Issue #457 pointed out that commands such as
301
302      hledger ui 'amt:>200'
303
304  failed. This was because the process of dispatching from `hledger ui`
305  to `hledger-ui` (note addition of `-`) lost the quotes around
306  `amt:>20` and the `>` character was interpreted as a shell redirection
307  operator, rather than as part of the argument.
308
309  The machinery for quoting or escaping arguments which contain
310  characters which require quoting or escaping (thus far whitespace and
311  quotes) already existed. This solution simply adds shell stdio
312  redirection characters to this set.
313
314## commands
315
316- add: you can use `<` to undo and redo previous inputs (Gaith Hallak)
317
318- bs, cf, is, bal, print, reg: support json output
319
320- bs, cf, is: fix excess subreport columns in csv output
321
322- bs, cf, is, bal: fix an issue with border intersections in
323  --pretty-tables output. (Eric Mertens)
324
325- close: fix a rounding bug that could generate unbalanced transactions. (#1164)
326
327- close: hide cost prices by default, show them with --show-costs.
328  close no longer preserves costs (transaction prices) unless you ask
329  it to, since that can generate huge entries when there are many
330  foreign currency/investment transactions. (#1165)
331
332- close: equity amounts are omitted by default, for simpler entries;
333  -x/--explicit shows them (usually causing more postings). (#1165)
334
335- close: --interleaved generates equity postings alongside each closed
336  account, making troubleshooting easier.
337
338- close: "equity:opening/closing balances" is now the default
339  closing and opening account.
340
341- close: --close-desc/--open-desc customise the closing/opening
342  transaction descriptions. (#1165)
343
344- close: some --open*/--close* flags have been simplified for memorability:
345
346  --closing -> --close
347  --opening -> --open
348  --close-to -> --close-acct
349  --open-from -> --open-acct
350
351  The old flags are accepted as hidden aliases, and deprecated. (#1165)
352
353- print, register: a new valuation type, --value=then, shows the
354  market value at each posting's date.
355
356- print: -V/-X/--value now imply -x/--explicit, as -B/--cost does.
357  This avoids a bug where print -V of a transaction with an implicit
358  commodity conversion would convert only some of its postings to value.
359
360## journal format
361
362- The include directive no longer tries all readers.  It now picks
363  just one, based on the included file's extension, defaulting to
364  journal.  (It doesn't yet handle a reader prefix.)
365
366- The default commodity (D) directive now limits display precision too. (#1187)
367  D directives are now fully equivalent to commodity directives for
368  setting a commodity's display style. (Previously it couldn't limit
369  the number of decimal places.)  When both kinds of directive exist,
370  commodity directives take precedence.  When there are multiple D
371  directives in the journal, only the last one affects display style.
372
373## csv format
374
375- Conditional blocks can now match single fields. \o/
376
377- The experimental --separator command line option has been dropped,
378  replaced a new `separator` directive in CSV rule files. (Aleksandar Dimitrov)
379  Also the `.tsv` and `.ssv` file extensions are now recognised,
380  and set the default `separator` to TAB and semicolon respectively.
381  (#1179)
382
383- Allow manual assignment of the "expenses:unknown" account name. (#1192)
384
385- CSV rule keywords are now case insensitive. (Aleksandar Dimitrov)
386
387## timeclock format
388
389- Misc. fixes making parsing more robust. (Jakob Schöttl)
390
391## timedot format
392
393- More support for org mode: org headlines can now be used for date
394  lines and timelog items (the stars are ignored). Also, any org
395  headlines before the first date line are ignored.
396
397- You can now write a description after a date, which will be used in
398  all of that day's transactions.
399
400
401# 1.16.2 2020-01-14
402
403- add support for megaparsec 8 (#1175)
404
405- close: mention --close-to/--open-from in docs
406
407# 1.16.1 2019-12-03
408
409- Drop unnecessary mtl-compat dependency
410
411- Fix building with GHC 8.0, 8.2
412
413# 1.16 2019-12-01
414
415## General
416
417- add support for GHC 8.8, base-compat 0.11 (#1090)
418
419- drop support for GHC 7.10
420
421- The benchmark suite has been disabled.
422
423- The --anon flag now also anonymises transaction codes and account
424  names declared with account directives. (Mykola Orliuk) (#901)
425
426## commands
427
428- balance/bs/cf/is: balance commands now support the -%/--percent flag
429  to show amounts as percentages of the column's total. (Michael Kainer)
430
431  If there are multiple commodities involved in a report hledger bails
432  with an error message. This can be avoided by using -B/--cost. Also note
433  that if one uses -% with the balance command the chances are high that
434  all numbers are 0. This is due to the fact that by default balance sums
435  up to zero. If one wants to use -% in a meaningful way with balance one
436  has to add a query.
437
438  In order to keep the implementation as simple as possible --tree has no
439  influence over how the percentages are calculated, i.e., the percentages
440  always represent the fraction of the columns total. If one wants to know
441  the percentages relative to a parent account, one has to use a query to
442  narrow down the accounts.
443
444- balance: --budget no longer errors when there is neither budget nor
445  transactions in the report period (Dmitry Astapov)
446
447- balance: --budget has improved debug output (shows budget txns)
448  (Dmitry Astapov)
449
450- check-dates: now sets the exit status code (Amitai Burstein)
451
452- close: no longer strips zeroes after the decimal mark, and preserves
453  parseable output (#1137)
454
455- close: the --close-to, --open-from options allow closing/opening
456  account names to be chosen
457
458- import: create the journal if missing, like the add command
459  Streamlines import/migration instructions.
460
461- import: --catchup marks all transactions imported, without importing
462
463- import: more informative output: mention the input files, also show
464  a message when nothing was imported
465
466- prices: show price amounts with proper display style; always show
467  full precision
468
469- roi: don't give an error with empty input data (Dmitry Astapov)
470
471- tests: unit tests are now run by tasty, and show coloured output by default (#1090).
472  Test running options have changed, see the command help.
473  Some unit tests have been collapsed, so the reported test count has
474  dropped a little.
475
476## journal format
477
478- Fixed: wrong dates generated by certain periodic transaction rules,
479  eg "~ every 12 months from 2019/04". (Dmitry Astapov) (#1085)
480
481## csv format
482
483CSV conversion is now more powerful (#1095, Dmitry Astapov, Simon Michael):
484
485- A variable number of postings can be generated, from zero to nine. (#627, #1095)
486
487- In conditional blocks, `skip` can be used to skip one or more
488  records after a pattern match, or the new `end` rule can be used to
489  skip all remaining records. (#1076)
490
491- The new `balance-type` CSV rule controls which kind of balance
492  assertions are generated (=, ==, =*, ==*)
493
494- Postings with balance assignments can be generated. (#1000)
495
496- Both the amount-in/amount-out fields having a non-empty value is now
497  accepted, as long as one of them is zero. (#570)
498
499- Line feeds/carriage returns in (quoted) CSV values are now converted
500  to spaces during conversion. (#416, #841)
501
502- Field assignments can now unset a field (eg a posting can be
503  suppressed by assigning no value to its account).
504
505- CSV records with varying lengths are now allowed; short records will
506  be padded with empty fields as needed. This allows us to handle eg
507  exported Google spreadsheets, where trailing empty fields are omitted.
508
509- Journals generated from CSV are now finalised and checked like
510  ordinary journals (#1000). So invalid transactions generated from
511  CSV will be rejected, amount styles will be standardised etc.
512
513- Fixed: we no longer add an extra (third) space between description and comment.
514
515- Fixed: whitespace on the line after an if block no longer causes misparsing. (#1120)
516
517- Fixed: an empty field assignment no longer consumes the next line. (#1001)
518
519- Fixed: interpolation of field names containing punctuation now works.
520
521- Docs have been rewritten and clarified.
522
523Migration notes:
524
525- When `print`ing from CSV, there is now one less space between
526  transaction descriptions and comments, which may generate noisy
527  diffs if you are comparing old and new reports. diff -w
528  (--ignore-all-space) will filter these out.
529
530- CSV rules now give you more freedom to generate any journal
531  entries you want, including malformed or unbalanced ones.
532  The csv reader now checks the journal after conversion,
533  so it will report any problems with the generated entries.
534
535- Balance assertions generated from CSV are not checked, currently.
536  This is appropriate when you are downloading partial CSV data to
537  be merged into your main journal. If you do need to check balance
538  assertions right away, you can pipe through hledger again:
539
540      $ hledger -f a.csv print | hledger -f- print
541
542
543
544# 1.15.2 2019-09-05
545
546- -V and -X now respect a report end date (set with -e or -p or date:)
547  when choosing the valuation date (which determines the market prices
548  used). This is how -V works in hledger 1.14 and Ledger, and it means
549  that -V isn't exactly equivalent to either --value=end or
550  --value=now. Possibly some other corner cases in valuation have been
551  fixed as well. "Effect of --value on reports" in the hledger manual
552  has been updated and is more accurate.
553
554# 1.15.1 2019-09-02
555
556- add commodities, descriptions, diff, notes, payees commands to manual
557
558# 1.15 2019-09-01
559
560## General
561
562- There is a new valuation option `--value=TYPE[,COMM]`, with
563  backwards-compatible `-B/--cost`, `-V/--market`, `-X/--exchange=COMM`
564  variants. These provide control over valuation date (#329), and
565  inference of indirect market prices (similar to Ledger's -X) (#131).
566  Experimental.
567
568- Market valuation (-V/-X/--value) is now much faster (#999):
569
570      +-------------------------------------------++--------------+--------------+
571      |                                           || hledger-1.14 | hledger-1.15 |
572      +===========================================++==============+==============+
573      | -f examples/10000x1000x10.journal bal -Y  ||         2.43 |         2.44 |
574      | -f examples/10000x1000x10.journal bal -YV ||        44.91 |         6.48 |
575      | -f examples/10000x1000x10.journal reg -Y  ||         4.60 |         4.15 |
576      | -f examples/10000x1000x10.journal reg -YV ||        61.09 |         7.21 |
577      +-------------------------------------------++--------------+--------------+
578
579- How date options like `-M` and `-p` interact has been updated and clarified.
580  (Jakob Schöttl) (#1008, #1009, #1011)
581
582- Restore `--aux-date` and `--effective` as `--date2` aliases (#1034).
583  These Ledger-ish spellings were dropped over the years, to improve
584  `--help`'s layout. Now we support them again, as semi-hidden flags
585  (`--help` doesn't list them, but they are mentioned in `--date2`'s help).
586
587## commands
588
589- add, web: on Windows, trying to add transactions to a file path
590  containing trailing periods (eg `hledger add -f  Documents.\.hledger.journal`)
591  now gives an error, since this could cause data loss otherwise (#1056).
592  This affects the add command and hledger-web's add form.
593
594- bal: --budget: don't always convert to cost.
595
596- bal: --budget: don't show a percentage when budgeted and actual
597  amounts are in different commodities.
598
599- bal/bs/bse: `-H/--historical` or `--cumulative` now disables `-T/--row-total` (#329).
600  Multiperiod balance reports which show end balances (eg, `bal -MH` or `bs -M`)
601  no longer show a Totals column, since summing end balances generally
602  doesn't make sense.
603
604- bs: show end date(s) in title, not transactions date span (#1078)
605  Compound balance reports showing ending balances (eg balancesheet),
606  now show the ending date (single column) or range of ending
607  dates (multi column) in their title. ,, (double comma) is used
608  rather than - (hyphen) to suggest a sequence of discrete dates
609  rather than a continuous span.
610
611- close: preserve transaction prices (costs) accurately (#1035).
612  The generated closing/opening transactions were collapsing/misreporting
613  the costs in balances involving multiple costs.
614  Now, each separately-priced amount gets its own posting.
615  (And only the last of these (for each commodity) gets a balance assertion.)
616  Also the equity posting's amount is now always shown explicitly,
617  which in multicommodity situations means that multiple equity postings are shown.
618  The upshot is that a balance -B report will be unchanged after
619  the closing & opening transactions generated by the close command.
620
621- descriptions, payees, notes commands added (Caleb Maclennan)
622
623- diff: Gabriel Ebner's hledger-diff is now a built in command,
624  and https://github.com/gebner/hledger-diff is deprecated.
625
626- help: don't require a journal file
627
628- print: now also canonicalises the display style of balance assertion amounts (#1042)
629
630- reg: show negative amounts in red, like balance and Ledger
631
632- reg: fix `--average`, broken since 1.12 (#1003)
633
634- stats: show count of market prices (P directives), and the commodities covered
635
636- tags: add --values flag to list tag values.
637
638- tags: now runs much faster when there many tags
639
640## journal format
641
642- Transactions and postings generated/modified by periodic transaction
643  rules and/or transaction modifier rules are now marked with tags
644  (`generated-transaction`, `generated-posting`, `modified`) for
645  easier troubleshooting and filtering.
646
647## csv format
648
649- When interpolating CSV values, outer whitespace is now stripped.
650  This removes a potential snag in amount field assignments (#1051),
651  and hopefully is harmless and acceptable otherwise.
652
653- We no longer add inter-field spaces in CSV error messages.
654  Some CSV errors would show the problem record, eg:
655
656      2000-01-01,a,"1"
657
658  with extra spaces added, eg:
659
660      the CSV record is: "2000-01-01", "a", "1"
661
662  which was inaccurate and not valid RFC-4180 CSV format.
663
664- CSV parse errors are human-readable again (broken since 1.11) (#1038)
665
666- CSV rules now allow the amount to be unassigned, if there is an
667  assignment to "balance" (generating a balance assignment in this
668  case). (#1000)
669
670
671# 1.14.2 2019-03-20
672
673- require easytest <0.3 to fix build issue
674
675- fix some CSV parse errors which weren't in human readable format
676
677# 1.14.1 2019-03-01
678
679- fix missing Commodities.txt build error
680
681# 1.14 2019-03-01
682
683- journal: subaccount-including balance assertions have been
684  added, with syntax =* and ==* (experimental) (#290)
685
686- new commodities command lists commodity symbols
687
688- new --invert option flips sign of amounts in reports
689
690# 1.13.2 (2019/02/04)
691
692- print, register: restore the accidentally dropped -o, -O flags (#967)
693
694# 1.13.1 (2019/02/02)
695
696- stop depending on here to avoid haskell-src-meta/stackage blockage.
697
698# 1.13 (2019/02/01)
699
700- cli: reorganised commands list. Addons now have a + prefix.
701
702- cli: the command line help and manual section for all hledger's
703  commands are now consistent, and generated from the same source.
704
705- cli: comprehensive bash completion support is now provided (in
706  shell-completion/). See how-to in the Cookbook. (Jakob Schöttl)
707
708- balance --budget: budget amounts now aggregate hierarchically, like
709  account balances. Unbudgeted accounts can be shown with -E/--empty
710  (along with zero-balance accounts), and the --show-budgeted flag has
711  been dropped.  (Dmitry Astapov)
712
713- balance: new --transpose flag switches the rows and columns of
714  tabular balance reports (in txt and csv output formats). (Dmitry
715  Astapov)
716
717- close: generated balance assertions now have exact amounts with all
718  decimal digits, ignoring display precision. Also, balance assertion
719  amounts will no longer contain prices. (#941, #824, #958)
720
721- files: now shows up in the commands list
722
723- import: be silent when there's nothing to import
724
725- roi: percentages smaller than 0.01% are displayed as zero (Dmitry
726  Astapov)
727
728- stats, ui: correct file order is preserved when using --auto (#949)
729
730- journal: account directive: the account name can now be followed by
731  a comment on the same line
732
733- journal: account directive: account types for the bs/bse/cf/is
734  commands can now be set with a `type:` tag, whose value is `Asset`,
735  `Liability`, `Equity`, `Revenue`, `Expense`, `A`, `L`, `E`, `R` or
736  `X` (case-insensitive).  The previous syntax (`account assets A`) is
737  now deprecated.
738
739- journal: account directive: account sort codes like `account 1000`
740  (introduced in 1.9, deprecated in 1.11) are no longer supported.
741
742- journal: transaction modifiers (auto postings) can affect periodic
743  transactions (--auto can add postings to transactions generated with
744  --forecast). (Dmitry Astapov)
745
746- journal: balance assertion errors now show exact amounts with all
747  decimal digits.  Previously it was possible, in case of a commodity
748  directive limiting the display precision, to have a balance
749  assertion error with asserted and actual amounts looking the
750  same. (#941)
751
752- journal: fixed a periodic transaction parsing failure (#942) (Dmitry
753  Astapov)
754
755# 1.12.1 (2018/12/03)
756
757-   roi: use math-functions lib instead of statistics,
758    be more stackage nightly compatible
759
760# 1.12 (2018/12/02)
761
762-   install script: ensure a new-enough version of stack; more informative output
763
764-   build with GHC 8.6/base-4.12 (Peter Simons)
765
766-   add required upper bound for statistics (Samuel May)
767
768-   --anon anonymises more thoroughly (including linked original postings) (Moritz Kiefer)
769
770-   unbalanced transaction errors now include location info (Mykola Orliuk)
771
772-   accounts command: --drop also affects the default flat output, without needing an explicit --flat flag
773
774-   accounts command: the --codes flag has been dropped
775
776-   accounts command: filtering by non-account-name queries now works
777
778-   add command: fix transaction rendering regression during data entry and in journal file
779
780-   balance command: fix wrongful eliding of zero-balance parent accounts in tree mode (Dmitry Astapov)
781
782-   journal format, bs/bse/cf/is commands: account directives can declare account types (#877)
783    Previously you had to use one of the standard english account names
784    (assets, liabilities..) for top-level accounts, if you wanted them to
785    appear in the right place in the balancesheet, balancesheetequity,
786    cashflow or incomestatement reports.
787
788    Now you can use your preferred account names, and use account directives
789    to declare which accounting class (Asset, Liability, Equity, Revenue or
790    eXpense) an account (and its subaccounts) belongs to, by writing one of
791    the letters A, L, E, R, X after the account name, after two or more
792    spaces. This syntax may change (see issue). Experimental.
793
794    Currently we allow unlimited account type declarations anywhere in the
795    account tree. So you could declare a liability account somewhere under
796    assets, and maybe a revenue account under that, and another asset account
797    even further down. In such cases you start to see oddities like accounts
798    appearing in multiple places in a tree-mode report. I have left it this
799    way for now in case it helps with, eg, modelling contra accounts, or
800    combining multiple files each with their own account type
801    declarations. (In that scenario, if we only allowed type declarations on
802    top-level accounts, or only allowed a single account of each type,
803    complications seem likely.)
804
805-   journal format: periodic transaction rules now require a double space separator.
806    In periodic transaction rules which specify a transaction description or
807    same-line transaction comment, this must be separated from the period
808    expression by two or more spaces, to prevent ambiguous parsing. Eg
809    this will parse correctly as "monthly" thanks to the double space:
810
811        ~ monthly  In 2020 we'll end this monthly transaction.
812
813-   journal format: exact/complete balance assertions (Samuel May).
814    A stronger kind of balance assertion, written with a double equals sign,
815    asserts an account's complete account balance, not just the balance in
816    one commodity. (But only if it is a single-commodity balance, for now.)
817    Eg:
818
819        1/1
820          (a)  A 1
821          (a)  B 1
822          (a)  0   =  A 1   ; commodity A balance assertion, succeeds
823          (a)  0   == A 1   ; complete balance assertion, fails
824
825-   journal format: account directives now allow whitespace or a comment after the account name
826
827-   journal format: using \~ for home directory in include directives now works (#896) (Mykola Orliuk)
828
829-   journal format: prevent misleading parse error messages with cyclic include directives (#853) (Alex Chen)
830
831-   journal format: transaction modifier multipliers handle total-priced amounts correctly (#928).
832    Multipliers (*N) in transaction modifier rules did not multiply
833    total-priced amounts properly. Now the total prices are also multiplied,
834    keeping the transaction balanced.
835
836-   journal format: do amount inference/balance assignments/assertions before transaction modifiers (#893, #908) (Jesse Rosenthal)
837    Previously, transaction modifier (auto postings) rules were applied
838    before missing amounts were inferred. This meant amount multipliers could
839    generate too many missing-amount postings, making the transaction
840    unbalanceable (#893).
841
842    Now, missing amount inference (and balance assignments, and balance
843    assertions, which are interdependent) are done earlier, before
844    transaction modifier rules are applied (#900, #903).
845
846    Also, we now disallow the combination of balance assignments and
847    transaction modifier rules which both affect the same account, which
848    could otherwise cause confusing balance assertion failures (#912).
849    (Because assignments now generate amounts to satisfy balance assertions
850    before transaction modifier rules are applied (#908).)
851
852-   journal format: periodic transaction rules are now aware of Y default year directives. (#892)
853    Ie when a default year Y is in effect, they resolve partial or relative
854    dates using Y/1/1 as the reference date, rather than today's date.
855
856# 1.11.1 (2018/10/06)
857
858-   fix wrong transaction rendering in balance assertion errors and when
859    using the add command
860
861# 1.11 (2018/9/30)
862
863-   The default display order of accounts is now influenced by
864    the order of account directives. Accounts declared by account
865    directives are displayed first (top-most), in declaration order,
866    followed by undeclared accounts in alphabetical order. Numeric
867    account codes are no longer used, and are ignored and considered
868    deprecated.
869
870    So if your accounts are displaying in a weird order after upgrading,
871    and you want them alphabetical like before, just sort your account
872    directives alphabetically.
873
874-   Account sorting (by name, by declaration, by amount) is now more
875    robust and supported consistently by all commands (accounts,
876    balance, bs..) in all modes (tree & flat, tabular & non-tabular).
877
878-   close: new --opening/--closing flags to print only the opening or
879    closing transaction
880
881-   files: a new command to list included files
882
883-   prices: query arguments are now supported. Prices can be filtered by
884    date, and postings providing transaction prices can also be filtered.
885
886-   rewrite: help clarifies relation to print --auto (#745)
887
888-   roi: a new command to compute return on investment, based on hledger-irr
889
890-   test: has more verbose output, more informative failure messages,
891    and no longer tries to read the journal
892
893-   csv: We use a more robust CSV lib (cassava) and now support
894    non-comma separators, eg --separator ';' (experimental, this flag
895    will probably become a CSV rule) (#829)
896
897-   csv: interpolated field names in values are now properly case insensitive, so
898    this works:
899
900        fields  ...,Transaction_Date,...
901        date %Transaction_Date
902
903-   journal: D (default commodity) directives no longer break multiplier
904    amounts in transaction modifiers (AKA automated postings) (#860)
905
906-   journal: "Automated Postings" have been renamed to "Transaction Modifiers".
907
908-   journal: transaction comments in transaction modifier rules are now parsed correctly. (#745)
909
910-   journal: when include files form a cycle, we give an error instead
911    of hanging.
912
913-   upper-case day/month names in period expressions no longer give an error (#847, #852)
914
915# 1.10 (2018/6/30)
916
917-   journal: many parse error messages have become more informative, and
918    some now show the source line and error location.
919
920-   journal: ;tag: is no longer parsed as a tag named ";tag" (#655)
921
922-   journal: transaction price amounts having their own price amounts is
923    now a parse error
924
925-   journal: amounts with space as digit group separator and trailing whitespace
926    now parse correctly (#780)
927
928-   journal: in amounts containing digits and a single space, the space
929    is now interpreted as a digit group separator, not a decimal separator (#749)
930
931-   journal: in commodity/format/D directives, the amount must now include a decimal separator.
932
933    When more precise control is needed over number parsing, our
934    recommended solution is commodity directives. Commodity directives
935    that don't specify the decimal separator leave things ambiguous,
936    increasing the chance of misparsing numbers. In some cases it could
937    cause amounts with a decimal point to be parsed as if with a digit
938    group separator, so 1.234 became 1234.
939
940    It seems the simple and really only way to do this reliably is to require
941    an explicit decimal point character. Most folks probably do this already.
942    Unfortunately, it makes another potential incompatibility with ledger and
943    beancount journals. But the error message will be clear and easy to
944    work around.
945
946-   journal: directives currently have diverse and somewhat tricky
947    semantics, especially with multiple files. The manual now describes
948    their behaviour precisely.
949
950-   journal: `alias` and `apply account` directives now affect `account` directives (#825)
951
952-   journal: periodic transactions can now have all the usual transaction fields
953    (status mark, code, description, comment), for generating more expressive
954    forecast transactions.
955
956-   journal: forecast transactions now have the generating period
957    expression attached as a tag named "recur".
958
959-   journal: periodic transactions now start on the first instance of the
960    recurring date, rather than the day after the last regular transaction (#750)
961
962-   journal: periodic transaction rules now allow period expressions relative to today's date
963
964-   csv: amount-in/amount-out errors are more detailed
965
966-   balance: --drop is now ignored when not in flat mode,
967    rather than producing a corrupted report (#754)
968
969-   budget: --drop now preserves the <unbudgeted> top-level account in --budget reports
970
971-   register: in CSV output, the code field is now included (#746)
972
973-   smart dates now allow the YYYYMM format, and are better documented
974
975-   use hledger-lib 1.10
976
977# 1.9.1 (2018/4/30)
978
979-   use hledger-lib 1.9.1
980
981-   budget (balance --budget): monthly columns are displayed in the
982    proper order. This fixes a regression in 1.9.
983
984-   budget: budgets can be built from periodic transactions with
985    different intervals again. In 1.9, budgets were restricted to a
986    single interval, but this was a mistake. This restores the 1.5
987    behaviour.
988
989-   budget: budget reports are more intuitive and much less likely to
990    produce no output.
991
992-   budget: when no report interval is specified, a budget report for
993    the whole journal period is shown.
994
995-   budget: periodic transactions and the requested report period can
996    each have their own start/end dates, and the resulting report will
997    span the union of those periods, showing zeroes where data is
998    missing.
999
1000-   budget: total row and total/average columns are now calculated correctly
1001
1002-   budget: actual, percentage, and goal amounts are now aligned in
1003    columns for better readability (usually, unless numbers get huge).
1004
1005-   budget: combining --budget and --sort-amount is not yet supported
1006    and now gives an error.
1007
1008-   csv: handle "-%amount" in a rule when the CSV amount is parenthesised (#736)
1009
1010-   journal: automated postings are now generated early, before journal finalisation,
1011    so they are present for amount inference, transaction balancing, and balance assertions
1012    (#729)
1013
1014-   journal: automated postings are now inserted right after the posting that triggered them
1015    (#729)
1016
1017-   cli: command-line account aliases are now applied early, before journal finalisation,
1018    so they are equivalent to alias directives in the journal (#730)
1019
1020-   journal: inferred amounts now have the appropriate standard amount style applied
1021    (setting the precision correctly, eg). (#737)
1022
1023-   journal: when checking for balanced transactions, amount styles declared with
1024    commodity directives are also used (previously only inferred amount styles were).
1025
1026# 1.9 (2018/3/31)
1027
1028-   support ghc 8.4, latest deps
1029
1030-   journal: account directives can define a numeric account code to
1031    customize sorting. bal/bs/cf/is will sort accounts by account code,
1032    if any, then account name.
1033
1034-   journal: support scientific number notation (#704, #706)
1035
1036-   csv: reading a CSV file containing no records is no longer an error
1037
1038-   cli: when the system text encoding is UTF-8, ignore any UTF-8 BOM
1039    prefix found when reading files. (Paypal's new CSV has this BOM
1040    prefix, causing a confusing parse error.)
1041
1042-   cli: tabular reports no longer have a trailing blank line added.
1043    (This allows omitting the ">=0" delimiters in our functional tests,
1044    making them easier to read and maintain.)
1045
1046-   acc: the accounts command now has --declared and --used flags
1047
1048-   bal: the --invert flag flips all signs
1049
1050-   bal: --drop now works with CSV output
1051
1052-   bal/bs/bse/cf/is: show overall report span in title
1053
1054-   bal/bs/bse/cf/is: show short month names as headings in monthly reports
1055
1056-   bal/bs/bse/cf/is: these commands can now generate HTML output
1057
1058-   bal/bs/is/cf: drop short name and indent fields from multicolumn CSV
1059
1060-   bs/bse/cf/is: these, the "financial statement" commands, now show
1061    normal income, liability and equity balances as positive numbers.
1062    Negative numbers now indicate a contra-balance (eg an overdrawn
1063    checking account), a net loss, or a negative net worth. This makes
1064    these reports more like conventional financial statements, and easier
1065    to read and share with others. (Other commands, like balance, have not
1066    changed.) (experimental)
1067
1068-   bs/cf/is: always show a tabular report, even with no report
1069    interval. Previously you would get a simple borderless report like
1070    the original balance command. Less code, fewer bugs.
1071
1072-   bs/bse/cf/is: in CSV output, don't repeat the headings row for each subreport
1073
1074-   budget: warn that CSV output with bal --budget is unimplemented
1075
1076-   budget: bal --budget shows budget goals even with no or zero actual amounts.
1077    Makes budget reports more intuitive, at the cost of a temporary hack
1078    which may misorder columns in some cases (if actual and budget
1079    activity occur in a different range of columns).
1080
1081-   budget: --budget uses only periodic txns with the selected interval.\
1082    Budgets with different interval, eg a daily and weekly budget, are independent.
1083
1084-   budget: show mostly fixed-width columns for readability
1085
1086-   budget: fix bug where a budget report could include budget goals
1087    ending on the day before the report start date (splitSpan issue)
1088
1089-   close: the equity command has been renamed to close. It now ignores
1090    any begin date (it always closes historical end balances). It also
1091    ignores --date2.
1092
1093# 1.5 (2017/12/31)
1094
1095-   --auto adds Ledger-style automated postings to transactions (Dmitry Astapov, Mykola Orliuk)
1096
1097-   --forecast generates Ledger-style periodic transactions in the future (Dmitry Astapov, Mykola Orliuk)
1098
1099-   -V/--value uses today's market prices by default, not those of last transaction date. #683, #648
1100
1101-   add: suggest implied (parent) and declared (by account directives) account names also
1102
1103-   bal: --budget shows performance compared to budget goals defined
1104    with periodic transactions. Accounts with budget goals are
1105    displayed folded (depth-clipped) at a depth matching the budget
1106    specification. Unbudgeted accounts are hidden, or with
1107    --show-unbudgeted, shown at their usual depth. (Dmitry Astapov)
1108
1109-   import: the output of --dry-run is now valid journal format
1110
1111-   print: -B shows converted amounts again, as in 1.1, even without
1112    -x. #551 (Mykola Orliuk, Simon Michael)
1113
1114-   tag: the first argument now filters tag names, additional arguments
1115    filter transactions (#261)
1116
1117-   remove upper bounds on all but hledger* and base (experimental)
1118
1119# 1.4 (2017/9/30)
1120
1121-   cli: a @FILE argument reads flags & args from FILE, one per line
1122
1123-   cli: reorganized commands list, added some new command aliases:
1124
1125    -   accounts: a
1126    -   balance: b
1127    -   print: p, txns
1128    -   register: r
1129
1130-   cli: accept -NUM as a shortcut for --depth=NUM (eg: -2)
1131
1132-   cli: improve command-line help for --date2 (#604)
1133
1134-   cli: make --help and -h the same, drop --man and --info for now (#579)
1135
1136-   help: offers multiple formats, accepts topic substrings.
1137    The separate info/man commands have been dropped. help now
1138    chooses an appropriate documentation format as follows:
1139
1140    -   it uses info if available,
1141    -   otherwise man if available,
1142    -   otherwise $PAGER if defined,
1143    -   otherwise less if available,
1144    -   otherwise it prints on stdout
1145    -   (and it always prints on stdout when piped).
1146
1147    You can override this with the `--info`/`--man`/`--pager`/`--cat` flags.
1148    (#579)
1149
1150-   bal/bs/cf/is: --sort-amount/-S sorts by largest amount instead of
1151    account name
1152
1153-   bs/cf/is: support --output-file and --output-format=txt\|csv
1154    The CSV output should be reasonably ok for dragging into a
1155    spreadsheet and reformatting.
1156
1157-   bal/bs/cf/is: consistent double space between columns, consistent
1158    single final blank line. Previously, amounts wider than the column
1159    headings would be separated by only a single space.
1160
1161-   bs/is: don't let an empty subreport disable the grand totals (fixes #588)
1162
1163-   cf: exclude asset accounts with ":fixed" in their name (Christian G. Warden, Simon Michael, #584)
1164
1165-   new balancesheetequity command: like balancesheet but also shows
1166    equity accounts (Nicholas Niro)
1167
1168-   new import command: adds new transactions seen in one or more input
1169    files to the main journal file
1170
1171-   print: --new shows only transactions added since last time
1172    (saves state in .latest.JOURNALFILE file)
1173
1174-   new tags command: lists tags in matched transactions
1175
1176-   most addons formerly shipped in bin/ are now builtin commands. These
1177    include: check-dates, check-dupes, equity, prices, print-unique,
1178    register-match, rewrite.
1179
1180-   refactor: new Commands module and subdirectory.
1181    Builtin commands are now gathered more tightly in a single module,
1182    Hledger.Cli.Commands, facilitating change. The legacy "convert"
1183    command has been dropped.
1184
1185-   refactor: BalanceView -> CompoundBalanceCommand
1186
1187-   deps: drop support for directory < 1.2
1188
1189-   deps: allow ansi-terminal 0.7
1190
1191-   deps: drop oldtime flag, require time 1.5+
1192
1193-   deps: simplify shakespeare bounds
1194
1195-   deps: remove ghc < 7.6 support
1196
1197# 1.3.1 (2017/8/25)
1198
1199-   bs/is: don't let an empty subreport disable the grand totals (#588)
1200
1201-   allow megaparsec 6 (#594)
1202
1203-   allow megaparsec-6.1 (Hans-Peter Deifel)
1204
1205-   restore upper bounds on hledger packages
1206
1207# 1.3 (2017/6/30)
1208
1209The "uncleared" transaction/posting status, and associated UI flags
1210and keys, have been renamed to "unmarked" to remove ambiguity and
1211confusion. This means that we have dropped the `--uncleared` flag,
1212and our `-U` flag now matches only unmarked things and not pending
1213ones. See the issue and linked mail list discussion for more
1214background. (#564)
1215
1216Also the -P short flag has been added for --pending, and the -U/-P/-C
1217flags can be combined.
1218
1219bs/is: fix "Ratio has zero denominator" error (#535)
1220
1221bs/is/cf: fix --flat (#552) (Justin Le, Simon Michael)
1222
1223bal/bs/is/cf: show negative amounts in red (Simon Michael, Justin Le).
1224These commands now shows negative amounts in red, when hledger detects
1225that ANSI codes are supported, (ie when TERM is not "dumb" and stdout
1226is not being redirected or piped).
1227
1228print: show pending mark on postings (fixes #563).
1229A pending mark on postings is now displayed, just like a cleared mark.
1230Also there will now be a space between the mark and account name.
1231
1232print: amounts are now better aligned, eg when there are posting
1233status marks or virtual postings
1234
1235# 1.2 (2017/3/31)
1236
1237## CLI
1238
1239"hledger" and "hledger -h" now print a better organised commands list
1240and general usage message respectively (#297).
1241
1242The common reporting flags can now be used anywhere on the command line.
1243
1244Fixed deduplication of addons in commands list.
1245
1246Fixed ugly stack traces in command line parse error messages.
1247
1248The -V/--value flag is now a global report flag, so it works with
1249balance, print, register, balancesheet, incomestatement, cashflow,
1250etc. (Justin Le)
1251
1252The `--pivot` global reporting option replaces all account names with
1253the value of some other field or tag. It has been improved, eg:
1254
1255-   we don't add the field/tag name name as a prefix
1256-   when pivoting on a tag, if the tag is missing we show a blank
1257    (rather than showing mixed tag values and account names)
1258-   a pipe character delimiter may be used in descriptions to get a more accurate
1259    and useful payee report (`hledger balance --pivot payee`)
1260
1261options cleanups
1262
1263## Addons
1264
1265Easier installation:
1266move add-ons and example scripts to bin/,
1267convert to stack scripts,
1268add a build script to install all deps,
1269add some functional tests,
1270test add-ons with Travis CI,
1271add installation docs to download page.
1272
1273Improved docs:
1274all addons now contain their own documentation. Most of them (all but
1275hledger-budget) use a new reduced-boilerplate declaration format
1276and can show short (-h) and long (--help) command line help.
1277(Long help is declared with pre and postambles to the generated
1278options help, short help is that truncated at the start of the hledger
1279common flags.)
1280
1281`hledger` now shows a cleaner list of addon commands, showing only the
1282compiled version of an addon when both source and compiled versions
1283are in $PATH. (Addons with .exe extension or no extension are
1284considered compiled. Modification time is not checked, ie, an old
1285compiled addon will override a newer source version. If there are
1286three or more versions of an addon, all are shown. )
1287
1288New addons added/included:
1289
1290-   autosync - example symlink to ledger-autosync
1291-   budget - experimental budget reporting command supporting Ledger-like periodic transactions and automated transactions (Mykola Orliuk)
1292-   chart - pie-chart-generating prototype, a repackaging of the old hledger-chart tool
1293-   check - more powerful balance assertions (Michael Walker)
1294-   check-dupes - find accounts sharing the same leaf name (Stefano Rodighiero)
1295-   prices - show all market price records (Mykola Orliuk)
1296-   register-match - a helper for ledger-autosync's deduplication, finds best match for a transaction description
1297
1298The equity command now always generates a valid journal transaction,
1299handles prices better, and adds balance assertions (Mykola Orliuk).
1300
1301The rewrite command is more robust and powerful (Mykola Orliuk):
1302
1303-   in addition to command-line rewrite options, it understands rewrite rules
1304    defined in the journal, similar to Ledger's automated transactions (#99).
1305    Eg:
1306
1307        = ^income
1308            (liabilities:tax)  *.33
1309
1310        = expenses:gifts
1311            budget:gifts  *-1
1312            assets:budget  *1
1313
1314-   it can generate diff output, allowing easier review of the proposed
1315    changes, and safe modification of original journal files (preserving
1316    file-level comments and directives). Eg:
1317
1318        hledger-rewrite --diff Agency --add-posting 'Expenses:Taxes  *0.17' | patch
1319
1320-   rewrites can affect multiple postings in a transaction, not just one.
1321
1322-   posting-specific dates are handled better
1323
1324## balance
1325
1326A new --pretty-tables option uses unicode characters for rendering
1327table borders in multicolumn reports (#522) (Moritz Kiefer)
1328
1329## balancesheet/cashflow/incomestatement
1330
1331These commands are now more powerful, able to show multicolumn reports
1332and generally having the same features as the balance command. (Justin Le)
1333
1334balancesheet has always ignored a begin date specified with a `-b` or
1335`-p` option; now it also ignores a begin date specified with a `date:`
1336query. (Related discussion at #531)
1337
1338## print
1339
1340The output of print is now always a valid journal (fixes #465) (Mykola Orliuk).
1341
1342print now tries to preserves the format of implicit/explicit balancing
1343amounts and prices, by default. To print with all amounts explicit,
1344use the new `--explicit/-x` flag (fixes #442). (Mykola Orliuk)
1345
1346Don't lose the commodity of zero amounts/zero balance assertions (fixes #475) (Mykola Orliuk)
1347
1348## Misc
1349
1350Fix a regression in the readability of option parsing errors (#478) (Hans-Peter Deifel)
1351
1352Fix an example in Cli/Main.hs (Steven R. Baker)
1353
1354Allow megaparsec 5.2 (#503)
1355
1356# 1.1 (2016/12/31)
1357
1358## balance
1359
1360-   with -V, don't ignore market prices in the future (#453, #403)
1361
1362-   with -V and multiple same-date market prices, use the last parsed not the highest price (#403)
1363
1364## misc
1365
1366-   fix non-existent "oldtime" dependency (#431)
1367
1368-   extra/hledger-equity.hs now generates valid journal format when there are multiple commodities
1369
1370# 1.0.1 (2016/10/27)
1371
1372-   allow megaparsec 5.0 or 5.1
1373
1374-   fix benchmark build failure (#423)
1375
1376# 1.0 (2016/10/26)
1377
1378## add
1379
1380-   suggest only one commodity at a time as default amount (#383)
1381
1382    (since we currently can't input more than one at a time)
1383
1384## balance
1385
1386-   added --change flag for consistency
1387
1388-   -H/--historical now also affects single-column balance reports with a start date (#392).
1389
1390    This has the same effect as just omitting the start date, but adds consistency.
1391
1392-   in CSV output, render amounts in one-line format (#336)
1393
1394## balancesheet
1395
1396-   fix an infinite loop (#393)
1397
1398## print
1399
1400-   in CSV output, fix and rename the transaction id field
1401
1402## register
1403
1404-   fix a sorting regression with --date2 (#326)
1405
1406-   --average/-A is now affected by --historical/-H
1407
1408-   added --cumulative flag for consistency
1409
1410-   in CSV output, include the transaction id and rename the total field (#391)
1411
1412## stats
1413
1414-   fixed an issue with ordering of include files
1415
1416## misc
1417
1418-   --pivot option added, groups postings by tag instead of account (#323) (Malte Brandy)
1419
1420-   --anon option added, obfuscates account names and descriptions (#265) (Brian Scott)
1421
1422    (Only affects the hledger tool, for now.)
1423
1424-   try to clarify balance/register's various report modes,
1425
1426    kinds of "balance" displayed, and related options and language.
1427
1428-   with multiple --change/--cumulative/--historical flags, use the last one instead of complaining
1429
1430-   don't add the "d" suffix when displaying day periods
1431
1432-   stack-ify extra/hledger-rewrite.hs
1433
1434## misc
1435
1436-   added GHC 8 support, dropped GHC 7.6 and 7.8 support.
1437
1438    GHC 7.8 support could be restored with small code changes and a maintainer.
1439
1440-   a cabal.project file has been added (Moritz Kiefer)
1441
1442-   use hpack for maintaining cabal files (#371).
1443
1444    Instead of editing cabal files directly, we now edit the less
1445    verbose and less redundant package.yaml files and let stack (or
1446    hpack) update the cabal files. We commit both the .yaml and
1447    .cabal files.
1448
1449-   clean up some old cabal flags
1450
1451-   tools/simplebench has been spun off as the quickbench package.
1452
1453-   add Appveyor CI builds, provide up-to-date binaries for Windows
1454
1455-   extra: add a bunch of CSV rules examples
1456
1457## docs
1458
1459-   the website is simpler, clearer, and more mobile-friendly.
1460
1461    Docs are now collected on a single page and organised by type: getting started, reference, more.
1462
1463-   reference docs have been split into one manual for each executable and file format.
1464
1465    This helps with maintenance and packaging and also should make it
1466    easier to see what's available and to read just what you need.
1467
1468-   manuals are now provided in html, plain text, man and info formats
1469
1470    generated from the same source by a new Shake-based docs build system. (#292)
1471
1472-   versioned manuals are provided on the website, covering recent releases and the latest dev version (#385, #387)
1473
1474-   manuals are built in to the hledger executables, allowing easy offline reading on all platforms.
1475
1476        PROG -h              shows PROG's command-line usage
1477        PROG --help          shows PROG's manual (fixed width)
1478        PROG --man           shows PROG's manual with man (formatted/paged)
1479        PROG --info          shows PROG's manual with info (hypertext)
1480        hledger help [TOPIC] shows any manual
1481        hledger man  [TOPIC] shows any manual with man
1482        hledger info [TOPIC] shows any manual with info
1483
1484-   the general and reporting options are now listed in all executable manuals.
1485
1486    We assume any of them which are unsupported are harmlessly ignored.
1487
1488-   demo.hledger.org is using beancount's example journal.
1489
1490    This is the somewhat realistic example journal from the beancount
1491    project, tweaked for hledger.
1492
1493-   minor copyedits (jungle-boogie)
1494
1495## cli
1496
1497-   parsing multiple input files is now robust.
1498
1499    When multiple -f options are provided, we now parse each file
1500    individually rather than just concatenating them, so they can
1501    have different formats (#320). Note this also means that
1502    directives (like \`Y\` or \`alias\`) no longer carry over from one
1503    file to the next.
1504
1505-   -I has been added as the short flag for --ignore-assertions
1506
1507    (this is different from Ledger's CLI, but useful for hledger-ui).
1508
1509-   parsing an argument-less --debug option is more robust
1510
15110.27 (2015/10/30)
1512
1513Account aliases:
1514
1515-   Regular expression account aliases are now fast enough that you can
1516    use lots of them without slowing things down. They now take
1517    O(aliases x accounts) time, instead of O(aliases x transactions);
1518    also, regular expressions are no longer recompiled unnecessarily.
1519
1520Documentation:
1521
1522-   Each hledger package now includes one or more man pages, generated
1523    from markdown by the mighty pandoc. Currently there are six: one
1524    for each main executable and each input file format. Currently these
1525    somewhat duplicate the manual on the website; this will be resolved
1526    somehow. (#282).
1527
1528-   The site is now built with hakyll-std, a generic hakyll script.
1529
1530-   hledger once again has a HCAR entry.
1531
1532Tools:
1533
1534-   The hledger cabal files are now generated from package.yaml files by
1535    hpack, in principle, removing a lot of error-prone duplication and
1536    boilerplate. (In practice, both files are being updated manually
1537    for the moment, until hpack supports flags and conditional blocks.)
1538
1539-   Time/allocation and heap profiling is working again, and easier:
1540
1541    -   `make quickprof-CMD` generates a profile for CMD, which runs
1542        against one of the sample journals. (CMD must be one word,
1543        enclosing in double quotes isn't working here for some reason).
1544
1545    -   `make quickheap-CMD` generates a heap profile for CMD, in
1546        hledgerprof.ps, and tries to open it in a viewer (currently the
1547        mac-friendly "open" executable, so you may need to adjust this in
1548        the makefile). As with quickprof, CMD must be one word and runs
1549        against one of the sample journals.
1550
1551    -   `make hledgerprof` builds the hledgerprof executable used for
1552        time/allocation profiling. `make hledgercov` builds the hledgercov
1553        executable used for coverage reports.
1554
1555-   Travis CI now tests the build on each github push and announces
1556    status changes by email and on #hledger.
1557
1558Journal format:
1559
1560-   Dates must now begin with a digit (not /, eg).
1561
1562-   The comment directive longer requires an end comment, and will
1563    extend to the end of the file(s) without it.
1564
1565Command-line interface:
1566
1567-   Output (balance reports, register reports, print output etc.)
1568    containing wide characters, eg chinese/japanese/korean characters,
1569    should now align correctly, when viewed in apps and fonts that show
1570    wide characters as double width (#242).
1571
1572-   The argument for --depth or depth: must now be positive.
1573
1574add:
1575
1576-   Journal entries are now written with all amounts explicit, to avoid
1577    losing price info (#283).
1578
1579-   Fixed a bug which sometimes (when the same letter pair was repeated)
1580    caused it not to pick the most similar past transaction for defaults.
1581
1582balance:
1583
1584-   There is now a -V/--value flag to report current market value (as in Ledger).
1585    It converts all reported amounts using their "default market price".
1586    "Market price" is the new name for "historical prices", defined with the P directive.
1587    The default market price for a commodity is the most recent one found in the journal on or before the report end date.
1588
1589    Unlike Ledger, hledger's -V uses only the market prices recorded
1590    with P directives; it does not use the "transaction prices"
1591    recorded as part of posting amounts (which are used by -B/--cost).
1592    Also, using both -B and -V at the same time is supported.
1593
1594-   Fixed a bug in amount normalization which caused amount styles
1595    (commodity symbol placement, decimal point character, etc.) to be
1596    lost in certain cases (#230, #276).
1597
1598-   The balance command's --format option can now adjust the rendering
1599    style of multi-commodity amounts, if you begin the format string
1600    with one of:
1601
1602        %_  - renders amounts on multiple lines, bottom-aligned (the default)
1603        %^  - renders amounts on multiple lines, top-aligned
1604        %,  - renders amounts on one line, comma-separated
1605
1606-   The balance report's final total (and the line above it) now adapt
1607    themselves to a custom --format.
1608
1609print:
1610
1611-   The --match option prints the journal entry that best matches a
1612    description (ie whose description field is most similar to the value
1613    given, and if there are several equally similar, the most recent).
1614    This was originally an add-on I used to guess account names for
1615    ledger-autosync. It's nice for quickly looking up a recent
1616    transaction from a guessed or partial description.
1617
1618-   print now always right-aligns the amounts in an entry, even when
1619    they are wider than 12 characters. (If there is a price, it's
1620    considered part of the amount for right-alignment.)
1621
1622register:
1623
1624-   Amount columns now resize automatically, using more space if it's
1625    needed and available.
1626
16270.26 (2015/7/12)
1628
1629Account aliases:
1630
1631-   Account aliases are once again non-regular-expression-based, by default. (#252)
1632
1633    The regex account aliases added in 0.24 trip up people switching between
1634    hledger and Ledger. (Also they are currently slow).
1635
1636    This change makes the old non-regex aliases the default; they are
1637    unsurprising, useful, and pretty close in functionality to Ledger's.
1638
1639    The new regex aliases are still available; they must be enclosed
1640    in forward slashes. (Ledger effectively ignores these.)
1641
1642Journal format:
1643
1644-   We now parse, and also print, journal entries with no postings, as
1645    proposed on the mail lists. These are not well-formed General
1646    Journal entries/transactions, but here is my rationale:
1647
1648    -   Ledger and beancount parse them
1649    -   if they are parsed, they should be printed
1650    -   they provide a convenient way to record (and report) non-transaction events
1651    -   they permit more gradual introduction and learning of the concepts.
1652        So eg a beginner can keep a simple journal before learning about accounts and postings.
1653
1654-   Trailing whitespace after a `comment` directive is now ignored.
1655
1656Command-line interface:
1657
1658-   The -f/file option may now be used multiple times.
1659    This is equivalent to concatenating the input files before running hledger.
1660    The add command adds entries to the first file specified.
1661
1662Queries:
1663
1664-   real: (no argument) is now a synonym for real:1
1665
1666-   tag: now matches tag names with a regular expression, like most other queries
1667
1668-   empty: is no longer supported, as it overlaps a bit confusingly with
1669    amt:0. The --empty flag is still available.
1670
1671-   You can now match on pending status (#250)
1672
1673    A transaction/posting status of ! (pending) was effectively equivalent
1674    to * (cleared). Now it's a separate state, not matched by --cleared.
1675    The new Ledger-compatible --pending flag matches it, and so does
1676    --uncleared.
1677
1678    The relevant search query terms are now status:*, status:! and
1679    status: (the old status:1 and status:0 spellings are deprecated).
1680
1681    Since we interpret --uncleared and status: as "any state except cleared",
1682    it's not currently possible to match things which are neither cleared
1683    nor pending.
1684
1685activity:
1686
1687-   activity no longer excludes 0-amount postings by default.
1688
1689add:
1690
1691-   Don't show quotes around the journal file path in the "Creating..."
1692    message, for consistency with the subsequent "Adding..." message.
1693
1694balancesheet:
1695
1696-   Accounts beginning with "debt" or now also recognised as liabilities.
1697
1698print:
1699
1700-   We now limit the display precision of inferred prices. (#262)
1701
1702    When a transaction posts to two commodities without specifying the
1703    conversion price, we generate a price which makes it balance (cf
1704    http://hledger.org/manual.html#prices). The print command showed
1705    this with full precision (so that manual calculations with the
1706    displayed numbers would look right), but this sometimes meant we
1707    showed 255 digits (when there are multiple postings in the
1708    commodity being priced, and the averaged unit price is an
1709    irrational number). In this case we now set the price's display
1710    precision to the sum of the (max) display precisions of the
1711    commodities involved. An example:
1712
1713          hledgerdev -f- print
1714          <<<
1715          1/1
1716              c    C 10.00
1717              c    C 11.00
1718              d  D -320.00
1719          >>>
1720          2015/01/01
1721              c  C 10.00 @ D 15.2381
1722              c  C 11.00 @ D 15.2381
1723              d     D -320.00
1724
1725          >>>=0
1726
1727    There might still be cases where this will show more price decimal
1728    places than necessary.
1729
1730-   We now show inferred unit prices with at least 2 decimal places.
1731
1732    When inferring prices, if the commodities involved have low
1733    display precisions, we don't do a good job of rendering
1734    accurate-looking unit prices. Eg if the journal doesn't use any
1735    decimal places, any inferred unit prices are also displayed with
1736    no decimal places, which makes them look wrong to the user. Now,
1737    we always give inferred unit prices a minimum display precision of
1738    2, which helps a bit.
1739
1740register:
1741
1742-   Postings with no amounts could give a runtime error in some obscure case, now fixed.
1743
1744stats:
1745
1746-   stats now supports -o/--outputfile, like register/balance/print.
1747-   An O(n\^2) performance slowdown has been fixed, it's now much faster on large journals.
1748
1749        +--------------------------------------++--------+--------+
1750        |                                      ||   0.25 |   0.26 |
1751        +======================================++========+========+
1752        | -f data/100x100x10.journal     stats ||   0.10 |   0.16 |
1753        | -f data/1000x1000x10.journal   stats ||   0.45 |   0.21 |
1754        | -f data/10000x1000x10.journal  stats ||  58.92 |   2.16 |
1755        +--------------------------------------++--------+--------+
1756
1757Miscellaneous:
1758
1759-   The June 30 day span was not being rendered correctly; fixed. (#272)
1760
1761-   The bench script invoked by "cabal bench" or "stack bench" now runs
1762    some simple benchmarks.
1763
1764    You can get more accurate benchmark times by running with --criterion.
1765    This will usually give much the same numbers and takes much longer.
1766
1767    Or with --simplebench, it benchmarks whatever commands are
1768    configured in bench/default.bench. This mode uses the first
1769    "hledger" executable in $PATH.
1770
1771-   The deprecated shakespeare-text dependency has been removed more thoroughly.
1772
17730.25.1 (2015/4/29)
1774
1775-   timelog: support the description field (#247)
1776
17770.25 (2015/4/7)
1778
1779-   GHC 7.10 compatibility (#239)
1780
1781-   build with terminfo support on POSIX systems by default
1782
1783    On non-windows systems, we now build with terminfo support by
1784    default, useful for detecting terminal width and other things.
1785
1786    This requires the C curses dev libraries, which makes POSIX
1787    installation slightly harder; if it causes problems you can
1788    disable terminfo support with the new `curses` cabal flag, eg:
1789    cabal install -f-curses ... (or cabal might try this
1790    automatically, I'm not sure).
1791
1792-   register: use the full terminal width, respect COLUMNS, allow column width adjustment
1793
1794    On POSIX systems, register now uses the full terminal width by
1795    default. Specifically, the output width is set from:
1796
1797    1.  a --width option
1798    2.  or a COLUMNS environment variable (NB: not the same as a bash shell var)
1799    3.  or on POSIX (non-windows) systems, the current terminal width
1800    4.  or the default, 80 characters.
1801
1802    Also, register's --width option now accepts an optional
1803    description column width following the overall width (--width
1804    WIDTH\[,DESCWIDTH\]). This also sets the account column width, since
1805    the available space (WIDTH-41) is divided up between these two
1806    columns. Here's a diagram:
1807
1808          <--------------------------------- width (W) ---------------------------------->
1809          date (10)  description (D)       account (W-41-D)     amount (12)   balance (12)
1810          DDDDDDDDDD dddddddddddddddddddd  aaaaaaaaaaaaaaaaaaa  AAAAAAAAAAAA  AAAAAAAAAAAA
1811
1812    Examples:
1813
1814          $ hledger reg                 # use terminal width on posix
1815          $ hledger reg -w 100          # width 100, equal description/account widths
1816          $ hledger reg -w 100,40       # width 100, wider description
1817          $ hledger reg -w $COLUMNS,100 # terminal width and set description width
1818
1819-   balance: new -T/--row-total and -A/--average options
1820
1821    In multicolumn balance reports, -T/--row-total now shows a row totals
1822    column and -A/--average shows a row averages column.
1823    This helps eg to see monthly average expenses (hledger bal \^expenses -MA).
1824
1825    NB our use of -T deviates from Ledger's UI, where -T sets a custom
1826    final total expression.
1827
1828-   balance: -N is now short for --no-total
1829-   balance: fix partially-visible totals row with --no-total
1830
1831    A periodic (not using --cumulative or --historical) balance report
1832    with --no-total now hides the totals row properly.
1833
1834-   journal, csv: comment lines can also start with *
1835
1836    As in Ledger. This means you can embed emacs org/outline-mode nodes in
1837    your journal file and manipulate it like an outline.
1838
18390.24.1 (2015/3/15)
1840
1841-   journal: fix balance accumulation across assertions (#195)
1842
1843    A sequence of balance assertions asserting first one commodity, then
1844    another, then the first again, was not working.
1845
1846-   timelog: show hours with two decimal places instead of one (#237)
1847-   in weekly reports, simplify week 52's heading like the others
1848-   disallow trailing garbage in a number of parsers
1849
1850    Trailing garbage is no longer ignored when parsing the following:
1851    balance --format option, register --width option, hledger-rewrite
1852    options, hledger add's inputs, CSV amounts, posting amounts,
1853    posting dates in tags.
1854
1855-   allow utf8-string-1 (fpco/stackage/#426)
1856
18570.24 (2014/12/25)
1858
1859General:
1860
1861-   fix redundant compilation when cabal installing the hledger packages
1862-   switch to Decimal for representing amounts (#118)
1863-   report interval headings (eg in balance, register reports) are shown
1864    compactly when possible
1865-   general speedups
1866
1867Journal format:
1868
1869-   detect decimal point and digit groups more robustly (#196)
1870-   check that transaction dates are followed by whitespace or newline
1871-   check that dates use a consistent separator character
1872-   balance assertions now are specific to a single commodity, like
1873    Ledger (#195)
1874-   support multi-line comments using "comment", "end comment"
1875    directives, like Ledger
1876
1877CSV format:
1878
1879-   reading CSV data from stdin now works better
1880-   the rules file include directive is now relative to the current
1881    file's directory (#198)
1882-   the original order of same-day transactions is now usually preserved
1883    (if the records appear to be in reverse date order, we reverse them
1884    before finally sorting by transaction date)
1885-   CSV output is now built in to the balance, print, and register
1886    commands, controlled by -O/--output-format (and -o/--output-file,
1887    see below)
1888
1889CLI:
1890
1891-   the --width and --debug options now require their argument (#149)
1892-   when an option is repeated, the last value takes precedence (#219).
1893    This is helpful eg for customising your reporting command aliases on
1894    the fly.
1895-   smart dates (used in -p/-b/-e/date:/date2:) now must use a
1896    consistent separator character, and must be parseable to the end
1897-   output destination and format selection is now built in to the
1898    balance, print and register commands, controlled by -o/--output-file
1899    and -O/--output-format options. Notes:
1900    -   -o - means stdout
1901    -   an output file name suffix matching a supported format will also
1902        set the output format, unless overridden by --output-format
1903    -   commands' supported output formats are listed in their
1904        command-line help. Two formats are currently available:
1905        txt (the default) and csv.
1906-   balance assertions can be disabled with --ignore-assertions
1907
1908Account aliases:
1909
1910-   all matching account aliases are now applied, not just one directive
1911    and one option
1912-   account aliases now match by case insensitive regular expressions
1913    matching anywhere in the account name
1914-   account aliases can replace multiple occurrences of the pattern
1915    within an account name
1916-   an account alias replacement pattern can reference matched groups
1917    with \N
1918
1919Queries:
1920
1921-   date:/date2: with a malformed date now reports an error instead of
1922    being ignored
1923-   amt: now supports >= or <=
1924-   clarify status: docs and behaviour; \"*\" is no longer a synonym for
1925    "1" (fixes #227)
1926
1927balance:
1928
1929-   fix: in tree mode, --drop is ignored instead of showing empty account names
1930-   a depth limit of 0 now shows summary items with account name "...",
1931    instead of an empty report (#206)
1932-   in multicolumn balance reports, -E now also shows posting-less
1933    accounts with a non-zero balance during the period (in addition to
1934    showing leading & trailing empty columns)
1935-   in multicolumn reports, multi-commodity amounts are rendered on one
1936    line for better layout (#186)
1937-   multicolumn reports' title now includes the report span
1938
1939register:
1940
1941-   runs faster with large output
1942-   supports date2:, and date:/date2: combined with --date2, better (fixes
1943    #201, #221, #222)
1944-   a depth limit of 0 now shows summary items (see balance)
1945-   -A/--average now implies -E/--empty
1946-   postings with multi-commodity amounts are now top-aligned, like
1947    Ledger
1948
1949Extra commands:
1950
1951-   hledger-equity: fix end date in title; print closing entry too
1952-   hledger-check-dates: added
1953
19540.23.3 (2014/9/12)
1955
1956-   allow text 1.2+ (#207)
1957
19580.23.2 (2014/5/8)
1959
1960-   register: also fix date sorting of postings (#184)
1961
19620.23.1 (2014/5/7)
1963
1964-   register: fix a refactoring-related regression that the tests
1965    missed: if transactions were not ordered by date in the journal,
1966    register could include postings before the report start date in the
1967    output. (#184)
1968-   add: don't apply a default commodity to amounts on entry (#138)
1969-   cli: options before the add-on command name are now also passed to it (#182)
1970-   csv: allow the first name in a fields list to be empty (#178)
1971-   csv: don't validate fields count in skipped lines (#177)
1972
19730.23 (2014/5/1)
1974
1975Journal format:
1976
1977-   A # (hash) in column 0 is now also supported for starting a top-level journal comment, like Ledger.
1978-   The "too many missing amounts" error now reminds about the 2-space rule.
1979-   Fix: . (period) is no longer parsed as a valid amount.
1980-   Fix: default commodity directives no longer limit the maximum display precision (#169).
1981-   Fix: + before an amount is no longer parsed as part of the commodity (#181).
1982
1983CLI:
1984
1985-   Command-line help cleanups, layout improvements.
1986-   Descriptions are shown for known add-ons in the command list.
1987-   Command aliases have been simplified.
1988-   Add-ons can now have any of these file extensions:
1989    none, hs, lhs, pl, py, rb, rkt, sh, bat, com, exe.
1990-   Add-ons are displayed without their file extensions when possible.
1991-   Add-ons with the same name as a built-in command or alias are ignored.
1992-   Fix: add-on detection and invocation now works on windows.
1993-   Fix: add-ons with digits in the name are now found.
1994-   Fix: add-on arguments containing a single quote now work.
1995-   Fix: when -- is used to hide add-on options from the main program,
1996    it is no longer passed through as an add-on argument.
1997
1998Queries:
1999
2000-   The currency/commodity query prefix (sym:) has been renamed to cur:.
2001-   Currency/commodity queries are applied more strongly in register and
2002    balance reports, filtering out unwanted currencies entirely. Eg
2003    hledger balance cur:'$' now reports only the dollar amounts even if
2004    there are multi-currency transactions or postings.
2005-   Amount queries like amt:N, amt:<N and amt:>N, where N is not 0, now do an unsigned
2006    comparison of the amount and N. That is, they compare the absolute magnitude.
2007    To do a signed comparison instead, write N with its sign (eg amt:+N, amt:<+N, amt:>-N).
2008-   Fix: amount queries no longer give false positives on multi-commodity amounts.
2009
2010accounts:
2011
2012-   An accounts command has been added, similar to Ledger's, for listing account names
2013    in flat or hierarchical mode.
2014
2015add:
2016
2017-   Tab completion now works at all prompts, and will insert the default if the input area is empty.
2018-   Account and amount defaults are more robust and useful.
2019-   Transactions may also be completed by the enter key, when there are no more default postings.
2020-   Input prompts are displayed in a different colour when supported.
2021
2022balance:
2023
2024-   Balance reports in flat mode now always show exclusive (subaccount-excluding) balances.
2025-   Balance reports in flat mode with --depth now aggregate deeper accounts at the depth limit instead of excluding them.
2026-   Multicolumn reports in flat mode now support --drop.
2027-   Multicolumn balance reports can now show the account hierarchy with --tree.
2028-   Multicolumn report start/end dates are adjusted to encompass the displayed
2029    report periods, so the first and last periods are "full" and comparable to the others.
2030-   Fix: zero-balance leaf accounts below a non-zero-balance parent are no longer always shown (#170).
2031-   Fix: multicolumn reports now support --date2 (cf #174).
2032
2033balancesheet, cashflow, incomestatement:
2034
2035-   These commands now support --flat and --drop.
2036
2037print:
2038
2039-   Tag queries (tag:) will now match a transaction if any of its postings match.
2040
2041register:
2042
2043-   The --display option has been dropped. To see an accurate running total which
2044    includes the prior starting balance, use --historical/-H (like balance).
2045-   With a report interval, report start/end dates are adjusted to encompass the displayed
2046    periods, so the first and last periods are "full" and comparable to the others.
2047-   Fix: --date2 now works with report intervals (fixes #174).
2048
2049Miscellaneous:
2050
2051-   Default report dates now derive from the secondary dates when --date2 is in effect.
2052-   Default report dates now notice any posting dates outside the transaction dates' span.
2053-   Debug output improvements.
2054-   New add-on example: extra/hledger-rewrite.hs, adds postings to matched entries.
2055-   Compatible with GHC 7.2 (#155) - GHC 7.8, shakespeare 2
2056
20570.22.2 (2014/4/16)
2058
2059-   display years before 1000 with four digits, not three
2060-   avoid pretty-show to build with GHC < 7.4
2061-   allow text 1.1, drop data-pprint to build with GHC 7.8.x
2062
20630.22.1 (2014/1/6) and older: see http://hledger.org/release-notes or doc/release-notes.md.
2064