[PATCH 1 of 2] blackbox: prevent failed I/O from causing hg to abort
Bryan O'Sullivan
bos at serpentine.com
Tue Mar 19 18:00:37 CDT 2013
# HG changeset patch
# User Bryan O'Sullivan <bryano at fb.com>
# Date 1363734026 25200
# Node ID 9a44c44337c701d6212454b993caa5f778254f56
# Parent de0601436fb6156c173abc2d7a6099f0c0b6b7cb
blackbox: prevent failed I/O from causing hg to abort
Instead, we simply print a warning message if opening the blackbox log
file fails, or if writing to it fails.
diff --git a/hgext/blackbox.py b/hgext/blackbox.py
--- a/hgext/blackbox.py
+++ b/hgext/blackbox.py
@@ -57,11 +57,20 @@ def wrapui(ui):
date = util.datestr(None, '%Y/%m/%d %H:%M:%S')
user = getpass.getuser()
formattedmsg = msg[0] % msg[1:]
- blackbox.write('%s %s> %s' % (date, user, formattedmsg))
+ try:
+ blackbox.write('%s %s> %s' % (date, user, formattedmsg))
+ except IOError, err:
+ self.warn(_('warning: cannot write to blackbox.log: %s\n') %
+ err.strerror)
lastblackbox = blackbox
def setrepo(self, repo):
- self._blackbox = repo.opener('blackbox.log', 'a')
+ try:
+ self._blackbox = repo.opener('blackbox.log', 'a')
+ except IOError, err:
+ self.warn(_('warning: cannot write to blackbox.log: %s\n') %
+ err.strerror)
+ self._blackbox = None
ui.__class__ = blackboxui
diff --git a/tests/test-blackbox.t b/tests/test-blackbox.t
--- a/tests/test-blackbox.t
+++ b/tests/test-blackbox.t
@@ -61,6 +61,30 @@ clone, commit, pull
1970/01/01 00:00:00 bob> 1 incoming changes - new heads: d02f48003e62
1970/01/01 00:00:00 bob> pull exited None after * seconds (glob)
+we must not cause a failure if we cannot write to the log
+
+ $ hg rollback
+ repository tip rolled back to revision 1 (undo pull)
+ $ chmod 000 .hg/blackbox.log
+ $ hg pull
+ warning: cannot write to blackbox.log: Permission denied
+ pulling from $TESTTMP/blackboxtest
+ searching for changes
+ adding changesets
+ adding manifests
+ adding file changes
+ added 1 changesets with 1 changes to 1 files
+ (run 'hg update' to get a working copy)
+
+a failure reading from the log is fine
+
+ $ hg blackbox -l 3
+ warning: cannot write to blackbox.log: Permission denied
+ abort: Permission denied: $TESTTMP/blackboxtest2/.hg/blackbox.log
+ [255]
+
+ $ chmod 600 .hg/blackbox.log
+
backup bundles get logged
$ touch d
More information about the Mercurial-devel
mailing list