|
|
@ -94,7 +94,7 @@ class Updater(threading.Thread):
|
|
|
|
return False
|
|
|
|
return False
|
|
|
|
self.status = 4
|
|
|
|
self.status = 4
|
|
|
|
log.debug(u'Replacing files')
|
|
|
|
log.debug(u'Replacing files')
|
|
|
|
self.update_source(foldername, constants.BASE_DIR)
|
|
|
|
if self.update_source(foldername, constants.BASE_DIR):
|
|
|
|
self.status = 6
|
|
|
|
self.status = 6
|
|
|
|
log.debug(u'Preparing restart of server')
|
|
|
|
log.debug(u'Preparing restart of server')
|
|
|
|
time.sleep(2)
|
|
|
|
time.sleep(2)
|
|
|
@ -102,6 +102,9 @@ class Updater(threading.Thread):
|
|
|
|
self.status = 7
|
|
|
|
self.status = 7
|
|
|
|
time.sleep(2)
|
|
|
|
time.sleep(2)
|
|
|
|
return True
|
|
|
|
return True
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
self.status = 13
|
|
|
|
|
|
|
|
|
|
|
|
except requests.exceptions.HTTPError as ex:
|
|
|
|
except requests.exceptions.HTTPError as ex:
|
|
|
|
log.error(u'HTTP Error %s', ex)
|
|
|
|
log.error(u'HTTP Error %s', ex)
|
|
|
|
self.status = 8
|
|
|
|
self.status = 8
|
|
|
@ -181,6 +184,28 @@ class Updater(threading.Thread):
|
|
|
|
rf.append(item)
|
|
|
|
rf.append(item)
|
|
|
|
return rf
|
|
|
|
return rf
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
|
|
|
|
def check_permissions(cls, root_src_dir, root_dst_dir):
|
|
|
|
|
|
|
|
access = True
|
|
|
|
|
|
|
|
remove_path = len(root_src_dir) + 1
|
|
|
|
|
|
|
|
for src_dir, __, files in os.walk(root_src_dir):
|
|
|
|
|
|
|
|
root_dir = os.path.join(root_dst_dir, src_dir[remove_path:])
|
|
|
|
|
|
|
|
# Skip non existing folders on check
|
|
|
|
|
|
|
|
if not os.path.isdir(root_dir): # root_dir.lstrip(os.sep).startswith('.') or
|
|
|
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
if not os.access(root_dir, os.R_OK|os.W_OK):
|
|
|
|
|
|
|
|
log.debug("Missing permissions for {}".format(root_dir))
|
|
|
|
|
|
|
|
access = False
|
|
|
|
|
|
|
|
for file_ in files:
|
|
|
|
|
|
|
|
curr_file = os.path.join(root_dir, file_)
|
|
|
|
|
|
|
|
# Skip non existing files on check
|
|
|
|
|
|
|
|
if not os.path.isfile(curr_file): # or curr_file.startswith('.'):
|
|
|
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
if not os.access(curr_file, os.R_OK|os.W_OK):
|
|
|
|
|
|
|
|
log.debug("Missing permissions for {}".format(curr_file))
|
|
|
|
|
|
|
|
access = False
|
|
|
|
|
|
|
|
return access
|
|
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
@classmethod
|
|
|
|
def moveallfiles(cls, root_src_dir, root_dst_dir):
|
|
|
|
def moveallfiles(cls, root_src_dir, root_dst_dir):
|
|
|
|
new_permissions = os.stat(root_dst_dir)
|
|
|
|
new_permissions = os.stat(root_dst_dir)
|
|
|
@ -269,6 +294,7 @@ class Updater(threading.Thread):
|
|
|
|
|
|
|
|
|
|
|
|
remove_items = self.reduce_dirs(rf, new_list)
|
|
|
|
remove_items = self.reduce_dirs(rf, new_list)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if self.check_permissions(source, destination):
|
|
|
|
self.moveallfiles(source, destination)
|
|
|
|
self.moveallfiles(source, destination)
|
|
|
|
|
|
|
|
|
|
|
|
for item in remove_items:
|
|
|
|
for item in remove_items:
|
|
|
@ -283,6 +309,10 @@ class Updater(threading.Thread):
|
|
|
|
except OSError:
|
|
|
|
except OSError:
|
|
|
|
log.debug("Could not remove: %s", item_path)
|
|
|
|
log.debug("Could not remove: %s", item_path)
|
|
|
|
shutil.rmtree(source, ignore_errors=True)
|
|
|
|
shutil.rmtree(source, ignore_errors=True)
|
|
|
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
log.debug("Permissions missing for update")
|
|
|
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
@staticmethod
|
|
|
|
def is_venv():
|
|
|
|
def is_venv():
|
|
|
@ -572,5 +602,5 @@ class Updater(threading.Thread):
|
|
|
|
status['message'] = _(u'Timeout while establishing connection')
|
|
|
|
status['message'] = _(u'Timeout while establishing connection')
|
|
|
|
except (requests.exceptions.RequestException, ValueError):
|
|
|
|
except (requests.exceptions.RequestException, ValueError):
|
|
|
|
status['message'] = _(u'General error')
|
|
|
|
status['message'] = _(u'General error')
|
|
|
|
log.debug('Updater status: %s', status['message'])
|
|
|
|
log.debug('Updater status: {}'.format(status['message'] or "OK"))
|
|
|
|
return status, commit
|
|
|
|
return status, commit
|
|
|
|