Commit Graph

150 Commits

Author SHA1 Message Date
Jakub Zárybnický
c67404c73d lib: Fix compile errors in tests 2018-08-14 16:05:06 +01:00
Dmitry Astapov
d82370d10b lib, app, web: remove differences between command line and journal file aliases 2018-04-17 16:09:11 -07:00
Dmitry Astapov
f6ec26e321 lib, app, web, ui: rename readJournalFile[s]WithOpts to readJournalFile, same for tryReader[s]WithOpts 2018-04-17 15:25:02 -07:00
Simon Michael
ae8046d47b lib: restore/update haddocks on readJournalFile[s]WithOpts
[ci skip]
2018-04-17 14:34:43 -07:00
Dmitry Astapov
5579af9a04 lib: remove readJournalFile(s) - supeceded by readJournalFile(s)WithOpts 2018-04-17 14:33:32 -07:00
Dmitry Astapov
37607beaea lib, app, web: use readJournalFileWithOpts instead of readJournalFile whenever possible 2018-04-17 14:33:32 -07:00
Dmitry Astapov
ecf49b1e4b lib: auto postings generated before amount inference and balance checks (#729) 2018-04-17 14:33:32 -07:00
Simon Michael
81e964502b lib: refactor low-level text file reading 2018-01-04 16:17:25 -08:00
Simon Michael
5de51c9bad fix warnings/errors found by make stacktest 2017-09-30 13:00:22 -10:00
Simon Michael
7edacdf443 cli: import command! hledger import *.csv adds new txns to main file 2017-09-17 18:57:51 -07:00
Simon Michael
1edb828a75 lib, print: rename --new's save files to .latest.*, easier to manage 2017-09-17 13:26:42 -07:00
Simon Michael
669fa706c0 print: --new shows only transactions added since last time
First cut, error messages could be refined etc.
2017-09-15 09:55:17 -07:00
Simon Michael
e3c4a76119 add & use simpler readJournalFilesWithOpts/InputOpts api 2017-09-14 17:43:32 -07:00
Simon Michael
e8dcef5b5f lib: disable WIP ledger4 parser, lighten dependencies 2017-03-29 21:06:26 -07:00
Johannes Gerer
2e8e67aa09 Changed behavior of readJournalFiles to be identical to readJournalFile for singleton lists (#437) 2016-12-07 07:59:24 -08:00
Simon Michael
1f2276c100 lib: mark ledger reader as experimental, don't use automatically 2016-11-20 10:42:12 -08:00
Simon Michael
98ef8f9a60 lib, cli: allow a READER: prefix on data file paths
This provides a way to override the file format detection logic,
useful eg for files with wrong extensions or standard input.
2016-11-20 10:32:22 -08:00
Simon Michael
7d56af5a03 lib: restrict imports, avoiding GHCI clashes 2016-11-20 10:27:16 -08:00
Simon Michael
1539b258b9 lib: more Hledger.Read cleanup 2016-11-19 08:57:03 -08:00
Simon Michael
b6ff170688 lib: simplify format detection, avoid ledger reader by default
When we don't know a file's format, instead of choosing a subset of
readers based on content sniffing, now we just try them all.
Also, LedgerReader is now used only as a last resort,
as it's not yet competitive with JournalReader.
2016-11-18 13:24:57 -08:00
Simon Michael
12151e05c0 lib: some Hledger.Read cleanup 2016-11-17 20:20:07 -08:00
Simon Michael
27dd1ca593 lib: add a basic ledger journal reader using ledger4's ledger-parse
This reader is used by default for files with suffix .ledger or .l,
and tried along with the other readers for files of unknown type.

Currently only the bare minimum of the raw parsed data is used:
transaction dates/descriptions and posting accounts/amounts,
with the rest being ignored.

Amounts are parsed the same way as in the hledger journal format.
Malformed amounts might be ignored instead of error-reported.
2016-11-12 14:22:27 -08:00
Simon Michael
a1b68009da lib: fix tests; always try parsing stdin as journal 2016-05-24 19:00:58 -07:00
Simon Michael
c89c33b36e lib: textification: parse stream
10% more allocation, but 35% lower maximum residency, and slightly quicker.

hledger -f data/100x100x10.journal stats
<<ghc: 39327768 bytes, 77 GCs, 196834/269496 avg/max bytes residency (3 samples), 2M in use, 0.000 INIT (0.010 elapsed), 0.020 MUT (0.092 elapsed), 0.014 GC (0.119 elapsed) :ghc>>
<<ghc: 42842136 bytes, 84 GCs, 194010/270912 avg/max bytes residency (3 samples), 2M in use, 0.000 INIT (0.009 elapsed), 0.016 MUT (0.029 elapsed), 0.012 GC (0.120 elapsed) :ghc>>

hledger -f data/1000x1000x10.journal stats
<<ghc: 314291440 bytes, 612 GCs, 2070776/6628048 avg/max bytes residency (7 samples), 16M in use, 0.000 INIT (0.000 elapsed), 0.128 MUT (0.144 elapsed), 0.059 GC (0.070 elapsed) :ghc>>
<<ghc: 349558872 bytes, 681 GCs, 1397597/4106384 avg/max bytes residency (7 samples), 11M in use, 0.000 INIT (0.004 elapsed), 0.124 MUT (0.133 elapsed), 0.047 GC (0.053 elapsed) :ghc>>

hledger -f data/10000x1000x10.journal stats
<<ghc: 3070026824 bytes, 5973 GCs, 12698030/62951784 avg/max bytes residency (10 samples), 124M in use, 0.000 INIT (0.002 elapsed), 1.268 MUT (1.354 elapsed), 0.514 GC (0.587 elapsed) :ghc>>
<<ghc: 3424013128 bytes, 6658 GCs, 11405501/41071624 avg/max bytes residency (11 samples), 111M in use, 0.000 INIT (0.001 elapsed), 1.343 MUT (1.406 elapsed), 0.511 GC (0.573 elapsed) :ghc>>

hledger -f data/100000x1000x10.journal stats
<<ghc: 30753387392 bytes, 59811 GCs, 117615462/666703600 avg/max bytes residency (14 samples), 1588M in use, 0.000 INIT (0.000 elapsed), 12.068 MUT (12.238 elapsed), 6.015 GC (7.190 elapsed) :ghc>>
<<ghc: 34306530696 bytes, 66727 GCs, 76806196/414629312 avg/max bytes residency (14 samples), 1009M in use, 0.000 INIT (0.010 elapsed), 14.357 MUT (16.370 elapsed), 5.298 GC (6.534 elapsed) :ghc>>
2016-05-24 19:00:57 -07:00
Simon Michael
0f5ee154c4 lib: simplify parsers; cleanups (#275)
The journal/timeclock/timedot parsers, instead of constructing (opaque)
journal update functions which are later applied to build the journal,
now construct the journal directly (by modifying the parser state). This
is easier to understand and debug. It also removes any possibility of
the journal updates being a space leak. (They weren't, in fact memory
usage is now slightly higher, but that will be addressed in other ways.)

Also:

Journal data and journal parse info have been merged into one type (for
now), and field names are more consistent.

The ParsedJournal type alias has been added to distinguish being-parsed
and finalised journals.

Journal is now a monoid.

stats: fixed an issue with ordering of include files

journal: fixed an issue with ordering of included same-date transactions

timeclock: sessions can no longer span file boundaries (unclocked-out
sessions will be auto-closed at the end of the file).

expandPath now throws a proper IO error (and requires the IO monad).
2016-05-23 00:44:19 -07:00
Simon Michael
7f5e09096f lib: rename JournalContext to JournalParseState 2016-05-18 20:57:34 -07:00
Simon Michael
ae490d738f lib: Hledger.Read notes 2016-05-18 16:42:25 -07:00
Simon Michael
20bfceff2e lib: allow multiple files of different format (#320)
When multiple files are specified with multiple -f options, we now
parse each one individually, rather than just concatenating them, so
they can have different formats.

Directives (like default year or account aliases) no longer carry over
from one file to the next. Limitation or feature ?
2016-05-18 16:41:52 -07:00
Simon Michael
84097b75c7 journal: can now include timeclock/timedot files (#320)
journal files can now include journal, timeclock or timedot files (but
not yet CSV files). Also timeclock/timedot files no longer support
default year directives.

The Hledger.Read.* modules have been reorganised for better reuse.
Hledger.Read.Utils has been renamed Hledger.Read.Common and holds
low-level parsers & utilities; high-level read utilities have moved to
Hledger.Read.
2016-05-17 19:46:54 -07:00
Simon Michael
df4b82740b lib: make the supported format names accessible 2016-04-18 16:43:57 -07:00
Simon Michael
588f36d662 rename timelog format to timeclock 2016-04-12 21:13:19 -07:00
Simon Michael
1cf223a2db lib: finish move of reading utils, useful for 320
It seems this already began in today's timedot commit.
2016-02-19 21:37:12 -08:00
Simon Michael
06b54bf05e lib: timedot format, convenient for time logging
Timedot is a plain text format for logging dated, categorised
quantities (eg time), supported by hledger.  It is convenient for
approximate and retroactive time logging, eg when the real-time
clock-in/out required with a timeclock file is too precise or too
interruptive.  It can be formatted like a bar chart, making clear at a
glance where time was spent.
2016-02-19 17:55:57 -08:00
Simon Michael
d24b1b96f7 lib: parser cleanups 2015-10-17 12:09:03 -07:00
Simon Michael
ba6269981b begin reviving journalreader unit tests 2015-06-11 10:16:46 -07:00
Imuli
49f1744ae5 read multiple files: internals 2015-05-28 10:40:48 -07:00
Simon Michael
ef890e1b23 add: quote file name consistently in output
Don't show quotes around the journal file path in the "Creating..."
message since there aren't any in the subsequent "Adding..." message.
2015-05-27 14:41:23 -07:00
Simon Michael
077e3c6a02 journal: re-add non-regex aliases, as default (#252)
The regex account aliases added in 0.24 trip up people switching between
hledger and Ledger. (Also they are currently slow).

This change makes the old non-regex aliases the default; they are
unsurprising, useful, and pretty close in functionality to Ledger's.

The new regex aliases are also available; they must be enclosed in
forward slashes. Ledger effectively ignores these, which is ok.

Also clarify docs, refactor, and use the same parser for alias
directives and alias options
2015-05-14 13:01:50 -07:00
Simon Michael
70d87613f2 some cleanup of debug trace helpers 2015-05-14 13:01:49 -07:00
Simon Michael
8e50395b7c ErrorT -> ExceptT, handle mtl <2.2.1 && >=2.2.1 (#239) 2015-03-29 14:16:42 -07:00
Julien Moutinho
cf28985cf2 lib: move from Text.ParserCombinators.Parsec to Text.Parsec
NOTE: required to use liftIO in includedirective
SEE: http://www.vex.net/~trebla/haskell/parsec-generally.xhtml#IO
2014-11-20 10:08:30 +01:00
Gergely Risko
6e4a7dff8c Add support for ledger3 style multi-line comments 2014-10-26 19:20:46 +01:00
gwern
d1618aaca8 strip trailing whitespace from all Haskell files 2014-10-14 18:48:24 -07:00
Simon Michael
0c3148ac7b add an --ignore-assertions flag
Can be helpful when reading Ledger files, where assertions may have
different semantics; or for getting some answers from your journal
to help you fix your assertions.

Could be called --no-assertions, but this might create surprise when it
has an effect contrary to --no-new-accounts.

I had to add another flag throughout the parsers & journal read
functions, ok for now.
2014-07-01 18:26:37 -07:00
Simon Michael
cf3d21afef csv and general reader fixes, cleanups
- The CSV reader no longer writes a "(stdin).rules" file when reading
  from stdin.

- Selection of reader(s) is now smarter when input is coming from stdin.
  Previously, all readers were considered applicable for stdin.  This
  meant that when reading a CSV file from stdin, the journal and timelog
  readers were always tried first, and if the CSV file was unparseable,
  you'd see the first (journal) reader's error instead of the CSV
  reader's.  Now, the readers do some basic content sniffing when
  reading stdin, so it generally tries only the one right reader and
  we'll see the right errors.

- The read system now has more debug output.
2014-05-09 17:55:32 -07:00
Simon Michael
7291977e6f rename Format to StorageFormat 2014-03-02 13:37:10 -08:00
Simon Michael
431ef894e0 cli: clarify "hledger add" command in no journal file error 2014-02-12 09:15:21 -08:00
Simon Michael
5223bc5c41 lib: rename and expose more journal file parsers 2014-02-05 18:55:38 -08:00
Simon Michael
dc8b687056 extra: hledger-rewrite script 2014-02-05 13:03:06 -08:00
Simon Michael
42385fc8bf parsing: read dos line endings, deprecate encoding compatibility layer
We should now read all text in universal newline mode, so eg journal
files with DOS/windows line endings are fine.

This also deprecates and disables our IO encoding compatibility layer,
which prevented many encoding-related problems with certain platforms
and GHC versions. With modern GHC (7.x) this is now hopefully totally
unnecessary, but the module remains in place just in case.
2013-04-12 16:18:20 -07:00
Simon Michael
9ffb0b2d1f export journal file code parser, part 2 - missed a bit >:| 2013-02-25 19:35:51 +00:00
Simon Michael
e75abc4625 parse posting dates, better comment/tag handling, begin using HTF for unit testing 2012-12-06 00:28:23 +00:00
Simon Michael
64180b18ef refactor: clarify that price amounts have only a single commodity 2012-11-19 23:17:55 +00:00
Simon Michael
4567e91409 refactor: move amount display settings out of commodity, simplify amount construction 2012-11-19 21:20:10 +00:00
Simon Michael
5e944374de web: don't auto-create a missing journal file at startup 2012-06-29 22:48:41 +00:00
Simon Michael
a6d93a164d enable csv as a native data format (not yet obeying --rules-file) 2012-03-23 17:14:24 +00:00
Simon Michael
50068221c3 fix build warnings in all GHC versions 2012-03-29 21:19:35 +00:00
Simon Michael
1062e2f9a4 clean up reader selection, don't write a csv rules file on journal parse error 2012-05-28 18:40:36 +00:00
Simon Michael
3ee6a351f3 big query/tests/show refactoring
- use new query system for command line too, filterspec is no more
- move unit tests near the code they test, run them in bottom up order, add more
- more precise Show instances, used for debugging not ui
2012-05-27 18:14:20 +00:00
Simon Michael
db4d853a3f refactor: move readJournal' 2012-04-14 01:10:39 +00:00
Simon Michael
88212f26e8 simplify journal parser names 2012-05-09 15:34:05 +00:00
Simon Michael
8492f6cae4 fix unicode handling on GHC >= 7.2, unify utf8 IO compatibility layer
tests pass again from GHC 6.12.3 to 7.4.1
2012-03-29 19:06:31 +00:00
Simon Michael
d4451ce5e3 read system cleanup, require conversion rules from a file to simplify API 2012-03-24 18:08:11 +00:00
Simon Michael
e396c0dc8d push csv rule and format string types down 2012-03-24 01:58:34 +00:00
Simon Michael
fdb3677129 try only as many data readers as needed for a successful read 2012-03-23 17:13:30 +00:00
Simon Michael
6eb7ad28e1 refactor/beef up readJournal/readJournalFile 2012-03-23 16:21:41 +00:00
Simon Michael
4d7a809c4a cleanups and early code for csv reader based on convert 2012-03-10 21:55:48 +00:00
Simon Michael
2e8cf1c7f2 reader code cleanups 2012-03-10 18:13:32 +00:00
Simon Michael
120a9fd0e1 docs: readJournalFile haddock fix 2012-03-11 21:36:02 +00:00
Simon Michael
de502e732b drop unused TIMELOG env var 2011-09-21 23:12:53 +00:00
Simon Michael
556e3c9246 cli: give literal tilde error also with -f 2011-09-21 23:10:44 +00:00
Simon Michael
f5eecc34a3 cli: give a non-confusing error when literal tilde found in LEDGER_FILE 2011-09-21 22:58:47 +00:00
Simon Michael
14881d0515 add: trim whitespace in auto-created journal 2011-09-26 20:56:01 +00:00
Simon Michael
5ccfb9cf7a note the use of unix line endings on all platforms (#51) 2011-09-27 20:55:48 +00:00
Simon Michael
9b2a5f56e1 only the add and web commands auto-create the journal file 2011-09-23 03:53:14 +00:00
Simon Michael
a44aa8d7d2 refactor: remove unnecessary LANGUAGE CPP pragmas 2011-07-17 23:29:57 +00:00
Simon Michael
cbb0fc5c59 move basic reports into hledger-lib 2011-08-15 22:59:06 +00:00
Simon Michael
059825a9b2 optionsgeddon.. port to cmdargs and a fully modal cli 2011-08-15 22:50:09 +00:00
Simon Michael
e4c4405c62 refactor: simplify some imports 2011-07-17 23:05:56 +00:00
Simon Michael
5084280879 imports, api cleanup 2011-05-28 04:11:44 +00:00
Simon Michael
6a845eb5e4 i18n: always read and write UTF-8, ignoring current locale (#34)
Also remove a bunch of CPP conditions.
Uses the GHC-version-independent UTF-8 layer from pandoc.
2011-01-21 01:24:51 +00:00
Simon Michael
b4eca62334 switch default journal file name to ~/.hledger.journal, to avoid breaking mac filevault (#41) 2011-04-17 20:35:58 +00:00
Simon Michael
44709f1e16 handle a blank LEDGER_FILE or LEDGER value more gracefully (use the default file path) 2011-04-18 05:53:23 +00:00
Simon Michael
eefae63bb6 look at LEDGER_FILE for the journal path, otherwise LEDGER, like c++ ledger 2011-04-17 21:26:46 +00:00
Simon Michael
dd9e78a67a reorganize tests 2010-12-27 20:26:22 +00:00
Simon Michael
17d5acf64b refactor: more reader cleanups 2010-11-15 07:18:35 +00:00
Simon Michael
a3a7a346ac uniquify reader module names 2010-11-15 07:01:46 +00:00
Simon Michael
d6c2cf6a90 parsing: save final parse context with journal 2010-11-13 15:03:40 +00:00
Simon Michael
334974dedd fix double error message output, clean up some ghc-version-specific imports 2010-09-03 23:39:11 +00:00
Simon Michael
d29b393ca2 fix a failing test, handle unicode better in errors 2010-09-05 18:18:50 +00:00
Simon Michael
0773dde872 web: ui cleanups, replace balance/register with combo view 2010-07-27 22:49:45 +00:00
Simon Michael
2f6b82122f tweak journal file auto-creation, add tests 2010-07-17 00:45:12 +00:00
Simon Michael
aaf14ffda1 fix a cabal dependency issue 2010-07-14 07:08:20 +00:00
Simon Michael
eefb04abfe auto-create missing journal files rather than giving an error 2010-07-13 19:36:43 +00:00
Simon Michael
7d7159609b refactor: much renaming of ledger -> journal, hopefully the right amount 2010-07-13 06:30:06 +00:00
Simon Michael
2a2b896c1d webyesod: validate the journal before accepting an edit 2010-07-09 23:51:49 +00:00
Simon Michael
aa21f95b9e webyesod: a destructive wiki-style edit form for journals
Warning: this is the first hledger feature which can alter your existing
journal data.  You can now edit, or ERASE, the (top-level) journal file
through the web ui, and there is no access control. A numbered backup of
the file will be saved at each edit, in normal circumstances.
2010-07-09 23:00:04 +00:00
Simon Michael
8a64792ba7 smarter file reading: detect (or specify) intended data format and show appropriate error messages
New data reader modules need to provide just reader :: Reader, which is
the format name, a detector predicate, and a parser.
2010-06-25 14:56:48 +00:00
Simon Michael
1ec1f7c4ea more file reading cleanup, try each known format in turn
Currently this is just the journal and timelog file formats.  This is more
scalable, but when things go wrong there is no longer just a single parse
error. For now we'll just show the first error, the one from the journal
file parser.
2010-05-31 01:15:18 +00:00
Simon Michael
a848a835a2 clean up and combine I/O and parsing under Hledger.Read.*
This facilitates adding readers for new data formats. Timelog parsing is temporarily broken.
2010-05-30 19:11:58 +00:00