diff --git a/src/fr/monlouyan/bakefile/CommandExecutor.java b/src/fr/monlouyan/bakefile/CommandExecutor.java index 065ea24..6a7e07d 100644 --- a/src/fr/monlouyan/bakefile/CommandExecutor.java +++ b/src/fr/monlouyan/bakefile/CommandExecutor.java @@ -68,7 +68,7 @@ public class CommandExecutor { // 2. Aucune règle n'avait besoin d'être mise à jour // 3. On n'a PAS de commandes à exécuter else if (rule.getName().equals(BakefileParser.getFirstTarget()) && !needsUpdate && rule.getCommands().isEmpty()) { - System.out.println("bake: Nothing to be done for '" + rule.getName() + "'."); + System.out.println("bake: Nothing to be done for `" + rule.getName() + "'."); } } } \ No newline at end of file diff --git a/src/fr/monlouyan/bakefile/Rule.java b/src/fr/monlouyan/bakefile/Rule.java index 4831799..72c2e22 100644 --- a/src/fr/monlouyan/bakefile/Rule.java +++ b/src/fr/monlouyan/bakefile/Rule.java @@ -23,82 +23,79 @@ public class Rule { public boolean isEmpty() { return dependencies.isEmpty() && commands.isEmpty(); } public boolean needsUpdate() { - if (BakeCLI.isDebug()){ - System.out.println("Debug : Checking if rule " + name + " needs update"); - } - - // Les règles phony sont toujours mises à jour - if (isPhony) { - if (BakeCLI.isDebug()) { - System.out.println("Debug : Rule " + name + " is phony, always needs update"); - } - return true; - } - - // Si la règle n'a pas de commandes, on vérifie seulement si une dépendance doit être mise à jour - if (commands.isEmpty()) { - for (String dependency : dependencies) { - File depFile = new File(dependency); - if (!depFile.exists() && !dependency.isEmpty() && !BakeEngine.hasRule(dependency)) { - System.out.println("bake: *** No rule to make target `" + dependency + "', needed by '" + name + "'. Stop."); - System.exit(1); - } - Rule depRule = BakeEngine.getRule(dependency); - if (depRule != null && depRule.needsUpdate()) { - if (BakeCLI.isDebug()) { - System.out.println("Debug : Dependency rule " + dependency + " needs update"); - } - return true; - } - } - return false; - } - - // Pour les règles avec des commandes, on vérifie aussi les timestamps - File targetFile = new File(name); - if (BakeCLI.isDebug()){ - System.out.println("Debug : Checking if target file " + name + " exist and is up to date"); - } - - long targetTimestamp = targetFile.exists() ? TimestampManager.getTimestamp(targetFile) : 0; - - if (BakeCLI.isDebug()) { - System.out.println("Debug : Target file '" + name + "' last modified at " + TimestampManager.formatTimestamp(targetTimestamp)); - } - - for (String dependency : dependencies) { - File depFile = new File(dependency); - long depTimestamp = depFile.exists() ? TimestampManager.getTimestamp(depFile) : 0; - - if (BakeCLI.isDebug()) { - System.out.println("Debug : Dependency '" + dependency + "' last modified at " + TimestampManager.formatTimestamp(depTimestamp)); - } - - // Vérifier si une règle existe pour cette dépendance - boolean hasRule = BakeEngine.hasRule(dependency); - - if (!depFile.exists() && !dependency.isEmpty() && !hasRule) { - System.out.println("bake: *** No rule to make target `" + dependency + "', needed by '" + name + "'. Stop."); - System.exit(1); - } - - // Si la dépendance est une règle et qu'elle a besoin d'être mise à jour - Rule depRule = BakeEngine.getRule(dependency); - if (depRule != null && depRule.needsUpdate()) { - if (BakeCLI.isDebug()) { - System.out.println("Debug : Dependency rule " + dependency + " needs update"); - } - return true; - } - - // Vérifier les timestamps seulement si le fichier existe - if (depFile.exists() && TimestampManager.getTimestamp(depFile) > targetTimestamp) { - if (BakeCLI.isDebug()) { - System.out.println("Debug : Dependency " + dependency + " is newer than target file " + name + ", needs update"); - } - return true; - } - } - return false; - } + if (BakeCLI.isDebug()){ + System.out.println("Debug : Checking if rule " + name + " needs update"); + } + + // Les règles phony sont toujours mises à jour + if (isPhony) { + if (BakeCLI.isDebug()) { + System.out.println("Debug : Rule " + name + " is phony, always needs update"); + } + return true; + } + + // Vérifier d'abord toutes les dépendances avant d'exécuter quoi que ce soit + for (String dependency : dependencies) { + File depFile = new File(dependency); + boolean hasRule = BakeEngine.hasRule(dependency); + if (!depFile.exists() && !dependency.isEmpty() && !hasRule) { + System.out.println("bake: *** No rule to make target `" + dependency + "', needed by `" + name + "'. Stop."); + System.exit(1); + } + } + + // Si la règle n'a pas de commandes, on vérifie seulement si une dépendance doit être mise à jour + if (commands.isEmpty()) { + for (String dependency : dependencies) { + Rule depRule = BakeEngine.getRule(dependency); + if (depRule != null && depRule.needsUpdate()) { + if (BakeCLI.isDebug()) { + System.out.println("Debug : Dependency rule " + dependency + " needs update"); + } + return true; + } + } + return false; + } + + // Pour les règles avec des commandes, on vérifie aussi les timestamps + File targetFile = new File(name); + if (BakeCLI.isDebug()){ + System.out.println("Debug : Checking if target file " + name + " exist and is up to date"); + } + + long targetTimestamp = targetFile.exists() ? TimestampManager.getTimestamp(targetFile) : 0; + + if (BakeCLI.isDebug()) { + System.out.println("Debug : Target file '" + name + "' last modified at " + TimestampManager.formatTimestamp(targetTimestamp)); + } + + for (String dependency : dependencies) { + File depFile = new File(dependency); + long depTimestamp = depFile.exists() ? TimestampManager.getTimestamp(depFile) : 0; + + if (BakeCLI.isDebug()) { + System.out.println("Debug : Dependency '" + dependency + "' last modified at " + TimestampManager.formatTimestamp(depTimestamp)); + } + + // Si la dépendance est une règle et qu'elle a besoin d'être mise à jour + Rule depRule = BakeEngine.getRule(dependency); + if (depRule != null && depRule.needsUpdate()) { + if (BakeCLI.isDebug()) { + System.out.println("Debug : Dependency rule " + dependency + " needs update"); + } + return true; + } + + // Vérifier les timestamps seulement si le fichier existe + if (depFile.exists() && TimestampManager.getTimestamp(depFile) > targetTimestamp) { + if (BakeCLI.isDebug()) { + System.out.println("Debug : Dependency " + dependency + " is newer than target file " + name + ", needs update"); + } + return true; + } + } + return false; + } } \ No newline at end of file