Amélioration de la javadoc
This commit is contained in:
parent
f1f378d68d
commit
3e9fa75023
BIN
bakefile.jar
BIN
bakefile.jar
Binary file not shown.
@ -8,7 +8,6 @@ import java.util.ArrayList;
|
|||||||
*
|
*
|
||||||
* @author Moncef STITI
|
* @author Moncef STITI
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
* @date 03/02/2025
|
|
||||||
* @see Main
|
* @see Main
|
||||||
*/
|
*/
|
||||||
public class BakeCLI {
|
public class BakeCLI {
|
||||||
@ -26,7 +25,6 @@ public class BakeCLI {
|
|||||||
* Constructeur de la classe BakeCLI
|
* Constructeur de la classe BakeCLI
|
||||||
*
|
*
|
||||||
* @param args Les arguments passés en ligne de commande
|
* @param args Les arguments passés en ligne de commande
|
||||||
* @return void
|
|
||||||
* @see Main
|
* @see Main
|
||||||
*/
|
*/
|
||||||
public BakeCLI(String[] args){
|
public BakeCLI(String[] args){
|
||||||
@ -58,7 +56,7 @@ public class BakeCLI {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Permet de récupérer les arguments autres que "-d" passés en ligne de commande
|
* Permet de récupérer les arguments autres que "-d" passés en ligne de commande
|
||||||
* @return
|
* @return La liste des arguments
|
||||||
*/
|
*/
|
||||||
public static List<String> getTargets(){ return targets; }
|
public static List<String> getTargets(){ return targets; }
|
||||||
}
|
}
|
||||||
|
@ -4,36 +4,83 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Moteur principal de l'application Bake.
|
||||||
|
* Cette classe est responsable de l'orchestration du processus de build
|
||||||
|
* en utilisant les règles définies dans le fichier Bakefile.
|
||||||
|
*
|
||||||
|
* @author Moncef STITI, Yanis HAMOUDI, Louay DARDOURI
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
public class BakeEngine {
|
public class BakeEngine {
|
||||||
|
|
||||||
|
/** Analyseur syntaxique du fichier Bakefile */
|
||||||
private BakefileParser parser;
|
private BakefileParser parser;
|
||||||
|
|
||||||
|
/** Responsable de la résolution des dépendances entre règles */
|
||||||
private DependencyResolver resolver;
|
private DependencyResolver resolver;
|
||||||
|
|
||||||
|
/** Exécuteur des commandes définies dans les règles */
|
||||||
private CommandExecutor executor;
|
private CommandExecutor executor;
|
||||||
|
|
||||||
|
/** Map qui stocke toutes les règles indexées par leur nom */
|
||||||
private static Map<String, Rule> ruleMap;
|
private static Map<String, Rule> ruleMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructeur qui initialise le moteur Bake.
|
||||||
|
* Crée un parser pour le fichier "Bakefile" par défaut et initialise le résolveur de dépendances.
|
||||||
|
*/
|
||||||
public BakeEngine() {
|
public BakeEngine() {
|
||||||
this.parser = new BakefileParser("Bakefile");
|
this.parser = new BakefileParser("Bakefile");
|
||||||
this.resolver = new DependencyResolver(BakeCLI.isDebug());
|
this.resolver = new DependencyResolver(BakeCLI.isDebug());
|
||||||
ruleMap = new HashMap<>();
|
ruleMap = new HashMap<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Vérifie si une règle avec le nom spécifié existe.
|
||||||
|
*
|
||||||
|
* @param target Nom de la règle à vérifier
|
||||||
|
* @return true si la règle existe, false sinon
|
||||||
|
*/
|
||||||
public static boolean hasRule(String target) {
|
public static boolean hasRule(String target) {
|
||||||
return ruleMap.containsKey(target);
|
return ruleMap.containsKey(target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère une règle par son nom.
|
||||||
|
*
|
||||||
|
* @param target Nom de la règle à récupérer
|
||||||
|
* @return La règle correspondante ou null si elle n'existe pas
|
||||||
|
*/
|
||||||
public static Rule getRule(String target) {
|
public static Rule getRule(String target) {
|
||||||
return ruleMap.get(target);
|
return ruleMap.get(target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exécute le processus de build complet.
|
||||||
|
* Cette méthode réalise les étapes suivantes :
|
||||||
|
* <ol>
|
||||||
|
* <li>Parse le fichier Bakefile</li>
|
||||||
|
* <li>Construit la carte des règles</li>
|
||||||
|
* <li>Résout les dépendances entre les règles</li>
|
||||||
|
* <li>Exécute les règles dans l'ordre déterminé</li>
|
||||||
|
* </ol>
|
||||||
|
*/
|
||||||
public void run() {
|
public void run() {
|
||||||
|
// Analyse le fichier Bakefile pour extraire les règles
|
||||||
List<Rule> rules = parser.parse();
|
List<Rule> rules = parser.parse();
|
||||||
|
|
||||||
|
// Ajoute toutes les règles à la map pour référence rapide
|
||||||
for (Rule rule : rules) {
|
for (Rule rule : rules) {
|
||||||
ruleMap.put(rule.getName(), rule);
|
ruleMap.put(rule.getName(), rule);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Résout les dépendances pour déterminer l'ordre d'exécution
|
||||||
List<Rule> rulesToBuild = resolver.resolve(rules, BakeCLI.getTargets());
|
List<Rule> rulesToBuild = resolver.resolve(rules, BakeCLI.getTargets());
|
||||||
this.executor = new CommandExecutor(BakeCLI.isDebug(), resolver.isCircular());
|
this.executor = new CommandExecutor(BakeCLI.isDebug(), resolver.isCircular());
|
||||||
|
|
||||||
|
// Exécute les règles dans l'ordre déterminé
|
||||||
for (Rule rule : rulesToBuild) {
|
for (Rule rule : rulesToBuild) {
|
||||||
executor.execute(rule);
|
executor.execute(rule);
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,14 @@ import java.util.regex.Matcher;
|
|||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parseur de fichier Bakefile.
|
||||||
|
* Cette classe est responsable de l'analyse syntaxique du fichier Bakefile
|
||||||
|
* pour extraire les règles de build, les dépendances et les commandes associées.
|
||||||
|
*
|
||||||
|
* @author Moncef STITI, Yanis HAMOUDI, Louay DARDOURI
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
public class BakefileParser {
|
public class BakefileParser {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -62,11 +70,21 @@ public class BakefileParser {
|
|||||||
*/
|
*/
|
||||||
private Map<String, String> variables = new HashMap<>();
|
private Map<String, String> variables = new HashMap<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructeur de la classe BakefileParser.
|
||||||
|
* @param filename Nom du fichier Bakefile à parser
|
||||||
|
*/
|
||||||
public BakefileParser(String filename) {
|
public BakefileParser(String filename) {
|
||||||
this.filename = filename;
|
this.filename = filename;
|
||||||
firstTarget = null;
|
firstTarget = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gérer les lignes de continuation.
|
||||||
|
* @param lines Liste des lignes du fichier Bakefile
|
||||||
|
* @param startIndex Index de la première ligne de continuation
|
||||||
|
* @return La ligne combinée
|
||||||
|
*/
|
||||||
private String handleContinuationLines(List<String> lines, int startIndex) {
|
private String handleContinuationLines(List<String> lines, int startIndex) {
|
||||||
StringBuilder combinedLine = new StringBuilder();
|
StringBuilder combinedLine = new StringBuilder();
|
||||||
int i = startIndex;
|
int i = startIndex;
|
||||||
@ -89,6 +107,11 @@ public class BakefileParser {
|
|||||||
return combinedLine.toString();
|
return combinedLine.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remplacer les variables dans une chaîne.
|
||||||
|
* @param input Chaîne à traiter
|
||||||
|
* @return Chaîne avec les variables remplacées
|
||||||
|
*/
|
||||||
private String replaceVariables(String input) {
|
private String replaceVariables(String input) {
|
||||||
if (input == null) return null;
|
if (input == null) return null;
|
||||||
|
|
||||||
@ -126,12 +149,22 @@ public class BakefileParser {
|
|||||||
return result.trim();
|
return result.trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remplacer les variables dans une liste de chaînes.
|
||||||
|
* @param items Liste de chaînes à traiter
|
||||||
|
* @return Liste de chaînes avec les variables remplacées
|
||||||
|
*/
|
||||||
private List<String> replaceVariablesInList(List<String> items) {
|
private List<String> replaceVariablesInList(List<String> items) {
|
||||||
return items.stream()
|
return items.stream()
|
||||||
.map(this::replaceVariables)
|
.map(this::replaceVariables)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Découper les dépendances en une liste de chaînes.
|
||||||
|
* @param depStr Chaîne de dépendances
|
||||||
|
* @return Liste de dépendances
|
||||||
|
*/
|
||||||
private List<String> splitDependencies(String depStr) {
|
private List<String> splitDependencies(String depStr) {
|
||||||
if (depStr == null || depStr.trim().isEmpty()) {
|
if (depStr == null || depStr.trim().isEmpty()) {
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
@ -144,6 +177,11 @@ public class BakefileParser {
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Découper les cibles en une liste de chaînes.
|
||||||
|
* @param targetStr Chaîne de cibles
|
||||||
|
* @return Liste de cibles
|
||||||
|
*/
|
||||||
private List<String> splitTargets(String targetStr) {
|
private List<String> splitTargets(String targetStr) {
|
||||||
if (targetStr == null || targetStr.trim().isEmpty()) {
|
if (targetStr == null || targetStr.trim().isEmpty()) {
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
@ -156,6 +194,10 @@ public class BakefileParser {
|
|||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Analyser le fichier Bakefile pour extraire les règles de build.
|
||||||
|
* @return Liste des règles extraites
|
||||||
|
*/
|
||||||
public List<Rule> parse() {
|
public List<Rule> parse() {
|
||||||
List<Rule> rules = new ArrayList<>();
|
List<Rule> rules = new ArrayList<>();
|
||||||
Set<String> phonyTargets = new HashSet<>();
|
Set<String> phonyTargets = new HashSet<>();
|
||||||
|
@ -3,17 +3,49 @@ package fr.monlouyan.bakefile;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exécuteur des commandes définies dans les règles.
|
||||||
|
* Cette classe est responsable de l'exécution des commandes définies dans les règles
|
||||||
|
* du fichier Bakefile.
|
||||||
|
*
|
||||||
|
* @author Moncef STITI, Yanis HAMOUDI, Louay DARDOURI
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
public class CommandExecutor {
|
public class CommandExecutor {
|
||||||
|
/**
|
||||||
|
* true si le mode debug est activé, false sinon
|
||||||
|
*/
|
||||||
private boolean debug;
|
private boolean debug;
|
||||||
private boolean needsUpdate = false; // Pour tracker si quelque chose doit être mis à jour
|
|
||||||
private boolean isCircular = false; // Pour tracker si un cycle a été détecté
|
|
||||||
private boolean futureTimestampDetected = false; // Pour détecter les timestamps dans le futur
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pour tracker si quelque chose doit être mis à jour
|
||||||
|
*/
|
||||||
|
private boolean needsUpdate = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pour tracker si un cycle a été détecté
|
||||||
|
*/
|
||||||
|
private boolean isCircular = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Pour détecter les timestamps dans le futur
|
||||||
|
*/
|
||||||
|
private boolean futureTimestampDetected = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructeur de la classe CommandExecutor.
|
||||||
|
* @param debug true si le mode debug est activé, false sinon
|
||||||
|
* @param isCircular true si on est en mode circulaire, false sinon
|
||||||
|
*/
|
||||||
public CommandExecutor(boolean debug, boolean isCircular) {
|
public CommandExecutor(boolean debug, boolean isCircular) {
|
||||||
this.debug = debug;
|
this.debug = debug;
|
||||||
this.isCircular = isCircular;
|
this.isCircular = isCircular;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exécute les commandes d'une règle.
|
||||||
|
* @param rule La règle à exécuter
|
||||||
|
*/
|
||||||
public void execute(Rule rule) {
|
public void execute(Rule rule) {
|
||||||
// On vérifie d'abord si cette règle a besoin d'être mise à jour
|
// On vérifie d'abord si cette règle a besoin d'être mise à jour
|
||||||
boolean ruleNeedsUpdate = rule.needsUpdate();
|
boolean ruleNeedsUpdate = rule.needsUpdate();
|
||||||
|
@ -2,16 +2,40 @@ package fr.monlouyan.bakefile;
|
|||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Résolveur de dépendances entre les règles du fichier Bakefile.
|
||||||
|
* Cette classe est responsable de la résolution des dépendances entre les règles
|
||||||
|
* pour déterminer l'ordre dans lequel les règles doivent être
|
||||||
|
*
|
||||||
|
* @author Moncef STITI, Yanis HAMOUDI, Louay DARDOURI
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
public class DependencyResolver {
|
public class DependencyResolver {
|
||||||
|
|
||||||
|
/*** true si le mode debug est activé, false sinon */
|
||||||
private boolean debug;
|
private boolean debug;
|
||||||
|
|
||||||
|
/*** Map des règles indexées par leur nom */
|
||||||
private Map<String, Rule> ruleMap;
|
private Map<String, Rule> ruleMap;
|
||||||
|
|
||||||
|
/*** true si une dépendance circulaire est détectée, false sinon */
|
||||||
private boolean isCircular;
|
private boolean isCircular;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructeur de la classe DependencyResolver.
|
||||||
|
* @param debug true si le mode debug est activé, false sinon
|
||||||
|
*/
|
||||||
public DependencyResolver(boolean debug) {
|
public DependencyResolver(boolean debug) {
|
||||||
this.debug = debug;
|
this.debug = debug;
|
||||||
this.isCircular = false;
|
this.isCircular = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Résout les dépendances entre les règles.
|
||||||
|
* @param allRules Liste de toutes les règles
|
||||||
|
* @param requestedRules Liste des règles demandées
|
||||||
|
* @return Liste
|
||||||
|
*/
|
||||||
public List<Rule> resolve(List<Rule> allRules, List<String> requestedRules) {
|
public List<Rule> resolve(List<Rule> allRules, List<String> requestedRules) {
|
||||||
List<Rule> rulesToBuild = new ArrayList<>();
|
List<Rule> rulesToBuild = new ArrayList<>();
|
||||||
ruleMap = new HashMap<>();
|
ruleMap = new HashMap<>();
|
||||||
@ -64,6 +88,12 @@ public class DependencyResolver {
|
|||||||
return rulesToBuild;
|
return rulesToBuild;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Méthode de tri topologique pour résoudre les dépendances.
|
||||||
|
* @param ruleName Nom de la règle
|
||||||
|
* @param processed Set des règles déjà traitées
|
||||||
|
* @param buildOrder Liste des règles dans l'ordre
|
||||||
|
*/
|
||||||
private void topologicalSort(String ruleName, Set<String> processed, List<String> buildOrder) {
|
private void topologicalSort(String ruleName, Set<String> processed, List<String> buildOrder) {
|
||||||
if (!ruleMap.containsKey(ruleName) || processed.contains(ruleName)) {
|
if (!ruleMap.containsKey(ruleName) || processed.contains(ruleName)) {
|
||||||
return;
|
return;
|
||||||
@ -85,7 +115,13 @@ public class DependencyResolver {
|
|||||||
buildOrder.add(ruleName);
|
buildOrder.add(ruleName);
|
||||||
}
|
}
|
||||||
|
|
||||||
// La méthode detectCycle avec une modification pour les chemins home
|
/**
|
||||||
|
* Méthode de détection des cycles dans les dépendances.
|
||||||
|
* @param ruleName Nom de la règle
|
||||||
|
* @param visited Set des règles déjà visitées
|
||||||
|
* @param stack Set des règles en cours de traitement
|
||||||
|
* @param parent Nom de la règle parente
|
||||||
|
*/
|
||||||
private void detectCycle(String ruleName, Set<String> visited, Set<String> stack, String parent) {
|
private void detectCycle(String ruleName, Set<String> visited, Set<String> stack, String parent) {
|
||||||
if (stack.contains(ruleName)) {
|
if (stack.contains(ruleName)) {
|
||||||
if (parent != null) {
|
if (parent != null) {
|
||||||
@ -121,6 +157,10 @@ public class DependencyResolver {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Vérifie si une dépendance circulaire a été détectée.
|
||||||
|
* @return true si une dépendance circulaire a été détectée, false sinon
|
||||||
|
*/
|
||||||
public boolean isCircular() {
|
public boolean isCircular() {
|
||||||
return isCircular;
|
return isCircular;
|
||||||
}
|
}
|
||||||
|
@ -5,15 +5,20 @@ package fr.monlouyan.bakefile;
|
|||||||
*
|
*
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
* @author Moncef STITI
|
* @author Moncef STITI
|
||||||
* @date 03/02/2025
|
|
||||||
*/
|
*/
|
||||||
public class Main{
|
public class Main{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructeur de la classe Main (privé pour empêcher l'instanciation)
|
||||||
|
*/
|
||||||
|
private Main() {
|
||||||
|
// Constructeur inutile
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Méthode principale du programme
|
* Méthode principale du programme
|
||||||
*
|
*
|
||||||
* @param args Les arguments passés en ligne de commande
|
* @param args Les arguments passés en ligne de commande
|
||||||
* @return void
|
|
||||||
*/
|
*/
|
||||||
public static void main(String[] args){
|
public static void main(String[] args){
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
|
@ -2,14 +2,36 @@ package fr.monlouyan.bakefile;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Représente une règle du fichier Bakefile.
|
||||||
|
* Chaque règle est composée d'un nom, d'une liste de dépendances et d'une liste de commandes.
|
||||||
|
* Une règle peut être phony, c'est-à-dire qu'elle n'a pas de fichier cible associé.
|
||||||
|
*
|
||||||
|
* @author Moncef STITI, Yanis HAMOUDI, Louay DARDOURI
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
public class Rule {
|
public class Rule {
|
||||||
|
|
||||||
|
/*** Nom de la règle */
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
|
/*** Liste des dépendances de la règle */
|
||||||
private List<String> dependencies;
|
private List<String> dependencies;
|
||||||
|
|
||||||
|
/*** Liste des commandes */
|
||||||
private List<String> commands;
|
private List<String> commands;
|
||||||
|
|
||||||
|
/*** true si la règle est phony, false sinon */
|
||||||
private boolean isPhony;
|
private boolean isPhony;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructeur de la classe Rule.
|
||||||
|
* @param name Nom de la règle
|
||||||
|
* @param dependencies Liste des dépendances
|
||||||
|
* @param commands Liste des commandes
|
||||||
|
* @param isPhony true si la règle est phony, false sinon
|
||||||
|
*/
|
||||||
public Rule(String name, List<String> dependencies, List<String> commands, boolean isPhony) {
|
public Rule(String name, List<String> dependencies, List<String> commands, boolean isPhony) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.dependencies = dependencies;
|
this.dependencies = dependencies;
|
||||||
@ -17,12 +39,40 @@ public class Rule {
|
|||||||
this.isPhony = isPhony;
|
this.isPhony = isPhony;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère le nom de la règle.
|
||||||
|
* @return Le nom de la règle
|
||||||
|
*/
|
||||||
public String getName() { return name; }
|
public String getName() { return name; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère la liste des dépendances de la règle.
|
||||||
|
* @return La liste des dépendances
|
||||||
|
*/
|
||||||
public List<String> getDependencies() { return dependencies; }
|
public List<String> getDependencies() { return dependencies; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Récupère la liste des commandes de la règle.
|
||||||
|
* @return La liste des commandes
|
||||||
|
*/
|
||||||
public List<String> getCommands() { return commands; }
|
public List<String> getCommands() { return commands; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Vérifie si la règle est phony.
|
||||||
|
* @return true si la règle est phony, false sinon.
|
||||||
|
*/
|
||||||
public boolean isPhony() { return isPhony; }
|
public boolean isPhony() { return isPhony; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Vérifie si la règle est vide (sans dépendances ni commandes).
|
||||||
|
* @return true si la règle est vide, false sinon
|
||||||
|
*/
|
||||||
public boolean isEmpty() { return dependencies.isEmpty() && commands.isEmpty(); }
|
public boolean isEmpty() { return dependencies.isEmpty() && commands.isEmpty(); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Vérifie si la règle doit être mise à jour.
|
||||||
|
* @return true si la règle doit être mise à jour, false sinon
|
||||||
|
*/
|
||||||
public boolean needsUpdate() {
|
public boolean needsUpdate() {
|
||||||
if (BakeCLI.isDebug()){
|
if (BakeCLI.isDebug()){
|
||||||
System.out.println("Debug : Checking if rule " + name + " needs update");
|
System.out.println("Debug : Checking if rule " + name + " needs update");
|
||||||
|
@ -6,18 +6,23 @@ import java.util.Date;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Classe utilitaire pour la gestion des timestamps des fichiers.
|
* Classe utilitaire pour la gestion des timestamps des fichiers.
|
||||||
* Dernière modification : 04/02/2025
|
|
||||||
*
|
*
|
||||||
* @author Moncef STITI, Yanis HAMOUDI
|
* @author Moncef STITI, Yanis HAMOUDI
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
* @date 04/02/2025
|
|
||||||
*/
|
*/
|
||||||
public class TimestampManager {
|
public class TimestampManager {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructeur de TimestampManager.
|
||||||
|
*/
|
||||||
|
public TimestampManager() {
|
||||||
|
// Constructeur inutile
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Récupère le timestamp d'un fichier.
|
* Récupère le timestamp d'un fichier.
|
||||||
* @param filePath Le chemin du fichier.
|
|
||||||
* @return Le timestamp du fichier, ou 0 si le fichier n'existe pas.
|
* @return Le timestamp du fichier, ou 0 si le fichier n'existe pas.
|
||||||
|
* @param file Le fichier
|
||||||
*/
|
*/
|
||||||
public static long getTimestamp(File file) {
|
public static long getTimestamp(File file) {
|
||||||
if (file.exists()) {
|
if (file.exists()) {
|
||||||
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user