diff --git a/mercurial/scmutil.py b/mercurial/scmutil.py index 041a77a223ca979a7531f88037b1555838d474cf_bWVyY3VyaWFsL3NjbXV0aWwucHk=..0c40e64d6154bedbfdf09d7ea8a7dba481c1e3f4_bWVyY3VyaWFsL3NjbXV0aWwucHk= 100644 --- a/mercurial/scmutil.py +++ b/mercurial/scmutil.py @@ -1300,8 +1300,8 @@ # 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. """ @@ -1305,6 +1305,5 @@ Do not instantiate outside of the vfs layer. """ - - def __init__(self, fh, closer): + def __init__(self, fh): object.__setattr__(self, '_origfh', fh) @@ -1310,5 +1309,4 @@ object.__setattr__(self, '_origfh', fh) - object.__setattr__(self, '_closer', closer) def __getattr__(self, attr): return getattr(self._origfh, attr) @@ -1323,6 +1321,21 @@ 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):