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)

This commit is contained in:
Kovid Goyal 2017-12-16 08:27:36 +05:30
parent 8bb6c46314
commit 38b2510ecb
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 26 additions and 6 deletions

View File

@ -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)

View File

@ -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):