diff -r 644adf9c20fb -r 03127e580980 mercurial/loggingutil.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mercurial/loggingutil.py Sun Nov 18 18:25:37 2018 +0900 @@ -0,0 +1,59 @@ +# loggingutil.py - utility for logging events +# +# Copyright 2010 Nicolas Dumazet +# Copyright 2013 Facebook, Inc. +# +# This software may be used and distributed according to the terms of the +# GNU General Public License version 2 or any later version. + +from __future__ import absolute_import + +import errno + +from . import ( + pycompat, +) + +def openlogfile(ui, vfs, name, maxfiles=0, maxsize=0): + def rotate(oldpath, newpath): + try: + vfs.unlink(newpath) + except OSError as err: + if err.errno != errno.ENOENT: + ui.debug("warning: cannot remove '%s': %s\n" % + (newpath, err.strerror)) + try: + if newpath: + vfs.rename(oldpath, newpath) + except OSError as err: + if err.errno != errno.ENOENT: + ui.debug("warning: cannot rename '%s' to '%s': %s\n" % + (newpath, oldpath, err.strerror)) + + if maxsize > 0: + try: + st = vfs.stat(name) + except OSError: + pass + else: + if st.st_size >= maxsize: + path = vfs.join(name) + for i in pycompat.xrange(maxfiles - 1, 1, -1): + rotate(oldpath='%s.%d' % (path, i - 1), + newpath='%s.%d' % (path, i)) + rotate(oldpath=path, + newpath=maxfiles > 0 and path + '.1') + return vfs(name, 'a', makeparentdirs=False) + +class proxylogger(object): + """Forward log events to another logger to be set later""" + + def __init__(self): + self.logger = None + + def tracked(self, event): + return self.logger is not None and self.logger.tracked(event) + + def log(self, ui, event, msg, opts): + assert self.logger is not None + self.logger.log(ui, event, msg, opts)