backupAndOverwrite backs up edited files, then overwrites them with source files.
(cli *cli, edited []string, sourceRoot, destRoot string)
| 255 | |
| 256 | // backupAndOverwrite backs up edited files, then overwrites them with source files. |
| 257 | func backupAndOverwrite(cli *cli, edited []string, sourceRoot, destRoot string) error { |
| 258 | backupRoot := filepath.Join(destRoot, "back_up") |
| 259 | |
| 260 | // Remove existing backup folder if it exists. |
| 261 | if _, err := os.Stat(backupRoot); err == nil { |
| 262 | if err := os.RemoveAll(backupRoot); err != nil { |
| 263 | return fmt.Errorf("failed to clear existing backup folder: %w", err) |
| 264 | } |
| 265 | } |
| 266 | |
| 267 | // Create a fresh backup folder. |
| 268 | if err := os.MkdirAll(backupRoot, 0755); err != nil { |
| 269 | return fmt.Errorf("failed to create backup directory: %w", err) |
| 270 | } |
| 271 | |
| 272 | for _, relPath := range edited { |
| 273 | destFile := filepath.Join(destRoot, relPath) |
| 274 | backupFile := filepath.Join(backupRoot, relPath) |
| 275 | sourceFile := filepath.Join(sourceRoot, relPath) |
| 276 | |
| 277 | if err := os.MkdirAll(filepath.Dir(backupFile), 0755); err != nil { |
| 278 | cli.renderer.Warnf("Failed to create backup directory for %s: %v", relPath, err) |
| 279 | continue |
| 280 | } |
| 281 | |
| 282 | if err := copyFile(destFile, backupFile); err != nil { |
| 283 | cli.renderer.Warnf("Failed to backup file %s: %v", relPath, err) |
| 284 | continue |
| 285 | } |
| 286 | |
| 287 | if err := copyFile(sourceFile, destFile); err != nil { |
| 288 | cli.renderer.Errorf("Failed to overwrite file %s: %v", relPath, err) |
| 289 | continue |
| 290 | } |
| 291 | |
| 292 | cli.renderer.Infof("Overwritten: %s", relPath) |
| 293 | } |
| 294 | return nil |
| 295 | } |
| 296 | |
| 297 | // processDirectories processes files in all base directories relative to chosenTemplate. |
| 298 | func processDirectories(cli *cli, baseDirs []string, sourceRoot, destRoot string) (missing, edited []string, err error) { |
no test coverage detected