blackbox: do not prevent 'chg init' from working
Previously, blackbox always appends to blackbox.log and creates the
directory for that file on demand. That could be an issue if:
1. chg starts from `$REPO` directory, so `ui._bbrepo` is set.
2. `rm -rf $REPO`.
3. `chg init $REPO`, blackbox writes something and `init` will fail
because `$REPO` directory is non-empty.
This patch fixes that by verifying whether vfs exists before re-using it.
Differential Revision: https://phab.mercurial-scm.org/D768
--- a/hgext/blackbox.py Mon Sep 11 20:07:41 2017 -0400
+++ b/hgext/blackbox.py Thu Sep 21 11:03:37 2017 -0700
@@ -77,9 +77,13 @@
class blackboxui(ui.__class__):
@property
def _bbvfs(self):
+ vfs = None
repo = getattr(self, '_bbrepo', None)
if repo:
- return repo.vfs
+ vfs = repo.vfs
+ if not vfs.isdir('.'):
+ vfs = None
+ return vfs
@util.propertycache
def track(self):
@@ -136,6 +140,10 @@
if not ui:
return
+ vfs = ui._bbvfs
+ if not vfs:
+ return
+
repo = getattr(ui, '_bbrepo', None)
if not lastui or repo:
lastui = ui
--- a/tests/test-blackbox.t Mon Sep 11 20:07:41 2017 -0400
+++ b/tests/test-blackbox.t Thu Sep 21 11:03:37 2017 -0700
@@ -293,6 +293,13 @@
$ cd ..
+With chg, blackbox should not create the log file if the repo is gone
+
+ $ hg init repo1
+ $ hg --config extensions.a=! -R repo1 log
+ $ rm -rf $TESTTMP/repo1
+ $ hg --config extensions.a=! init repo1
+
#endif
blackbox should work if repo.ui.log is not called (issue5518)