]> granicus.if.org Git - icinga2/commitdiff
Fix error reporting for 'icinga2 console -r' 5796/head
authorGunnar Beutner <gunnar.beutner@icinga.com>
Fri, 24 Nov 2017 11:56:42 +0000 (12:56 +0100)
committerGunnar Beutner <gunnar.beutner@icinga.com>
Fri, 24 Nov 2017 11:56:42 +0000 (12:56 +0100)
lib/cli/consolecommand.cpp
lib/cli/consolecommand.hpp

index a0e92871dd8bf92ed6a40e92ca86c1e684992727..444588883f60a4bb409237cc7ad351d24c048941 100644 (file)
@@ -264,25 +264,27 @@ int ConsoleCommand::Run(const po::variables_map& vm, const std::vector<std::stri
                }
        }
 
+       String commandFileName;
+
        if (vm.count("eval"))
                command = vm["eval"].as<std::string>();
        else if (vm.count("file")) {
-               std::string fname = vm["file"].as<std::string>();
+               commandFileName = vm["file"].as<std::string>();
 
                try {
-                       std::ifstream fp(fname.c_str());
+                       std::ifstream fp(commandFileName.CStr());
                        fp.exceptions(std::ifstream::failbit | std::ifstream::badbit);
                        command = String(std::istreambuf_iterator<char>(fp), std::istreambuf_iterator<char>());
                } catch (const std::exception&) {
-                       std::cerr << "Could not read file '" << fname << "'." << std::endl;
+                       std::cerr << "Could not read file '" << commandFileName << "'." << std::endl;
                        return EXIT_FAILURE;
                }
        }
 
-       return RunScriptConsole(scriptFrame, addr, session, command, syntaxOnly);
+       return RunScriptConsole(scriptFrame, addr, session, command, commandFileName, syntaxOnly);
 }
 
-int ConsoleCommand::RunScriptConsole(ScriptFrame& scriptFrame, const String& addr, const String& session, const String& commandOnce, bool syntaxOnly)
+int ConsoleCommand::RunScriptConsole(ScriptFrame& scriptFrame, const String& addr, const String& session, const String& commandOnce, const String& commandOnceFileName, bool syntaxOnly)
 {
        std::map<String, String> lines;
        int next_line = 1;
@@ -329,7 +331,13 @@ int ConsoleCommand::RunScriptConsole(ScriptFrame& scriptFrame, const String& add
        }
 
        while (std::cin.good()) {
-               String fileName = "<" + Convert::ToString(next_line) + ">";
+               String fileName;
+
+               if (commandOnceFileName.IsEmpty())
+                       fileName = "<" + Convert::ToString(next_line) + ">";
+               else
+                       fileName = commandOnceFileName;
+
                next_line++;
 
                bool continuation = false;
@@ -448,7 +456,7 @@ incomplete:
 
                        DebugInfo di = ex.GetDebugInfo();
 
-                       if (lines.find(di.Path) != lines.end()) {
+                       if (commandOnceFileName.IsEmpty() && lines.find(di.Path) != lines.end()) {
                                String text = lines[di.Path];
 
                                std::vector<String> ulines;
index 695a98cd58459fd29be2f39aded170f25d3a639e..4c7a5d3c228e1d8d54f8db0c04690c3c0ab465bd 100644 (file)
@@ -47,7 +47,8 @@ public:
        virtual int Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const override;
 
        static int RunScriptConsole(ScriptFrame& scriptFrame, const String& addr = String(),
-           const String& session = String(), const String& commandOnce = String(), bool syntaxOnly = false);
+           const String& session = String(), const String& commandOnce = String(), const String& commandOnceFileName = String(),
+           bool syntaxOnly = false);
 
 private:
        mutable boost::mutex m_Mutex;