summaryrefslogtreecommitdiff
path: root/scripts/sync-from-project.ps1
diff options
context:
space:
mode:
authorertopogo <erwin.t.pombett@gmail.com>2025-11-20 00:06:48 +0100
committerertopogo <erwin.t.pombett@gmail.com>2025-11-20 00:06:48 +0100
commit568668994b51fc92c2fbc5c2fcf0ff1ef24aa791 (patch)
tree76562ae8379f8db75bc06821367436d563e723e8 /scripts/sync-from-project.ps1
Initial commit: Structure du projet de synchronisation de fichiers de configuration
Diffstat (limited to 'scripts/sync-from-project.ps1')
-rw-r--r--scripts/sync-from-project.ps1137
1 files changed, 137 insertions, 0 deletions
diff --git a/scripts/sync-from-project.ps1 b/scripts/sync-from-project.ps1
new file mode 100644
index 0000000..45ff258
--- /dev/null
+++ b/scripts/sync-from-project.ps1
@@ -0,0 +1,137 @@
+# Script pour restaurer les fichiers de configuration depuis le projet
+# Lit path-mapping.json et copie chaque fichier vers son emplacement original
+
+param(
+ [string]$MappingFile = "path-mapping.json"
+)
+
+$ErrorActionPreference = "Stop"
+
+# Vérifier que le fichier de mapping existe
+if (-not (Test-Path $MappingFile)) {
+ Write-Error "Le fichier de mapping '$MappingFile' n'existe pas. Exécutez d'abord sync-to-project.ps1"
+ exit 1
+}
+
+# Charger le mapping
+try {
+ $mapping = Get-Content $MappingFile -Raw | ConvertFrom-Json
+} catch {
+ Write-Error "Impossible de charger le fichier de mapping: $_"
+ exit 1
+}
+
+$restoredCount = 0
+$skippedCount = 0
+$errorCount = 0
+
+# Fonction pour résoudre un chemin Windows
+function Resolve-WindowsPath {
+ param([string]$path)
+
+ # Remplacer les variables d'environnement
+ $resolved = $path
+ $resolved = $resolved -replace '%USERPROFILE%', $env:USERPROFILE
+ $resolved = $resolved -replace '%APPDATA%', $env:APPDATA
+ $resolved = $resolved -replace '%LOCALAPPDATA%', $env:LOCALAPPDATA
+ $resolved = $resolved -replace '%HOME%', $env:HOME
+
+ # Remplacer les autres variables d'environnement
+ $resolved = [System.Environment]::ExpandEnvironmentVariables($resolved)
+
+ return $resolved
+}
+
+# Traiter les fichiers Windows
+if ($mapping.windows) {
+ $mapping.windows.PSObject.Properties | ForEach-Object {
+ $originalPath = $_.Name
+ $projectPath = $_.Value
+
+ try {
+ # Vérifier que le fichier source existe dans le projet
+ if (-not (Test-Path $projectPath)) {
+ Write-Warning "Fichier source introuvable dans le projet: $projectPath"
+ $skippedCount++
+ return
+ }
+
+ # Résoudre le chemin de destination
+ $destinationPath = Resolve-WindowsPath $originalPath
+
+ # Créer le répertoire parent si nécessaire
+ $destinationDir = Split-Path $destinationPath -Parent
+ if ($destinationDir -and -not (Test-Path $destinationDir)) {
+ New-Item -ItemType Directory -Path $destinationDir -Force | Out-Null
+ Write-Host "Créé le répertoire: $destinationDir"
+ }
+
+ # Copier le fichier
+ Copy-Item -Path $projectPath -Destination $destinationPath -Force
+
+ Write-Host "Restauré: $projectPath -> $destinationPath"
+ $restoredCount++
+
+ } catch {
+ Write-Error "Erreur lors de la restauration de '$originalPath': $_"
+ $errorCount++
+ }
+ }
+}
+
+# Traiter les fichiers WSL
+if ($mapping.wsl) {
+ $mapping.wsl.PSObject.Properties | ForEach-Object {
+ $originalPath = $_.Name
+ $projectPath = $_.Value
+
+ try {
+ # Vérifier que le fichier source existe dans le projet
+ if (-not (Test-Path $projectPath)) {
+ Write-Warning "Fichier source introuvable dans le projet: $projectPath"
+ $skippedCount++
+ return
+ }
+
+ # Résoudre le chemin de destination WSL
+ $wslDestination = $originalPath
+ if ($wslDestination -match '^~') {
+ $wslDestination = wsl bash -c "echo $wslDestination"
+ }
+
+ # Créer le répertoire parent si nécessaire
+ $wslDir = Split-Path $wslDestination -Parent
+ if ($wslDir) {
+ wsl mkdir -p "$wslDir" 2>$null
+ }
+
+ # Copier le fichier vers WSL
+ # Convertir le chemin Windows en chemin WSL
+ $wslSource = (wsl wslpath -a $projectPath)
+ wsl cp "$wslSource" "$wslDestination"
+
+ if ($LASTEXITCODE -ne 0) {
+ # Fallback: utiliser PowerShell pour copier vers WSL
+ $content = Get-Content $projectPath -Raw -Encoding UTF8
+ $tempFile = [System.IO.Path]::GetTempFileName()
+ Set-Content -Path $tempFile -Value $content -Encoding UTF8
+ $wslTemp = (wsl wslpath -a $tempFile)
+ wsl cp "$wslTemp" "$wslDestination"
+ Remove-Item $tempFile
+ }
+
+ Write-Host "Restauré (WSL): $projectPath -> $wslDestination"
+ $restoredCount++
+
+ } catch {
+ Write-Error "Erreur lors de la restauration WSL de '$originalPath': $_"
+ $errorCount++
+ }
+ }
+}
+
+Write-Host "`nRésumé:"
+Write-Host " Fichiers restaurés: $restoredCount"
+Write-Host " Fichiers ignorés: $skippedCount"
+Write-Host " Erreurs: $errorCount"
+