# HG changeset patch # User Bryan O'Sullivan # Date 1363812005 25200 # Node ID ed39a8f94e957455ae49faad040fe35154a36dba # Parent 136516cd3d6902aaa2edc9befc65763c56a6dbfc 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 -r 136516cd3d69 -r ed39a8f94e95 hgext/blackbox.py --- a/hgext/blackbox.py Tue Mar 19 16:19:45 2013 -0700 +++ b/hgext/blackbox.py Wed Mar 20 13:40:05 2013 -0700 @@ -57,11 +57,20 @@ 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.debug('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.debug('warning: cannot write to blackbox.log: %s\n' % + err.strerror) + self._blackbox = None ui.__class__ = blackboxui diff -r 136516cd3d69 -r ed39a8f94e95 tests/test-blackbox.t --- a/tests/test-blackbox.t Tue Mar 19 16:19:45 2013 -0700 +++ b/tests/test-blackbox.t Wed Mar 20 13:40:05 2013 -0700 @@ -61,6 +61,48 @@ 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 --debug incoming + warning: cannot write to blackbox.log: Permission denied + comparing with $TESTTMP/blackboxtest + query 1; heads + searching for changes + all local heads known remotely + changeset: 2:d02f48003e62c24e2659d97d30f2a83abe5d5d51 + tag: tip + phase: draft + parent: 1:6563da9dcf87b1949716e38ff3e3dfaa3198eb06 + parent: -1:0000000000000000000000000000000000000000 + manifest: 2:ab9d46b053ebf45b7996f2922b9893ff4b63d892 + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + files+: c + extra: branch=default + description: + c + + + $ hg pull + 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 + abort: Permission denied: $TESTTMP/blackboxtest2/.hg/blackbox.log + [255] + + $ chmod 600 .hg/blackbox.log + backup bundles get logged $ touch d