# # # patch "automate_ostream_demuxed.hh" # from [705d6844f3b2ce930d27d7a7619707d687fa4df9] # to [29fd0c1a2de69865bdd348145ae8bcef351b2ee0] # # patch "cmd_netsync.cc" # from [d66b01aa32f79b802747d218cca316e9411be194] # to [c4ccd721df4c51c47d13c4344ede78088655ddac] # # patch "tests/serve-automate-single-run/__driver__.lua" # from [b2cc73cf028bd61486c8f9ca15fb7ffcded3d8f5] # to [ff20d74886b1aa1567a646aac6379b41180f5bab] # ============================================================ --- automate_ostream_demuxed.hh 705d6844f3b2ce930d27d7a7619707d687fa4df9 +++ automate_ostream_demuxed.hh 29fd0c1a2de69865bdd348145ae8bcef351b2ee0 @@ -23,7 +23,7 @@ class basic_automate_streambuf_demuxed : size_t _bufsize; std::basic_ostream<_CharT, _Traits> *stdout; std::basic_ostream<_CharT, _Traits> *errout; - bool in_err; + int err_code; public: basic_automate_streambuf_demuxed(std::ostream & out, std::ostream & err, size_t bufsize) : @@ -31,7 +31,7 @@ public: _bufsize(bufsize), stdout(&out), errout(&err), - in_err(false) + err_code(0) { _CharT * inbuf = new _CharT[_bufsize]; setp(inbuf, inbuf + _bufsize); @@ -41,9 +41,14 @@ public: void set_err(int e) { - in_err = (e != 0); + err_code = e; } + int get_error() const + { + return err_code; + } + void end_cmd() { _M_sync(); @@ -65,7 +70,7 @@ private: void _M_sync() { std::basic_ostream<_CharT, _Traits> *str; - str = (in_err ? errout : stdout); + str = ((err_code != 0) ? errout : stdout); if (!str) { setp(this->pbase(), this->pbase() + _bufsize); @@ -103,6 +108,9 @@ struct basic_automate_ostream_demuxed : virtual void set_err(int e) { _M_autobuf.set_err(e); } + int get_error() const + { return _M_autobuf.get_error(); } + virtual void end_cmd() { _M_autobuf.end_cmd(); } }; ============================================================ --- cmd_netsync.cc d66b01aa32f79b802747d218cca316e9411be194 +++ cmd_netsync.cc c4ccd721df4c51c47d13c4344ede78088655ddac @@ -397,6 +397,9 @@ CMD_AUTOMATE_NO_STDIO(remote, run_netsync_protocol(app, app.opts, app.lua, project, keys, client_voice, source_and_sink_role, info); + + E(os.get_error() == 0, origin::network, + F("Received remote error code %d") % os.get_error()); } CMD(push, "push", "", CMD_REF(network), ============================================================ --- tests/serve-automate-single-run/__driver__.lua b2cc73cf028bd61486c8f9ca15fb7ffcded3d8f5 +++ tests/serve-automate-single-run/__driver__.lua ff20d74886b1aa1567a646aac6379b41180f5bab @@ -10,7 +10,7 @@ check(mtn2("automate", "remote", "--remo server = netsync.start() check(mtn2("automate", "remote", "--remote-stdio-host", server.address, - "interface_version"), 0, true, true) + "interface_version"), 1, true, true) check(qgrep("you aren't allowed to do that", "stderr")) server:stop() @@ -32,7 +32,7 @@ check(mtn2("automate", "remote", "--remo check(qgrep("[[:xdigit:]]{40}", "stderr")) check(mtn2("automate", "remote", "--remote-stdio-host", server.address, - "stdio"), 0, true, true) + "stdio"), 1, true, true) check(qgrep("can't be run", "stderr")) -- won't work, --revision is no option of automate remote @@ -43,7 +43,7 @@ check(mtn2("automate", "remote", "--remo -- to distinguish valid from invalid options on the _server_, so we expect -- all options arguments to be directly written after the option check(mtn2("automate", "remote", "--remote-stdio-host", server.address, - "get_file_of", "--", "-r", R1, "foo"), 0, true, true) + "get_file_of", "--", "-r", R1, "foo"), 1, true, true) check(qgrep("wrong argument count", "stderr")) -- finally this should work