77import threading
88import requests
99import logging
10+ import shutil
1011import ctypes
1112import update
1213import index
1314import json
15+ import glob
16+ import time
1417import sys
1518import os
1619import re
@@ -26,8 +29,31 @@ def __init__(self, reporter, root_path, server, current, target):
2629 self .current = current
2730 self .target = target
2831
32+ def create_backup (self , backup_paths ):
33+ files = list ()
34+ for rel_glob in backup_paths :
35+ path_glob = os .path .join (self .root_path , rel_glob )
36+ for path in glob .glob (path_glob ):
37+ if not os .path .isfile (path ):
38+ continue
39+ rel = os .path .relpath (path , self .root_path )
40+ files .append ((path , rel ))
41+ if not files :
42+ return
43+ backup = os .path .join ('backups' , time .strftime ('%Y-%m-%d_%H-%M-%S' ))
44+ self .reporter .logger .info ('Backup folder: %s' % backup )
45+ for (path , rel ), report in self .reporter .task_it ('Backing up files...' , files ):
46+ report (rel )
47+ dest = os .path .join (backup , rel )
48+ os .makedirs (os .path .dirname (dest ), exist_ok = True )
49+ shutil .copy (path , dest )
50+ self .reporter .logger .info ('Saved: %s' % rel )
51+
2952 def run (self ):
53+ backup_paths = self .server .get_backup_paths (self .current )
3054 try :
55+ if backup_paths :
56+ self .create_backup (backup_paths )
3157 current = self .server .fetch (self .current , self .reporter )
3258 target = self .server .fetch (self .target , self .reporter )
3359 update .perform_update (self .root_path , current , target , server .get_root (self .target ), self .reporter )
0 commit comments