comparison mercurial/httppeer.py @ 30241:cac4ca036dff stable

httppeer: make __del__ access to self.urlopener more safe Some errors could in some cases show unfortunate scary and confusing warnings from the httppeer delstructors: abort: nodename nor servname provided, or not known Exception AttributeError: "'httpspeer' object has no attribute 'urlopener'" in <bound method httpspeer.__del__ of <mercurial.httppeer.httpspeer object at 0x106e1f5d0>> ignored``` To mute that, take 7b15dd9125b3 to the next level and use getattr in __del__.
author Mads Kiilerich <madski@unity3d.com>
date Mon, 31 Oct 2016 13:43:48 +0100
parents 0c741fd6158a
children e16e234b9ca3
comparison
equal deleted inserted replaced
30240:8237c3359db5 30241:cac4ca036dff
61 61
62 self.urlopener = url.opener(ui, authinfo) 62 self.urlopener = url.opener(ui, authinfo)
63 self.requestbuilder = urlreq.request 63 self.requestbuilder = urlreq.request
64 64
65 def __del__(self): 65 def __del__(self):
66 if self.urlopener: 66 urlopener = getattr(self, 'urlopener', None)
67 for h in self.urlopener.handlers: 67 if urlopener:
68 for h in urlopener.handlers:
68 h.close() 69 h.close()
69 getattr(h, "close_all", lambda : None)() 70 getattr(h, "close_all", lambda : None)()
70 71
71 def url(self): 72 def url(self):
72 return self.path 73 return self.path