]> git.stg.codes - stg.git/commitdiff
Show config only on demand.
authorMaxim Mamontov <faust.madf@gmail.com>
Fri, 10 Oct 2014 21:59:27 +0000 (00:59 +0300)
committerMaxim Mamontov <faust.madf@gmail.com>
Fri, 10 Oct 2014 21:59:27 +0000 (00:59 +0300)
projects/sgconf/actions.h
projects/sgconf/config.h
projects/sgconf/main.cpp

index 07bcfb8b22b19c58f803d03e8c8d85a53975a31a..08dc177eb9d3eadc575a3427260eec6d4aba376a 100644 (file)
@@ -78,6 +78,10 @@ class PARAM_ACTION : public ACTION
               m_description(paramDescription),
               m_hasDefault(true)
         {}
+        PARAM_ACTION(RESETABLE<T> & param)
+            : m_param(param),
+              m_hasDefault(false)
+        {}
         PARAM_ACTION(RESETABLE<T> & param,
                      const std::string & paramDescription)
             : m_param(param),
@@ -132,6 +136,14 @@ m_param = value;
 return PARSER_STATE(false, --argc, ++argv);
 }
 
+template <>
+inline
+PARSER_STATE PARAM_ACTION<bool>::Parse(int argc, char ** argv, void * /*data*/)
+{
+m_param = true;
+return PARSER_STATE(false, argc, argv);
+}
+
 template <typename T>
 inline
 void PARAM_ACTION<T>::ParseValue(const std::string & stringValue)
@@ -172,6 +184,13 @@ PARAM_ACTION<T> * MakeParamAction(RESETABLE<T> & param,
 return new PARAM_ACTION<T>(param, defaultValue, paramDescription);
 }
 
+template <typename T>
+inline
+PARAM_ACTION<T> * MakeParamAction(RESETABLE<T> & param)
+{
+return new PARAM_ACTION<T>(param);
+}
+
 template <typename T>
 inline
 PARAM_ACTION<T> * MakeParamAction(RESETABLE<T> & param,
index e52111e3fcd9eac231bd54ed335974609469aede..d3659a1d343423884b58fc32ef367d8e7a6f1af1 100644 (file)
@@ -39,6 +39,7 @@ struct CONFIG
     RESETABLE<uint16_t> localPort;
     RESETABLE<std::string> userName;
     RESETABLE<std::string> userPass;
+    RESETABLE<bool> showConfig;
 
     CONFIG & operator=(const CONFIG & rhs)
     {
@@ -56,27 +57,29 @@ struct CONFIG
         userName = rhs.userName;
     if (!rhs.userPass.empty())
         userPass = rhs.userPass;
+    if (!rhs.showConfig.empty())
+        showConfig = rhs.showConfig;
     return *this;
     }
 
     std::string Serialize() const
     {
-    std::string res("{ ");
+    std::string res;
     if (!configFile.empty())
-        res += "configFile: '" + configFile.data() + "',";
+        res += "configFile: '" + configFile.data() + "'\n";
     if (!server.empty())
-        res += " server: '" + server.data() + "',";
+        res += "server: '" + server.data() + "'\n";
     if (!port.empty())
-        res += " port: " + x2str(port.data()) + ",";
+        res += "port: " + x2str(port.data()) + "\n";
     if (!localAddress.empty())
-        res += " local address: '" + localAddress.data() + "',";
+        res += "local address: '" + localAddress.data() + "'\n";
     if (!localPort.empty())
-        res += " local port: " + x2str(localPort.data()) + ",";
+        res += "local port: " + x2str(localPort.data()) + "\n";
     if (!userName.empty())
-        res += " userName: '" + userName.data() + "',";
+        res += "userName: '" + userName.data() + "'\n";
     if (!userPass.empty())
-        res += " userPass: '" + userPass.data() + "'";
-    return res + " }";
+        res += "userPass: '" + userPass.data() + "\n";
+    return res;
     }
 };
 
index 82372224ba20ea6aacb7c9204548edc1dc23f9f3..0667e2590f09a3662144853811c44bb156664c21 100644 (file)
@@ -256,6 +256,8 @@ SGCONF::OPTION_BLOCK & block = blocks.Add("Connection options")
       .Add("u", "username", SGCONF::MakeParamAction(config.userName, std::string("admin"), "<username>"), "\tadministrative login")
       .Add("w", "userpass", SGCONF::MakeParamAction(config.userPass, "<password>"), "\tpassword for the administrative login")
       .Add("a", "address", SGCONF::MakeParamAction(config, "<connection string>"), "connection params as a single string in format: <login>:<password>@<host>:<port>");
+blocks.Add("Debug options")
+      .Add("show-config", SGCONF::MakeParamAction(config.showConfig), "\t\tshow config and exit");
 SGCONF::AppendXMLOptionBlock(commands, blocks);
 SGCONF::AppendAdminsOptionBlock(commands, blocks);
 SGCONF::AppendTariffsOptionBlock(commands, blocks);
@@ -302,7 +304,11 @@ else
 
 config = configOverride;
 
-std::cerr << "Config: " << config.Serialize() << std::endl;
+if (!config.showConfig.empty() && config.showConfig.data())
+    {
+    std::cout << config.Serialize() << std::endl;
+    return 0;
+    }
 return commands.Execute(config) ? 0 : -1;
 }
 catch (const std::exception& ex)