From 0a1ff035421d5f97675ad769a7fcdbc68399f3dc Mon Sep 17 00:00:00 2001 From: Johann Klähn Date: Tue, 8 Jan 2013 23:20:08 +0100 Subject: fix bug 788: behaviour of source_context for '-f -' `session_t::read_data` did not set context.pathname to `/dev/stdin` for the special case `-f -`. I chose to adjust `source_context` too as there is no sensible context if no file name is provided. --- test/regress/BF3C1F82.test | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 test/regress/BF3C1F82.test (limited to 'test/regress/BF3C1F82.test') diff --git a/test/regress/BF3C1F82.test b/test/regress/BF3C1F82.test new file mode 100644 index 00000000..8d465f4d --- /dev/null +++ b/test/regress/BF3C1F82.test @@ -0,0 +1,12 @@ +; Check that error reporting works for "-f -" + +2012/02/30 * Test + a 1 + b +test -f - reg -> 1 +__ERROR__ +While parsing file "/dev/stdin", line 3: +While parsing transaction: + +Error: Day of month is not valid for year +end test -- cgit v1.2.3 From d1c96190e9549267782704eab991bf304d3f86e2 Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Wed, 16 Jan 2013 18:10:30 -0600 Subject: Revert "fix bug 788: behaviour of source_context for '-f -'" This reverts commit 0a1ff035421d5f97675ad769a7fcdbc68399f3dc. --- src/error.cc | 2 +- src/session.cc | 1 - test/regress/BF3C1F82.test | 12 ------------ 3 files changed, 1 insertion(+), 14 deletions(-) delete mode 100644 test/regress/BF3C1F82.test (limited to 'test/regress/BF3C1F82.test') diff --git a/src/error.cc b/src/error.cc index d7e92daa..58339db7 100644 --- a/src/error.cc +++ b/src/error.cc @@ -84,7 +84,7 @@ string source_context(const path& file, const string& prefix) { const std::streamoff len = end_pos - pos; - if (! len || file == path("/dev/stdin") || file.empty()) + if (! len || file == path("/dev/stdin")) return _(""); assert(len > 0); diff --git a/src/session.cc b/src/session.cc index a8bb628a..b6153203 100644 --- a/src/session.cc +++ b/src/session.cc @@ -159,7 +159,6 @@ std::size_t session_t::read_data(const string& master_account) shared_ptr stream(new std::istringstream(buffer.str())); parsing_context.push(stream); - parsing_context.get_current().pathname = "/dev/stdin"; } else { parsing_context.push(pathname); } diff --git a/test/regress/BF3C1F82.test b/test/regress/BF3C1F82.test deleted file mode 100644 index 8d465f4d..00000000 --- a/test/regress/BF3C1F82.test +++ /dev/null @@ -1,12 +0,0 @@ -; Check that error reporting works for "-f -" - -2012/02/30 * Test - a 1 - b -test -f - reg -> 1 -__ERROR__ -While parsing file "/dev/stdin", line 3: -While parsing transaction: - -Error: Day of month is not valid for year -end test -- cgit v1.2.3 From 3fe2ef59566ef679d9de58e5f9454b7443d9153a Mon Sep 17 00:00:00 2001 From: Johann Klähn Date: Thu, 17 Jan 2013 12:18:58 +0100 Subject: change handling of standard input For `-f /dev/stdin`, the `pathname` of the parsing context will be empty as for any other streamed input. `instance_t::include_directive` did not work as expected for `-f /dev/stdin` and relative file names. One would expect them to be relative to the current directory rather than `/dev`. This will lead to `While parsing file ""` messages. This could be adjusted to read `While parsing standard input`, but maybe it's not worth the special cases. This commit also fixes bug 788: behaviour of source_context for '-f -' --- src/error.cc | 2 +- src/item.cc | 4 ++-- src/session.cc | 2 +- test/regress/BF3C1F82-2.test | 12 ++++++++++++ test/regress/BF3C1F82.test | 19 +++++++++++++++++++ 5 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 test/regress/BF3C1F82-2.test create mode 100644 test/regress/BF3C1F82.test (limited to 'test/regress/BF3C1F82.test') diff --git a/src/error.cc b/src/error.cc index 58339db7..8aa1d3d6 100644 --- a/src/error.cc +++ b/src/error.cc @@ -84,7 +84,7 @@ string source_context(const path& file, const string& prefix) { const std::streamoff len = end_pos - pos; - if (! len || file == path("/dev/stdin")) + if (! len || file.empty()) return _(""); assert(len > 0); diff --git a/src/item.cc b/src/item.cc index 362fac7f..4e2a487c 100644 --- a/src/item.cc +++ b/src/item.cc @@ -582,8 +582,8 @@ string item_context(const item_t& item, const string& desc) std::ostringstream out; - if (item.pos->pathname == path("/dev/stdin")) { - out << desc << _(" from standard input:"); + if (item.pos->pathname.empty()) { + out << desc << _(" from streamed input:"); return out.str(); } diff --git a/src/session.cc b/src/session.cc index b6153203..f047a540 100644 --- a/src/session.cc +++ b/src/session.cc @@ -143,7 +143,7 @@ std::size_t session_t::read_data(const string& master_account) } foreach (const path& pathname, HANDLER(file_).data_files) { - if (pathname == "-") { + if (pathname == "-" || pathname == "/dev/stdin") { // To avoid problems with stdin and pipes, etc., we read the entire // file in beforehand into a memory buffer, and then parcel it out // from there. diff --git a/test/regress/BF3C1F82-2.test b/test/regress/BF3C1F82-2.test new file mode 100644 index 00000000..453151ce --- /dev/null +++ b/test/regress/BF3C1F82-2.test @@ -0,0 +1,12 @@ +; Check that include directives are relative for "-f /dev/stdin" +include non-existent-ledger-file-BF3C1F82 +test -f - reg -> 1 +__ERROR__ +While parsing file "", line 2: +Error: File to include was not found: "./non-existent-ledger-file-BF3C1F82" +end test +test -f /dev/stdin reg -> 1 +__ERROR__ +While parsing file "", line 2: +Error: File to include was not found: "./non-existent-ledger-file-BF3C1F82" +end test diff --git a/test/regress/BF3C1F82.test b/test/regress/BF3C1F82.test new file mode 100644 index 00000000..50f4106f --- /dev/null +++ b/test/regress/BF3C1F82.test @@ -0,0 +1,19 @@ +; Check that error reporting works for "-f -" + +2012/02/30 * Test + a 1 + b +test -f - reg -> 1 +__ERROR__ +While parsing file "", line 3: +While parsing transaction: + +Error: Day of month is not valid for year +end test +test -f /dev/stdin reg -> 1 +__ERROR__ +While parsing file "", line 3: +While parsing transaction: + +Error: Day of month is not valid for year +end test -- cgit v1.2.3