From 38b2510ecb4416d2b25b91d9a560fb24be622b4c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 16 Dec 2017 08:27:36 +0530 Subject: [PATCH] Content server: Fix using the Clear logs button preventing the server from restarting until calibre itself is restarted. Fixes #1738433 [Can't start Content Server after Clear Logs](https://bugs.launchpad.net/calibre/+bug/1738433) --- src/calibre/gui2/preferences/server.py | 16 ++++++++++------ src/calibre/srv/utils.py | 16 ++++++++++++++++ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/calibre/gui2/preferences/server.py b/src/calibre/gui2/preferences/server.py index 92815cbe89..e2a5e0d460 100644 --- a/src/calibre/gui2/preferences/server.py +++ b/src/calibre/gui2/preferences/server.py @@ -1065,12 +1065,16 @@ class ConfigWidget(ConfigWidgetBase): if getattr(self.server, 'is_running', False): return error_dialog(d, _('Server running'), _( 'Cannot clear logs while the server is running. First stop the server.'), show=True) - for x in (log_error_file, log_access_file): - try: - os.remove(x) - except EnvironmentError as err: - if err.errno != errno.ENOENT: - raise + if self.server: + self.server.access_log.clear() + self.server.log.clear() + else: + for x in (log_error_file, log_access_file): + try: + os.remove(x) + except EnvironmentError as err: + if err.errno != errno.ENOENT: + raise el.setPlainText(''), al.setPlainText('') b.clicked.connect(clear_logs) diff --git a/src/calibre/srv/utils.py b/src/calibre/srv/utils.py index 9b5582bd6a..9af4b17e58 100644 --- a/src/calibre/srv/utils.py +++ b/src/calibre/srv/utils.py @@ -376,6 +376,22 @@ class RotatingStream(object): self.rename(self.filename, '%s.%d' % (self.filename, 1)) self.set_output() + def clear(self): + if self.filename in ('/dev/stdout', '/dev/stderr'): + return + self.stream.close() + failed = {} + try: + os.remove(self.filename) + except EnvironmentError as e: + failed[self.filename] = e + import glob + for f in glob.glob(self.filename + '.*'): + try: + os.remove(f) + except EnvironmentError as e: + failed[f] = e + class RotatingLog(ServerLog):