comparison mercurial/scmutil.py @ 29994:0c40e64d6154

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.
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Thu, 22 Sep 2016 21:51:56 +0900
parents 35560189677c
children 57830bd0e787
comparison
equal deleted inserted replaced
29993:041a77a223ca 29994:0c40e64d6154
1298 """helper function to know if incoming delta should be optimised 1298 """helper function to know if incoming delta should be optimised
1299 """ 1299 """
1300 # experimental config: format.generaldelta 1300 # experimental config: format.generaldelta
1301 return ui.configbool('format', 'generaldelta', False) 1301 return ui.configbool('format', 'generaldelta', False)
1302 1302
1303 class delayclosedfile(object): 1303 class closewrapbase(object):
1304 """Proxy for a file object whose close is delayed. 1304 """Base class of wrapper, which hooks closing
1305 1305
1306 Do not instantiate outside of the vfs layer. 1306 Do not instantiate outside of the vfs layer.
1307 """ 1307 """
1308 1308 def __init__(self, fh):
1309 def __init__(self, fh, closer):
1310 object.__setattr__(self, '_origfh', fh) 1309 object.__setattr__(self, '_origfh', fh)
1311 object.__setattr__(self, '_closer', closer)
1312 1310
1313 def __getattr__(self, attr): 1311 def __getattr__(self, attr):
1314 return getattr(self._origfh, attr) 1312 return getattr(self._origfh, attr)
1315 1313
1316 def __setattr__(self, attr, value): 1314 def __setattr__(self, attr, value):
1319 def __delattr__(self, attr): 1317 def __delattr__(self, attr):
1320 return delattr(self._origfh, attr) 1318 return delattr(self._origfh, attr)
1321 1319
1322 def __enter__(self): 1320 def __enter__(self):
1323 return self._origfh.__enter__() 1321 return self._origfh.__enter__()
1322
1323 def __exit__(self, exc_type, exc_value, exc_tb):
1324 raise NotImplementedError('attempted instantiating ' + str(type(self)))
1325
1326 def close(self):
1327 raise NotImplementedError('attempted instantiating ' + str(type(self)))
1328
1329 class delayclosedfile(closewrapbase):
1330 """Proxy for a file object whose close is delayed.
1331
1332 Do not instantiate outside of the vfs layer.
1333 """
1334 def __init__(self, fh, closer):
1335 super(delayclosedfile, self).__init__(fh)
1336 object.__setattr__(self, '_closer', closer)
1324 1337
1325 def __exit__(self, exc_type, exc_value, exc_tb): 1338 def __exit__(self, exc_type, exc_value, exc_tb):
1326 self._closer.close(self._origfh) 1339 self._closer.close(self._origfh)
1327 1340
1328 def close(self): 1341 def close(self):