From 95b5e1d67b1d325662ad45137c647c08fd3af983 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Fri, 31 Oct 2014 13:27:29 +0100 Subject: [PATCH] Move the "repository commit --clear" functionality into a separate command fixes #7499 --- lib/cli/CMakeLists.txt | 2 +- lib/cli/repositoryclearchangescommand.cpp | 64 +++++++++++++++++++++++ lib/cli/repositoryclearchangescommand.hpp | 49 +++++++++++++++++ lib/cli/repositorycommitcommand.cpp | 6 +-- 4 files changed, 115 insertions(+), 6 deletions(-) create mode 100644 lib/cli/repositoryclearchangescommand.cpp create mode 100644 lib/cli/repositoryclearchangescommand.hpp diff --git a/lib/cli/CMakeLists.txt b/lib/cli/CMakeLists.txt index 7213e3aee..121effb76 100644 --- a/lib/cli/CMakeLists.txt +++ b/lib/cli/CMakeLists.txt @@ -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 index 000000000..92cb86eab --- /dev/null +++ b/lib/cli/repositoryclearchangescommand.cpp @@ -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 +#include + +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& 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 index 000000000..ac4332e48 --- /dev/null +++ b/lib/cli/repositoryclearchangescommand.hpp @@ -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 + +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& ap) const; +}; + +} + +#endif /* REPOSITORYCLEARCHANGESCOMMAND_H */ diff --git a/lib/cli/repositorycommitcommand.cpp b/lib/cli/repositorycommitcommand.cpp index 04979cc4c..cf4df258e 100644 --- a/lib/cli/repositorycommitcommand.cpp +++ b/lib/cli/repositorycommitcommand.cpp @@ -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"; -- 2.40.0