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
|
||||
* mais absentes du fichier existant (nouvelles options apportees par une mise a jour du
|
||||
* plugin), sans jamais toucher aux lignes/valeurs deja presentes. Preserve donc aussi les
|
||||
* commentaires existants (simple ajout de lignes, pas de reecriture complete).
|
||||
* Ajoute a la fin de config.properties les blocs (commentaires + cle=valeur) du fichier par
|
||||
* defaut du jar dont la cle est absente du fichier existant (nouvelles options apportees par
|
||||
* une mise a jour du plugin), sans jamais toucher aux lignes/valeurs deja presentes. Copie le
|
||||
* bloc entier tel quel (donc avec son explication en commentaire), pas juste "cle=valeur".
|
||||
*/
|
||||
private void mergeMissingConfigKeys(Path configFile) throws IOException {
|
||||
Properties defaults = new Properties();
|
||||
String defaultsText;
|
||||
try (InputStream in = getClass().getClassLoader().getResourceAsStream("config.properties")) {
|
||||
if (in == null) {
|
||||
return;
|
||||
}
|
||||
defaults.load(in);
|
||||
defaultsText = new String(in.readAllBytes(), java.nio.charset.StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
Properties existing = new Properties();
|
||||
@@ -98,16 +98,31 @@ public class VoteConfig {
|
||||
existing.load(in);
|
||||
}
|
||||
|
||||
String[] blocks = defaultsText.split("\\r?\\n\\s*\\r?\\n");
|
||||
StringBuilder toAppend = new StringBuilder();
|
||||
for (String key : defaults.stringPropertyNames()) {
|
||||
if (!existing.containsKey(key)) {
|
||||
toAppend.append(key).append('=').append(defaults.getProperty(key)).append(System.lineSeparator());
|
||||
|
||||
for (String block : blocks) {
|
||||
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) {
|
||||
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;
|
||||
Files.writeString(configFile, addition, java.nio.file.StandardOpenOption.APPEND);
|
||||
logger.info("config.properties mis a jour avec les nouvelles options manquantes (valeurs existantes conservees).");
|
||||
|
||||
Reference in New Issue
Block a user