blob: 7ad43a7fafac447ac760ee588e286b7bd9ecda66 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
# 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
}
# Fonction pour résoudre un chemin WSL vers un chemin Windows accessible
function Resolve-WSLPath {
param([string]$path)
# Détecter la distribution WSL (par défaut Ubuntu)
$wslDistro = "Ubuntu"
# Expansion de ~ vers /home/toshiro (ou autre utilisateur)
if ($path -match '^~') {
$homePath = wsl bash -c "echo ~" 2>$null
if ($LASTEXITCODE -eq 0 -and $homePath) {
$path = $path -replace '^~', $homePath
} else {
# Fallback: utiliser toshiro
$path = $path -replace '^~', "/home/toshiro"
}
}
# Convertir le chemin WSL en chemin Windows accessible
# Format: /home/toshiro/.bashrc -> \\wsl.localhost\Ubuntu\home\toshiro\.bashrc
if ($path -match '^/') {
# Enlever le slash initial
$relativePath = $path.Substring(1)
# Convertir en chemin Windows
$windowsPath = "\\wsl.localhost\$wslDistro\$relativePath" -replace '/', '\'
return $windowsPath
}
return $path
}
# 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 en chemin Windows accessible
$destinationPath = Resolve-WSLPath $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 directement (maintenant que le chemin WSL est converti en chemin Windows)
Copy-Item -Path $projectPath -Destination $destinationPath -Force
Write-Host "Restauré (WSL): $projectPath -> $destinationPath"
$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"
|