Mercurial > public > mercurial-scm > hg-stable
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 |