Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| """ | |
| Archive Migration Files Script | |
| This script moves completed migration files to the archive directory | |
| to clean up the main codebase while preserving historical context. | |
| Usage: | |
| python scripts/archive_migration_files.py [--dry-run] | |
| Options: | |
| --dry-run Show what would be moved without actually moving files | |
| """ | |
| import argparse | |
| from pathlib import Path | |
| import shutil | |
| class MigrationArchiver: | |
| """Handles archiving of completed migration files.""" | |
| def __init__(self, dry_run=False): | |
| self.dry_run = dry_run | |
| self.root_dir = Path.cwd() | |
| self.archive_dir = self.root_dir / "archive" | |
| self.migration_files = [ | |
| "migrate_user_authentication.py", | |
| "rollback_user_authentication.py", | |
| "validate_user_migration.py" | |
| ] | |
| self.migration_dirs = [ | |
| "migration_backups" | |
| ] | |
| def create_archive_structure(self): | |
| """Create the archive directory structure.""" | |
| if not self.dry_run: | |
| self.archive_dir.mkdir(exist_ok=True) | |
| print(f"✓ Created archive directory: {self.archive_dir}") | |
| else: | |
| print(f"[DRY RUN] Would create archive directory: {self.archive_dir}") | |
| def archive_file(self, source_path, relative_path=None): | |
| """Archive a single file to the archive directory.""" | |
| source = Path(source_path) | |
| if not source.exists(): | |
| print(f"⚠ File not found: {source}") | |
| return False | |
| if relative_path: | |
| dest = self.archive_dir / relative_path | |
| else: | |
| dest = self.archive_dir / source.name | |
| if self.dry_run: | |
| print(f"[DRY RUN] Would move: {source} -> {dest}") | |
| return True | |
| # Create destination directory if needed | |
| dest.parent.mkdir(parents=True, exist_ok=True) | |
| try: | |
| shutil.move(str(source), str(dest)) | |
| print(f"✓ Archived: {source} -> {dest}") | |
| return True | |
| except Exception as e: | |
| print(f"✗ Failed to archive {source}: {e}") | |
| return False | |
| def archive_directory(self, source_path, relative_path=None): | |
| """Archive an entire directory to the archive directory.""" | |
| source = Path(source_path) | |
| if not source.exists(): | |
| print(f"⚠ Directory not found: {source}") | |
| return False | |
| if relative_path: | |
| dest = self.archive_dir / relative_path | |
| else: | |
| dest = self.archive_dir / source.name | |
| if self.dry_run: | |
| print(f"[DRY RUN] Would move directory: {source} -> {dest}") | |
| return True | |
| try: | |
| shutil.move(str(source), str(dest)) | |
| print(f"✓ Archived directory: {source} -> {dest}") | |
| return True | |
| except Exception as e: | |
| print(f"✗ Failed to archive directory {source}: {e}") | |
| return False | |
| def run_archival(self): | |
| """Execute the archival process.""" | |
| print("Starting migration file archival process...") | |
| print(f"Archive directory: {self.archive_dir}") | |
| print(f"Dry run mode: {self.dry_run}") | |
| print("-" * 50) | |
| # Create archive structure | |
| self.create_archive_structure() | |
| # Archive individual migration files | |
| archived_files = 0 | |
| for file_name in self.migration_files: | |
| if self.archive_file(file_name): | |
| archived_files += 1 | |
| # Archive migration directories | |
| archived_dirs = 0 | |
| for dir_name in self.migration_dirs: | |
| if self.archive_directory(dir_name): | |
| archived_dirs += 1 | |
| print("-" * 50) | |
| print(f"Archival complete!") | |
| print(f"Files archived: {archived_files}/{len(self.migration_files)}") | |
| print(f"Directories archived: {archived_dirs}/{len(self.migration_dirs)}") | |
| if self.dry_run: | |
| print("\nThis was a dry run. Use without --dry-run to actually move files.") | |
| return archived_files + archived_dirs > 0 | |
| def main(): | |
| """Main entry point for the archival script.""" | |
| parser = argparse.ArgumentParser( | |
| description="Archive completed migration files to clean up codebase" | |
| ) | |
| parser.add_argument( | |
| "--dry-run", | |
| action="store_true", | |
| help="Show what would be moved without actually moving files" | |
| ) | |
| args = parser.parse_args() | |
| archiver = MigrationArchiver(dry_run=args.dry_run) | |
| success = archiver.run_archival() | |
| if not success and not args.dry_run: | |
| print("⚠ Some files could not be archived. Check the output above.") | |
| return 1 | |
| return 0 | |
| if __name__ == "__main__": | |
| exit(main()) |