cli: Met en place Doxygen
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -8,6 +8,7 @@
|
||||
|
||||
# Compilation
|
||||
build
|
||||
doc
|
||||
|
||||
# Executables
|
||||
oki
|
||||
|
2658
cli/Doxyfile
Normal file
2658
cli/Doxyfile
Normal file
File diff suppressed because it is too large
Load Diff
11
cli/Makefile
11
cli/Makefile
@@ -42,10 +42,17 @@ $(BUILD_DIR)/%.o: src/%.cpp | $(BUILD_DIR)
|
||||
$(BUILD_DIR):
|
||||
mkdir -p $(subst src,$(BUILD_DIR),$(SRC_DIR))
|
||||
|
||||
# Génère la documentation avec Doxygen
|
||||
doc/html/index.html: Doxyfile $(foreach dir,$(SRC_DIR),$(wildcard $(dir)/*.h))
|
||||
doxygen
|
||||
|
||||
# Supprime tous les fichiers issus de la compilation
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -rf $(BUILD_DIR) $(TARGET_EXE)
|
||||
rm -rf $(BUILD_DIR) $(TARGET_EXE) doc
|
||||
|
||||
doc: doc/html/index.html
|
||||
|
||||
.PHONY: all clean doc
|
||||
|
||||
# Inclut les Makefiles de chaque fichier source
|
||||
# Le - permet d'ignorer les Makefiles manquants
|
||||
|
@@ -4,16 +4,31 @@
|
||||
#include <variant>
|
||||
|
||||
namespace oki{
|
||||
/**
|
||||
* Liste tous les paquets disponibles.
|
||||
*/
|
||||
struct ListAction {
|
||||
};
|
||||
|
||||
/**
|
||||
* Demande l'installation d'un paquet nommé.
|
||||
*/
|
||||
struct InstallAction {
|
||||
std::string_view packageName;
|
||||
explicit InstallAction(const char *packageName) : packageName{packageName} {}
|
||||
};
|
||||
|
||||
/**
|
||||
* Affiche les informations d'un paquet d'après son nom.
|
||||
*/
|
||||
struct ShowAction {
|
||||
std::string_view packageName;
|
||||
explicit ShowAction(const char *packageName) : packageName{packageName} {}
|
||||
};
|
||||
|
||||
/**
|
||||
* Toutes les actions possibles.
|
||||
*/
|
||||
using CliAction = std::variant<ListAction, InstallAction, ShowAction>;
|
||||
|
||||
CliAction parseArguments(int argc, char *argv[]);
|
||||
|
@@ -3,6 +3,17 @@
|
||||
#include <filesystem>
|
||||
|
||||
namespace oki{
|
||||
/**
|
||||
* Détermine le chemin par défaut vers le répertoire local de l'utilisateur.
|
||||
*
|
||||
* @return Le chemin à utiliser.
|
||||
*/
|
||||
std::filesystem::path getDefaultLocalRepository();
|
||||
|
||||
/**
|
||||
* Détermine si STDOUT supporte la couleur.
|
||||
*
|
||||
* @return Si STDOUT est un terminal.
|
||||
*/
|
||||
bool acceptColor();
|
||||
}
|
||||
|
@@ -3,11 +3,25 @@
|
||||
#include <filesystem>
|
||||
|
||||
namespace oki{
|
||||
/**
|
||||
* Un extracteur d'archives compressées au format ZIP.
|
||||
*/
|
||||
class Extractor {
|
||||
private:
|
||||
std::filesystem::path destination;
|
||||
public:
|
||||
/**
|
||||
* Créé un nouvel extracteur.
|
||||
*
|
||||
* @param destination Chemin vers le dossier où extraire les fichiers.
|
||||
*/
|
||||
explicit Extractor(std::filesystem::path destination);
|
||||
|
||||
/**
|
||||
* Extraire tous les fichiers à partir de l'archive dont le chemin est spécifié.
|
||||
*
|
||||
* @param archivePath Le chemin vers l'archive à décompresser.
|
||||
*/
|
||||
void extract(const std::filesystem::path &archivePath);
|
||||
};
|
||||
}
|
||||
|
@@ -4,17 +4,44 @@
|
||||
#include <string>
|
||||
|
||||
namespace oki{
|
||||
/**
|
||||
* Une requête HTTP, préparée par CURL.
|
||||
*/
|
||||
class HttpRequest {
|
||||
private:
|
||||
void *curl;
|
||||
std::string url;
|
||||
public:
|
||||
/**
|
||||
* Instancie une nouvelle requête vers une url.
|
||||
*
|
||||
* @param url L'url à utiliser.
|
||||
*/
|
||||
explicit HttpRequest(std::string_view url);
|
||||
|
||||
/**
|
||||
* Exécute la requête avec une méthode GET et capture le résultat dans une chaîne de caractères.
|
||||
*
|
||||
* @return Le contenu de la réponse du serveur.
|
||||
*/
|
||||
std::string get();
|
||||
|
||||
/**
|
||||
* Exécute la requête avec une méthode GET et télécharge la réponse dans un fichier.
|
||||
*
|
||||
* @param path Le chemin vers le fichier où télécharger.
|
||||
*/
|
||||
void download(const std::filesystem::path& path);
|
||||
|
||||
/**
|
||||
* Vide la requête.
|
||||
*/
|
||||
~HttpRequest();
|
||||
};
|
||||
|
||||
/**
|
||||
* Une erreur lors de la transmission de la requête.
|
||||
*/
|
||||
class RequestException : public std::exception {
|
||||
private:
|
||||
int code;
|
||||
@@ -23,6 +50,9 @@ namespace oki{
|
||||
const char *what() const noexcept override;
|
||||
};
|
||||
|
||||
/**
|
||||
* Une erreur retournée par l'API.
|
||||
*/
|
||||
class APIException : public std::exception {
|
||||
private:
|
||||
std::string msg;
|
||||
|
@@ -1,13 +1,28 @@
|
||||
#pragma once
|
||||
|
||||
namespace oki{
|
||||
/**
|
||||
* Un fichier temporaire utilisant le principe de RAII.
|
||||
*/
|
||||
class TmpFile {
|
||||
private:
|
||||
char filename[20];
|
||||
int fd;
|
||||
public:
|
||||
/**
|
||||
* Créé un nouveau fichier temporaire.
|
||||
*/
|
||||
TmpFile();
|
||||
|
||||
/**
|
||||
* Récupère le chemin absolu vers le fichier temporaire.
|
||||
* @return
|
||||
*/
|
||||
const char *getFilename();
|
||||
|
||||
/**
|
||||
* Supprime le fichier temporaire.
|
||||
*/
|
||||
~TmpFile();
|
||||
};
|
||||
}
|
||||
|
@@ -5,13 +5,16 @@
|
||||
#include "Version.h"
|
||||
|
||||
namespace oki{
|
||||
/**
|
||||
* Un modèle de paquet pour échanger avec l'API.
|
||||
*/
|
||||
class Package {
|
||||
private:
|
||||
std::string shortName;
|
||||
std::string longName;
|
||||
std::vector<Version> versions;
|
||||
public:
|
||||
Package(std::string_view shortName, std::string_view longName, std::vector<Version> versions= {});
|
||||
Package(std::string_view shortName, std::string_view longName, std::vector<Version> versions = {});
|
||||
const std::string& getShortName() const;
|
||||
const std::string& getLongName() const;
|
||||
const std::vector<Version>& getVersions() const;
|
||||
|
@@ -4,6 +4,9 @@
|
||||
#include <vector>
|
||||
|
||||
namespace oki{
|
||||
/**
|
||||
* Un modèle de version d'un paquet pour communiquer avec l'API.
|
||||
*/
|
||||
class Version {
|
||||
private:
|
||||
std::string identifier;
|
||||
|
@@ -8,9 +8,24 @@
|
||||
#include "../package/Package.h"
|
||||
|
||||
namespace oki{
|
||||
/**
|
||||
* Un dépôt où sont référencés des paquets.
|
||||
*/
|
||||
class Repository {
|
||||
public:
|
||||
/**
|
||||
* Liste tous les paquets présents sur le dépôt.
|
||||
*
|
||||
* @return Tous les noms des paquets disponibles.
|
||||
*/
|
||||
virtual std::vector<Package> listPackages() = 0;
|
||||
|
||||
/**
|
||||
* Récupère les informations détaillées d'un paquet nommé.
|
||||
*
|
||||
* @param packageName Le nom du paquet à utiliser.
|
||||
* @return Les informations de ce paquet.
|
||||
*/
|
||||
virtual std::optional<Package> showPackage(std::string_view packageName) = 0;
|
||||
virtual void download(const Version &packageVersion, const std::filesystem::path& destination) = 0;
|
||||
virtual ~Repository() = default;
|
||||
|
Reference in New Issue
Block a user