diff --git a/cli/src/cli/RemoveAction.cpp b/cli/src/cli/RemoveAction.cpp new file mode 100644 index 0000000..4fcdbce --- /dev/null +++ b/cli/src/cli/RemoveAction.cpp @@ -0,0 +1,21 @@ +#include "RemoveAction.h" +#include "io/oki.h" + +#include + +namespace fs = std::filesystem; + +namespace cli { + RemoveAction::RemoveAction(const char *packageName) : packageName{packageName} {} + + void RemoveAction::run(repository::Repository &repository) { + bool succes = fs::remove_all(OKI_PACKAGES_DIRECTORY/packageName); + if(succes){ + std::cout << "The package " << this->packageName << " has been removed successfully !\n"; + } else { + std::cout << "An error occured while removing the package " << this->packageName << "\n"; + exit(1); + } + } + +} \ No newline at end of file diff --git a/cli/src/cli/RemoveAction.h b/cli/src/cli/RemoveAction.h new file mode 100644 index 0000000..de845bc --- /dev/null +++ b/cli/src/cli/RemoveAction.h @@ -0,0 +1,17 @@ +#pragma once + +#include "CliAction.h" + +namespace cli { + /** + * Supprime un paquet. + */ + class RemoveAction : public CliAction { + private: + std::string_view packageName; + + public: + explicit RemoveAction(const char *packageName); + void run(repository::Repository &repository) override; + }; +} \ No newline at end of file diff --git a/cli/src/cli/options.cpp b/cli/src/cli/options.cpp index 9c184c0..7bfca79 100644 --- a/cli/src/cli/options.cpp +++ b/cli/src/cli/options.cpp @@ -8,6 +8,7 @@ #include "ListAction.h" #include "MakefileAction.h" #include "PublishAction.h" +#include "RemoveAction.h" #include "ShowAction.h" #include "TreeAction.h" @@ -21,6 +22,7 @@ namespace cli { os << "list: List available packages\n"; os << "show: Show the informations of the package\n"; os << "install: Install a new package\n"; + os << "remove: Remove the package\n"; os << "fetch: Fetch dependencies\n"; os << "publish: Publish a new version of the current package\n"; os << "makefile: Create a makefile\n"; @@ -44,6 +46,13 @@ namespace cli { exit(1); } return std::make_unique(argv[2]); + } else if (strcmp("remove", argv[1]) == 0) { + if (argc < 3) { + invalidUsage(std::cerr); + std::cerr << "Add a package name after remove.\n"; + exit(1); + } + return std::make_unique(argv[2]); } else if (strcmp("show", argv[1]) == 0) { if (argc < 3) { invalidUsage(std::cerr);