[PATCH 1 of 7] scmutil: factor out common logic of delayclosedfile to reuse it
FUJIWARA Katsunori
foozy at lares.dti.ne.jp
Fri Sep 16 20:51:05 UTC 2016
# HG changeset patch
# User FUJIWARA Katsunori <foozy at lares.dti.ne.jp>
# Date 1474057494 -32400
# Sat Sep 17 05:24:54 2016 +0900
# Node ID 3a19fe2748f423c2cacf13cbc3f37a09e3e60081
# Parent 285a8c3e53f2183438f0cdbc238e4ab851d0d110
scmutil: factor out common logic of delayclosedfile to reuse it
This is a preparation for the subsequent patch, which adds another
proxy class for a file object.
diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py
--- a/mercurial/scmutil.py
+++ b/mercurial/scmutil.py
@@ -1300,15 +1300,13 @@ def gddeltaconfig(ui):
# experimental config: format.generaldelta
return ui.configbool('format', 'generaldelta', False)
-class delayclosedfile(object):
- """Proxy for a file object whose close is delayed.
+class closewrapbase(object):
+ """Base class of wrapper, which hooks closing
Do not instantiate outside of the vfs layer.
"""
-
- def __init__(self, fh, closer):
+ def __init__(self, fh):
object.__setattr__(self, '_origfh', fh)
- object.__setattr__(self, '_closer', closer)
def __getattr__(self, attr):
return getattr(self._origfh, attr)
@@ -1323,6 +1321,21 @@ class delayclosedfile(object):
return self._origfh.__enter__()
def __exit__(self, exc_type, exc_value, exc_tb):
+ raise NotImplementedError('attempted instantiating ' + str(type(self)))
+
+ def close(self):
+ raise NotImplementedError('attempted instantiating ' + str(type(self)))
+
+class delayclosedfile(closewrapbase):
+ """Proxy for a file object whose close is delayed.
+
+ Do not instantiate outside of the vfs layer.
+ """
+ def __init__(self, fh, closer):
+ super(delayclosedfile, self).__init__(fh)
+ object.__setattr__(self, '_closer', closer)
+
+ def __exit__(self, exc_type, exc_value, exc_tb):
self._closer.close(self._origfh)
def close(self):
More information about the Mercurial-devel
mailing list