diff --git a/terminatorlib/config.py b/terminatorlib/config.py index 2e555467..97583570 100644 --- a/terminatorlib/config.py +++ b/terminatorlib/config.py @@ -713,22 +713,55 @@ class ConfigBase(Borg): return filename def save_config_with_suffix(self, suffix): - filename = self.get_config_filename() - #save the current config, to revert any changes make in preferences - cur_loaded_file = filename + suffix - shutil.copy2(filename, cur_loaded_file) + try: + filename = self.get_config_filename() + + #save the current config, to revert any changes make in preferences + #save the current config to config_dir path which is at least writable + cfg_filename = os.path.join(get_config_dir(), 'config') + cur_loaded_file = cfg_filename + suffix + + if os.path.exists(filename) and cur_loaded_file: + dbg('copy file:%s to' \ + ' file:%s' % (filename, cur_loaded_file)) + shutil.copy2(filename, cur_loaded_file) + elif cur_loaded_file: + open(cur_loaded_file, 'a').close() + else: + err('ConfigBase:: Unable to get filename to save') + except Exception as ex: + err('ConfigBase::save_config_with_suffix' \ + ' Unable to save config: %s' % ex) def restore_config_with_suffix(self, suffix): - filename = self.get_config_filename() - cur_loaded_file = filename + suffix - dbg("restoring from file:%s to file:%s" % (cur_loaded_file, filename)) - shutil.copy2(cur_loaded_file, filename) + try: + filename = self.get_config_filename() + + cfg_filename = os.path.join(get_config_dir(), 'config') + cur_loaded_file = cfg_filename + suffix + if os.path.exists(cur_loaded_file): + if not os.access(filename, os.W_OK): + dbg('path:%s not writable' \ + ' restoring to path:%s' % (filename,cfg_filename)) + filename = cfg_filename + + dbg('restore from file:%s to file:%s' + % (cur_loaded_file, filename)) + shutil.copy2(cur_loaded_file, filename) + except Exception as ex: + err('ConfigBase::restore_config_with_suffix' \ + ' Unable to restore config: %s' % ex) def remove_config_with_suffix(self, suffix): - filename = self.get_config_filename() - cur_loaded_file = filename + suffix - if os.path.exists(cur_loaded_file): - os.remove(cur_loaded_file) + try: + cfg_filename = os.path.join(get_config_dir(), 'config') + cur_loaded_file = cfg_filename + suffix + if os.path.exists(cur_loaded_file): + dbg('remove file:%s' % (cur_loaded_file)) + os.remove(cur_loaded_file) + except Exception as ex: + err('ConfigBase::remove_config_with_suffix' \ + ' Unable to remove config: %s' % ex) def reload(self): """Force a reload of the base config""" @@ -795,7 +828,8 @@ class ConfigBase(Borg): open(filename, 'a').close() backup_file = filename + '~' - shutil.copy2(filename, backup_file) + if os.path.exists(filename): + shutil.copy2(filename, backup_file) with open(filename, 'wb') as fh: parser.write(fh)