52 lines
1.3 KiB
Python
52 lines
1.3 KiB
Python
import shutil
|
|
import os
|
|
|
|
def MapToBackupName(origin_path):
|
|
|
|
backup_path = "{0}.build_backup".format(origin_path)
|
|
return backup_path
|
|
|
|
def FetchAbsOriginBackupInfo(base_dir, rel_path_to_origin_files):
|
|
|
|
abs_path_to_origin_files = [os.path.join(base_dir, rel) for rel in rel_path_to_origin_files]
|
|
abs_origin_backup_infos = [{'origin': p, 'backup': MapToBackupName(p)} for p in abs_path_to_origin_files]
|
|
|
|
return abs_origin_backup_infos
|
|
|
|
def CreateOrRestoreFromBackup(base_dir, relative_path_to_files):
|
|
|
|
abs_origin_backup_infos = FetchAbsOriginBackupInfo(base_dir, relative_path_to_files)
|
|
|
|
for aobi in abs_origin_backup_infos:
|
|
|
|
abs_original = aobi['origin']
|
|
abs_backup = aobi['backup']
|
|
|
|
if os.path.exists(abs_backup):
|
|
# restore from backup
|
|
shutil.copyfile(abs_backup, abs_original)
|
|
else:
|
|
# create backup
|
|
shutil.copyfile(abs_original, abs_backup)
|
|
|
|
return None
|
|
|
|
def DeleteBackups(base_dir, relative_path_to_files):
|
|
|
|
abs_origin_backup_infos = FetchAbsOriginBackupInfo(base_dir, relative_path_to_files)
|
|
|
|
for aobi in abs_origin_backup_infos:
|
|
|
|
abs_backup = aobi['backup']
|
|
|
|
if os.path.exists(abs_backup):
|
|
os.remove(abs_backup)
|
|
|
|
return None
|
|
|
|
def ResetDirectory(base_dir, relative_path_to_files):
|
|
|
|
CreateOrRestoreFromBackup(base_dir, relative_path_to_files)
|
|
DeleteBackups(base_dir, relative_path_to_files)
|
|
|
|
return None |