forked from public/foundryvtt-wh4-lang-fr-fr
Sync to latest WFRP release
This commit is contained in:
181
tools/copy-new-scripts.js
Normal file
181
tools/copy-new-scripts.js
Normal file
@@ -0,0 +1,181 @@
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
const WFRP4E_SCRIPTS = '/home/morr/work/foundryvtt/WFRP4e-FoundryVTT/scripts';
|
||||
const FR_SCRIPTS = '/home/morr/work/foundryvtt/foundryvtt-wh4-lang-fr-fr/scripts';
|
||||
const COPY_LOG = path.join(__dirname, 'copy-new-scripts.log');
|
||||
|
||||
/**
|
||||
* Récupère la liste des fichiers .js dans un dossier
|
||||
* @param {string} dir - Le chemin du dossier
|
||||
* @returns {string[]} - Liste des noms de fichiers
|
||||
*/
|
||||
function getScriptFiles(dir) {
|
||||
try {
|
||||
return fs.readdirSync(dir).filter(f => f.endsWith('.js'));
|
||||
} catch (error) {
|
||||
console.error(`Erreur lors de la lecture du dossier ${dir}:`, error.message);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Copie les nouveaux scripts du système WFRP4E vers le module FR
|
||||
* @param {boolean} dryRun - Si true, affiche ce qui serait fait sans copier
|
||||
* @returns {object} - Résultats de l'opération
|
||||
*/
|
||||
function copyNewScripts(dryRun = false) {
|
||||
console.log('Analyse des scripts...\n');
|
||||
|
||||
const wfrp4eFiles = getScriptFiles(WFRP4E_SCRIPTS);
|
||||
const frFiles = getScriptFiles(FR_SCRIPTS);
|
||||
|
||||
// Fichiers présents dans WFRP4E mais pas dans le module FR
|
||||
const newFiles = wfrp4eFiles.filter(file => !frFiles.includes(file));
|
||||
|
||||
const results = {
|
||||
total: wfrp4eFiles.length,
|
||||
existingInFR: frFiles.length,
|
||||
newFiles: newFiles.length,
|
||||
copied: [],
|
||||
errors: []
|
||||
};
|
||||
|
||||
console.log(`📊 Statistiques:`);
|
||||
console.log(` - Scripts dans WFRP4E: ${results.total}`);
|
||||
console.log(` - Scripts dans FR: ${results.existingInFR}`);
|
||||
console.log(` - Nouveaux scripts à copier: ${results.newFiles}\n`);
|
||||
|
||||
if (newFiles.length === 0) {
|
||||
console.log('✅ Aucun nouveau script à copier.');
|
||||
return results;
|
||||
}
|
||||
|
||||
if (dryRun) {
|
||||
console.log('🔍 Mode simulation (dry-run) - Aucun fichier ne sera copié\n');
|
||||
console.log('Nouveaux scripts qui seraient copiés:');
|
||||
newFiles.forEach((file, index) => {
|
||||
console.log(` ${index + 1}. ${file}`);
|
||||
});
|
||||
return results;
|
||||
}
|
||||
|
||||
// Copie des nouveaux fichiers
|
||||
console.log('📋 Copie des nouveaux scripts...\n');
|
||||
|
||||
newFiles.forEach((file, index) => {
|
||||
const sourcePath = path.join(WFRP4E_SCRIPTS, file);
|
||||
const destPath = path.join(FR_SCRIPTS, file);
|
||||
|
||||
try {
|
||||
fs.copyFileSync(sourcePath, destPath);
|
||||
results.copied.push(file);
|
||||
console.log(` ✓ [${index + 1}/${newFiles.length}] ${file}`);
|
||||
} catch (error) {
|
||||
results.errors.push({ file, error: error.message });
|
||||
console.error(` ✗ [${index + 1}/${newFiles.length}] ${file} - Erreur: ${error.message}`);
|
||||
}
|
||||
});
|
||||
|
||||
// Sauvegarde du log
|
||||
const logContent = {
|
||||
date: new Date().toISOString(),
|
||||
results,
|
||||
files: results.copied
|
||||
};
|
||||
|
||||
fs.writeFileSync(COPY_LOG, JSON.stringify(logContent, null, 2), 'utf-8');
|
||||
|
||||
// Résumé
|
||||
console.log('\n' + '='.repeat(60));
|
||||
console.log('📝 Résumé de l\'opération:');
|
||||
console.log('='.repeat(60));
|
||||
console.log(` ✅ Fichiers copiés avec succès: ${results.copied.length}`);
|
||||
if (results.errors.length > 0) {
|
||||
console.log(` ❌ Erreurs: ${results.errors.length}`);
|
||||
results.errors.forEach(err => {
|
||||
console.log(` - ${err.file}: ${err.error}`);
|
||||
});
|
||||
}
|
||||
console.log(` 📄 Log sauvegardé dans: ${COPY_LOG}`);
|
||||
console.log('='.repeat(60) + '\n');
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Affiche la liste des nouveaux scripts sans les copier
|
||||
* @returns {object} - Résultats de l'analyse
|
||||
*/
|
||||
function listNewScripts() {
|
||||
const wfrp4eFiles = getScriptFiles(WFRP4E_SCRIPTS);
|
||||
const frFiles = getScriptFiles(FR_SCRIPTS);
|
||||
const newFiles = wfrp4eFiles.filter(file => !frFiles.includes(file));
|
||||
|
||||
console.log(`📊 Total scripts WFRP4E: ${wfrp4eFiles.length}`);
|
||||
console.log(`📊 Total scripts FR: ${frFiles.length}`);
|
||||
console.log(`📊 Nouveaux scripts: ${newFiles.length}\n`);
|
||||
|
||||
if (newFiles.length > 0) {
|
||||
console.log('Nouveaux scripts:');
|
||||
newFiles.forEach((file, index) => {
|
||||
console.log(` ${index + 1}. ${file}`);
|
||||
});
|
||||
} else {
|
||||
console.log('✅ Aucun nouveau script trouvé.');
|
||||
}
|
||||
|
||||
return {
|
||||
total: wfrp4eFiles.length,
|
||||
existingInFR: frFiles.length,
|
||||
newFiles: newFiles.length,
|
||||
files: newFiles
|
||||
};
|
||||
}
|
||||
|
||||
// --- Exécution du script ---
|
||||
|
||||
const args = process.argv.slice(2);
|
||||
const command = args[0];
|
||||
|
||||
switch (command) {
|
||||
case '--list':
|
||||
case '-l':
|
||||
listNewScripts();
|
||||
break;
|
||||
|
||||
case '--dry-run':
|
||||
case '-d':
|
||||
copyNewScripts(true);
|
||||
break;
|
||||
|
||||
case '--copy':
|
||||
case '-c':
|
||||
copyNewScripts(false);
|
||||
break;
|
||||
|
||||
case '--help':
|
||||
case '-h':
|
||||
default:
|
||||
console.log(`
|
||||
📚 Script de copie des nouveaux scripts WFRP4E vers le module FR
|
||||
|
||||
Usage:
|
||||
node copy-new-scripts.js [commande]
|
||||
|
||||
Commandes:
|
||||
--list, -l Liste les nouveaux scripts sans les copier
|
||||
--dry-run, -d Simule la copie (affiche ce qui serait fait)
|
||||
--copy, -c Copie les nouveaux scripts dans le module FR
|
||||
--help, -h Affiche cette aide
|
||||
|
||||
Exemples:
|
||||
node copy-new-scripts.js --list # Liste les nouveaux fichiers
|
||||
node copy-new-scripts.js --dry-run # Simulation
|
||||
node copy-new-scripts.js --copy # Copie les fichiers
|
||||
`);
|
||||
break;
|
||||
}
|
||||
Reference in New Issue
Block a user