Ajout de la gestion des chemins d'accès avec tilde pour ignorer les règles et dépendances dans le répertoire personnel, afin de correspondre au comportement de Make.
This commit is contained in:
parent
0ad41c748f
commit
a6a7fe322d
src/fr/monlouyan/bakefile
@ -47,6 +47,14 @@ public class DependencyResolver {
|
|||||||
|
|
||||||
// Construire la liste finale des règles dans l'ordre
|
// Construire la liste finale des règles dans l'ordre
|
||||||
for (String ruleName : buildOrder) {
|
for (String ruleName : buildOrder) {
|
||||||
|
// Skip rules with tilde in path (home directory) to match make behavior
|
||||||
|
if (ruleName.startsWith("~")) {
|
||||||
|
if (debug) {
|
||||||
|
System.out.println("Debug: Skipping home directory path in resolution: " + ruleName);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
Rule rule = ruleMap.get(ruleName);
|
Rule rule = ruleMap.get(ruleName);
|
||||||
if (rule != null) {
|
if (rule != null) {
|
||||||
rulesToBuild.add(rule);
|
rulesToBuild.add(rule);
|
||||||
@ -66,6 +74,10 @@ public class DependencyResolver {
|
|||||||
|
|
||||||
// D'abord traiter les dépendances
|
// D'abord traiter les dépendances
|
||||||
for (String dep : rule.getDependencies()) {
|
for (String dep : rule.getDependencies()) {
|
||||||
|
// Skip dependencies with tilde in path
|
||||||
|
if (dep.startsWith("~")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
topologicalSort(dep, processed, buildOrder);
|
topologicalSort(dep, processed, buildOrder);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,7 +85,7 @@ public class DependencyResolver {
|
|||||||
buildOrder.add(ruleName);
|
buildOrder.add(ruleName);
|
||||||
}
|
}
|
||||||
|
|
||||||
// La méthode detectCycle reste inchangée
|
// La méthode detectCycle avec une modification pour les chemins home
|
||||||
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) {
|
||||||
@ -95,6 +107,11 @@ public class DependencyResolver {
|
|||||||
if (rule != null) {
|
if (rule != null) {
|
||||||
List<String> dependenciesCopy = new ArrayList<>(rule.getDependencies());
|
List<String> dependenciesCopy = new ArrayList<>(rule.getDependencies());
|
||||||
for (String dependency : dependenciesCopy) {
|
for (String dependency : dependenciesCopy) {
|
||||||
|
// Skip dependencies with tilde in path
|
||||||
|
if (dependency.startsWith("~")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (ruleMap.containsKey(dependency)) {
|
if (ruleMap.containsKey(dependency)) {
|
||||||
detectCycle(dependency, visited, stack, ruleName);
|
detectCycle(dependency, visited, stack, ruleName);
|
||||||
}
|
}
|
||||||
|
@ -35,8 +35,21 @@ public class Rule {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Skip targets with tilde in path (home directory) to match make behavior
|
||||||
|
if (name.startsWith("~")) {
|
||||||
|
if (BakeCLI.isDebug()) {
|
||||||
|
System.out.println("Debug : Skipping home directory path: " + name);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Vérifier d'abord toutes les dépendances avant d'exécuter quoi que ce soit
|
// Vérifier d'abord toutes les dépendances avant d'exécuter quoi que ce soit
|
||||||
for (String dependency : dependencies) {
|
for (String dependency : dependencies) {
|
||||||
|
// Skip dependencies with tilde in path
|
||||||
|
if (dependency.startsWith("~")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
File depFile = new File(dependency);
|
File depFile = new File(dependency);
|
||||||
boolean hasRule = BakeEngine.hasRule(dependency);
|
boolean hasRule = BakeEngine.hasRule(dependency);
|
||||||
if (!depFile.exists() && !dependency.isEmpty() && !hasRule) {
|
if (!depFile.exists() && !dependency.isEmpty() && !hasRule) {
|
||||||
@ -57,6 +70,11 @@ public class Rule {
|
|||||||
// Si la règle n'a pas de commandes, on vérifie seulement si une dépendance doit être mise à jour
|
// Si la règle n'a pas de commandes, on vérifie seulement si une dépendance doit être mise à jour
|
||||||
if (commands.isEmpty()) {
|
if (commands.isEmpty()) {
|
||||||
for (String dependency : dependencies) {
|
for (String dependency : dependencies) {
|
||||||
|
// Skip dependencies with tilde in path
|
||||||
|
if (dependency.startsWith("~")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
Rule depRule = BakeEngine.getRule(dependency);
|
Rule depRule = BakeEngine.getRule(dependency);
|
||||||
if (depRule != null && depRule.needsUpdate()) {
|
if (depRule != null && depRule.needsUpdate()) {
|
||||||
if (BakeCLI.isDebug()) {
|
if (BakeCLI.isDebug()) {
|
||||||
@ -80,6 +98,11 @@ public class Rule {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (String dependency : dependencies) {
|
for (String dependency : dependencies) {
|
||||||
|
// Skip dependencies with tilde in path
|
||||||
|
if (dependency.startsWith("~")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
File depFile = new File(dependency);
|
File depFile = new File(dependency);
|
||||||
long depTimestamp = depFile.exists() ? TimestampManager.getTimestamp(depFile) : 0;
|
long depTimestamp = depFile.exists() ? TimestampManager.getTimestamp(depFile) : 0;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user