Correction de bug - À vérifier
This commit is contained in:
parent
b74fbf3477
commit
7d392117e9
src/fr/monlouyan/bakefile
@ -3,6 +3,7 @@ package fr.monlouyan.bakefile;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Moteur principal de l'application Bake.
|
||||
@ -85,4 +86,12 @@ public class BakeEngine {
|
||||
executor.execute(rule);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupère les noms de toutes les règles.
|
||||
* @return Un ensemble contenant les noms de toutes les règles
|
||||
*/
|
||||
public static Set<String> getAllRuleNames() {
|
||||
return ruleMap.keySet();
|
||||
}
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
package fr.monlouyan.bakefile;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -94,27 +95,6 @@ public class Rule {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Vérifier d'abord toutes les dépendances avant d'exécuter quoi que ce soit
|
||||
for (String dependency : dependencies) {
|
||||
// Skip dependencies with tilde in path
|
||||
if (dependency.startsWith("~")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
File depFile = new File(dependency);
|
||||
boolean hasRule = BakeEngine.hasRule(dependency);
|
||||
|
||||
// Ignorer les options de compilation qui pourraient avoir un ':' dedans
|
||||
if (dependency.startsWith("-") || dependency.contains(":")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!depFile.exists() && !dependency.isEmpty() && !hasRule) {
|
||||
System.out.println("bake: *** No rule to make target `" + dependency + "', needed by `" + name + "'. Stop.");
|
||||
System.exit(2);
|
||||
}
|
||||
}
|
||||
|
||||
// Si le fichier cible n'existe pas et qu'il y a des commandes, il doit être mis à jour
|
||||
File targetFile = new File(name);
|
||||
if (!targetFile.exists() && !commands.isEmpty()) {
|
||||
@ -124,6 +104,48 @@ public class Rule {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Vérifier d'abord toutes les dépendances avant d'exécuter quoi que ce soit
|
||||
for (String dependency : dependencies) {
|
||||
// Skip dependencies with tilde in path
|
||||
if (dependency.startsWith("~")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Ignorer les options de compilation qui pourraient avoir un ':' dedans
|
||||
if (dependency.startsWith("-") || dependency.contains(":")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
File depFile = new File(dependency);
|
||||
boolean hasRule = BakeEngine.hasRule(dependency);
|
||||
|
||||
if (!depFile.exists() && !dependency.isEmpty() && !hasRule) {
|
||||
// Vérifier si on est en situation de dépendance circulaire déjà traitée
|
||||
boolean isPartOfCircularDependency = false;
|
||||
|
||||
// Vérifier si cette dépendance est impliquée dans une relation circulaire
|
||||
for (Rule rule : getAllRules()) {
|
||||
if (rule.getName().equals(dependency) && rule.getDependencies().contains(name)) {
|
||||
if (BakeCLI.isDebug()) {
|
||||
System.out.println("Debug: Found circular dependency between " + name + " and " + dependency);
|
||||
}
|
||||
isPartOfCircularDependency = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (isPartOfCircularDependency) {
|
||||
if (BakeCLI.isDebug()) {
|
||||
System.out.println("Debug: Ignoring circular dependency: " + dependency);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
System.out.println("bake: *** No rule to make target `" + dependency + "', needed by `" + name + "'. Stop.");
|
||||
System.exit(2);
|
||||
}
|
||||
}
|
||||
|
||||
// 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) {
|
||||
@ -204,4 +226,19 @@ public class Rule {
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Permet de récupérer la liste de toutes les règles
|
||||
* @return La liste de toutes les règles
|
||||
*/
|
||||
private List<Rule> getAllRules() {
|
||||
List<Rule> allRules = new ArrayList<>();
|
||||
for (String ruleName : BakeEngine.getAllRuleNames()) {
|
||||
Rule rule = BakeEngine.getRule(ruleName);
|
||||
if (rule != null) {
|
||||
allRules.add(rule);
|
||||
}
|
||||
}
|
||||
return allRules;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user