diff --git a/mercurial/httprepo.py b/mercurial/httprepo.py --- a/mercurial/httprepo.py +++ b/mercurial/httprepo.py @@ -28,6 +28,7 @@ class httprepository(wireproto.wirerepos self.path = path self.caps = None self.handler = None + self.urlopener = None u = util.url(path) if u.query or u.fragment: raise util.Abort(_('unsupported URL component: "%s"') % @@ -42,9 +43,10 @@ class httprepository(wireproto.wirerepos self.urlopener = url.opener(ui, authinfo) def __del__(self): - for h in self.urlopener.handlers: - h.close() - getattr(h, "close_all", lambda : None)() + if self.urlopener: + for h in self.urlopener.handlers: + h.close() + getattr(h, "close_all", lambda : None)() def url(self): return self.path diff --git a/tests/test-url-rev.t b/tests/test-url-rev.t --- a/tests/test-url-rev.t +++ b/tests/test-url-rev.t @@ -200,4 +200,8 @@ Pull -u takes us back to branch foo: date: Thu Jan 01 00:00:00 1970 +0000 summary: new head of branch foo +Test handling of invalid urls + $ hg id http://foo/?bar + abort: unsupported URL component: "bar" + [255]