Fix : merge auto de config.properties ne copiait pas les commentaires
L'ancien merge lisait les defauts via Properties.load(), qui jette tous les commentaires : les nouvelles cles ajoutees automatiquement (ex: pending-votes.scope) arrivaient nues, sans explication, sous un header generique confus. Le merge copie desormais le bloc texte entier (commentaires inclus) du config.properties par defaut, verbatim, pour chaque cle manquante. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
261e220d1a
commit
62d4d30530
@@ -79,18 +79,18 @@ public class VoteConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ajoute a la fin de config.properties les cles presentes dans le fichier par defaut du jar
|
* Ajoute a la fin de config.properties les blocs (commentaires + cle=valeur) du fichier par
|
||||||
* mais absentes du fichier existant (nouvelles options apportees par une mise a jour du
|
* defaut du jar dont la cle est absente du fichier existant (nouvelles options apportees par
|
||||||
* plugin), sans jamais toucher aux lignes/valeurs deja presentes. Preserve donc aussi les
|
* une mise a jour du plugin), sans jamais toucher aux lignes/valeurs deja presentes. Copie le
|
||||||
* commentaires existants (simple ajout de lignes, pas de reecriture complete).
|
* bloc entier tel quel (donc avec son explication en commentaire), pas juste "cle=valeur".
|
||||||
*/
|
*/
|
||||||
private void mergeMissingConfigKeys(Path configFile) throws IOException {
|
private void mergeMissingConfigKeys(Path configFile) throws IOException {
|
||||||
Properties defaults = new Properties();
|
String defaultsText;
|
||||||
try (InputStream in = getClass().getClassLoader().getResourceAsStream("config.properties")) {
|
try (InputStream in = getClass().getClassLoader().getResourceAsStream("config.properties")) {
|
||||||
if (in == null) {
|
if (in == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
defaults.load(in);
|
defaultsText = new String(in.readAllBytes(), java.nio.charset.StandardCharsets.UTF_8);
|
||||||
}
|
}
|
||||||
|
|
||||||
Properties existing = new Properties();
|
Properties existing = new Properties();
|
||||||
@@ -98,16 +98,31 @@ public class VoteConfig {
|
|||||||
existing.load(in);
|
existing.load(in);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String[] blocks = defaultsText.split("\\r?\\n\\s*\\r?\\n");
|
||||||
StringBuilder toAppend = new StringBuilder();
|
StringBuilder toAppend = new StringBuilder();
|
||||||
for (String key : defaults.stringPropertyNames()) {
|
|
||||||
if (!existing.containsKey(key)) {
|
for (String block : blocks) {
|
||||||
toAppend.append(key).append('=').append(defaults.getProperty(key)).append(System.lineSeparator());
|
java.util.List<String> keysInBlock = new java.util.ArrayList<>();
|
||||||
|
for (String line : block.split("\\r?\\n")) {
|
||||||
|
String trimmed = line.trim();
|
||||||
|
if (trimmed.isEmpty() || trimmed.startsWith("#")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
int eq = trimmed.indexOf('=');
|
||||||
|
if (eq > 0) {
|
||||||
|
keysInBlock.add(trimmed.substring(0, eq).trim());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!keysInBlock.isEmpty() && keysInBlock.stream().noneMatch(existing::containsKey)) {
|
||||||
|
toAppend.append(block.stripTrailing()).append(System.lineSeparator()).append(System.lineSeparator());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (toAppend.length() > 0) {
|
if (toAppend.length() > 0) {
|
||||||
String addition = System.lineSeparator()
|
String addition = System.lineSeparator()
|
||||||
+ "# --- options ajoutees automatiquement par une mise a jour du plugin ---" + System.lineSeparator()
|
+ "# --- nouvelles options ajoutees par une mise a jour du plugin (voir description ci-dessous) ---"
|
||||||
|
+ System.lineSeparator() + System.lineSeparator()
|
||||||
+ toAppend;
|
+ toAppend;
|
||||||
Files.writeString(configFile, addition, java.nio.file.StandardOpenOption.APPEND);
|
Files.writeString(configFile, addition, java.nio.file.StandardOpenOption.APPEND);
|
||||||
logger.info("config.properties mis a jour avec les nouvelles options manquantes (valeurs existantes conservees).");
|
logger.info("config.properties mis a jour avec les nouvelles options manquantes (valeurs existantes conservees).");
|
||||||
|
|||||||
Reference in New Issue
Block a user