]> granicus.if.org Git - icinga2/commitdiff
Move the "repository commit --clear" functionality into a separate command
authorGunnar Beutner <gunnar.beutner@netways.de>
Fri, 31 Oct 2014 12:27:29 +0000 (13:27 +0100)
committerGunnar Beutner <gunnar.beutner@netways.de>
Fri, 31 Oct 2014 12:27:29 +0000 (13:27 +0100)
fixes #7499

lib/cli/CMakeLists.txt
lib/cli/repositoryclearchangescommand.cpp [new file with mode: 0644]
lib/cli/repositoryclearchangescommand.hpp [new file with mode: 0644]
lib/cli/repositorycommitcommand.cpp

index 7213e3aee298c1fc9fff9c141a7ef0e7fe50dd48..121effb76d2186e99d72c4e7034120e8ba3c3b05 100644 (file)
@@ -24,7 +24,7 @@ set(cli_SOURCES
   objectlistcommand.cpp
   pkinewcacommand.cpp pkinewcertcommand.cpp pkisigncsrcommand.cpp pkirequestcommand.cpp pkisavecertcommand.cpp pkiticketcommand.cpp
   pkiutility.cpp
-  repositorycommitcommand.cpp repositoryobjectcommand.cpp repositoryutility.cpp
+  repositoryclearchangescommand.cpp repositorycommitcommand.cpp repositoryobjectcommand.cpp repositoryutility.cpp
   variablegetcommand.cpp variablelistcommand.cpp variableutility.cpp
 )
 
diff --git a/lib/cli/repositoryclearchangescommand.cpp b/lib/cli/repositoryclearchangescommand.cpp
new file mode 100644 (file)
index 0000000..92cb86e
--- /dev/null
@@ -0,0 +1,64 @@
+/******************************************************************************
+ * Icinga 2                                                                   *
+ * Copyright (C) 2012-2014 Icinga Development Team (http://www.icinga.org)    *
+ *                                                                            *
+ * This program is free software; you can redistribute it and/or              *
+ * modify it under the terms of the GNU General Public License                *
+ * as published by the Free Software Foundation; either version 2             *
+ * of the License, or (at your option) any later version.                     *
+ *                                                                            *
+ * This program is distributed in the hope that it will be useful,            *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of             *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the              *
+ * GNU General Public License for more details.                               *
+ *                                                                            *
+ * You should have received a copy of the GNU General Public License          *
+ * along with this program; if not, write to the Free Software Foundation     *
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.             *
+ ******************************************************************************/
+
+#include "cli/repositoryclearchangescommand.hpp"
+#include "cli/repositoryutility.hpp"
+#include "base/logger.hpp"
+#include "base/application.hpp"
+#include "base/utility.hpp"
+#include <fstream>
+#include <iostream>
+
+using namespace icinga;
+namespace po = boost::program_options;
+
+REGISTER_CLICOMMAND("repository/clear-changes", RepositoryClearChangesCommand);
+
+String RepositoryClearChangesCommand::GetDescription(void) const
+{
+       return "Clear uncommitted Icinga 2 repository changes";
+}
+
+String RepositoryClearChangesCommand::GetShortDescription(void) const
+{
+       return "clear uncommitted repository changes";
+}
+
+ImpersonationLevel RepositoryClearChangesCommand::GetImpersonationLevel(void) const
+{
+       return ImpersonateRoot;
+}
+
+/**
+ * The entry point for the "repository clear-changes" CLI command.
+ *
+ * @returns An exit status.
+ */
+int RepositoryClearChangesCommand::Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const
+{
+       if (!Utility::PathExists(RepositoryUtility::GetRepositoryChangeLogPath())) {
+               std::cout << "Repository Changelog path '" << RepositoryUtility::GetRepositoryChangeLogPath() << "' does not exist. Add objects first!\n";
+               return 1;
+       }
+
+       std::cout << "Clearing all remaining changes\n";
+       RepositoryUtility::ClearChangeLog();
+
+       return 0;
+}
diff --git a/lib/cli/repositoryclearchangescommand.hpp b/lib/cli/repositoryclearchangescommand.hpp
new file mode 100644 (file)
index 0000000..ac4332e
--- /dev/null
@@ -0,0 +1,49 @@
+/******************************************************************************
+ * Icinga 2                                                                   *
+ * Copyright (C) 2012-2014 Icinga Development Team (http://www.icinga.org)    *
+ *                                                                            *
+ * This program is free software; you can redistribute it and/or              *
+ * modify it under the terms of the GNU General Public License                *
+ * as published by the Free Software Foundation; either version 2             *
+ * of the License, or (at your option) any later version.                     *
+ *                                                                            *
+ * This program is distributed in the hope that it will be useful,            *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of             *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the              *
+ * GNU General Public License for more details.                               *
+ *                                                                            *
+ * You should have received a copy of the GNU General Public License          *
+ * along with this program; if not, write to the Free Software Foundation     *
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.             *
+ ******************************************************************************/
+
+#ifndef REPOSITORYCLEARCHANGESCOMMAND_H
+#define REPOSITORYCLEARCHANGESCOMMAND_H
+
+#include "base/dictionary.hpp"
+#include "base/array.hpp"
+#include "cli/clicommand.hpp"
+#include <ostream>
+
+namespace icinga
+{
+
+/**
+ * The "repository clear-changes" command.
+ *
+ * @ingroup cli
+ */
+class RepositoryClearChangesCommand : public CLICommand
+{
+public:
+        DECLARE_PTR_TYPEDEFS(RepositoryClearChangesCommand);
+
+        virtual String GetDescription(void) const;
+        virtual String GetShortDescription(void) const;
+       virtual ImpersonationLevel GetImpersonationLevel(void) const;
+        virtual int Run(const boost::program_options::variables_map& vm, const std::vector<std::string>& ap) const;
+};
+
+}
+
+#endif /* REPOSITORYCLEARCHANGESCOMMAND_H */
index 04979cc4cea87b5dd819db43071754a9a4c95624..cf4df258e60e22a64d48bca29cfbb8cd1bae11c2 100644 (file)
@@ -44,8 +44,7 @@ void RepositoryCommitCommand::InitParameters(boost::program_options::options_des
     boost::program_options::options_description& hiddenDesc) const
 {
        visibleDesc.add_options()
-               ("simulate", "Simulate to-be-committed changes")
-               ("clear", "Clear all to-be-committed changes");
+               ("simulate", "Simulate to-be-committed changes");
 }
 
 ImpersonationLevel RepositoryCommitCommand::GetImpersonationLevel(void) const
@@ -71,9 +70,6 @@ int RepositoryCommitCommand::Run(const boost::program_options::variables_map& vm
                std::cout << "Simulation not yet implemented.\n";
                //TODO
                return 1;
-       } else if (vm.count("clear")) {
-               std::cout << "Clearing all remaining changes\n";
-               RepositoryUtility::ClearChangeLog();
        } else {
                RepositoryUtility::PrintChangeLog(std::cout);
                std::cout << "\n";