mercurial/statichttprepo.py
changeset 6028 6605a03cbf87
parent 5321 639935f2e63a
child 6212 e75aab656f46
equal deleted inserted replaced
6027:cee68264ed92 6028:6605a03cbf87
     7 # This software may be used and distributed according to the terms
     7 # This software may be used and distributed according to the terms
     8 # of the GNU General Public License, incorporated herein by reference.
     8 # of the GNU General Public License, incorporated herein by reference.
     9 
     9 
    10 from i18n import _
    10 from i18n import _
    11 import changelog, filelog, httprangereader
    11 import changelog, filelog, httprangereader
    12 import repo, localrepo, manifest, os, urllib, urllib2, util
    12 import repo, localrepo, manifest, util
       
    13 import urllib, urllib2, errno
    13 
    14 
    14 class rangereader(httprangereader.httprangereader):
    15 class rangereader(httprangereader.httprangereader):
    15     def read(self, size=None):
    16     def read(self, size=None):
    16         try:
    17         try:
    17             return httprangereader.httprangereader.read(self, size)
    18             return httprangereader.httprangereader.read(self, size)
    18         except urllib2.HTTPError, inst:
    19         except urllib2.HTTPError, inst:
    19             raise IOError(None, inst)
    20             num = inst.code == 404 and errno.ENOENT or None
       
    21             raise IOError(num, inst)
    20         except urllib2.URLError, inst:
    22         except urllib2.URLError, inst:
    21             raise IOError(None, inst.reason[1])
    23             raise IOError(None, inst.reason[1])
    22 
    24 
    23 def opener(base):
    25 def opener(base):
    24     """return a function that opens files over http"""
    26     """return a function that opens files over http"""
    33         self._url = path
    35         self._url = path
    34         self.ui = ui
    36         self.ui = ui
    35 
    37 
    36         self.path = path.rstrip('/') + "/.hg"
    38         self.path = path.rstrip('/') + "/.hg"
    37         self.opener = opener(self.path)
    39         self.opener = opener(self.path)
       
    40 
    38         # find requirements
    41         # find requirements
    39         try:
    42         try:
    40             requirements = self.opener("requires").read().splitlines()
    43             requirements = self.opener("requires").read().splitlines()
    41         except IOError:
    44         except IOError, inst:
    42             requirements = []
    45             if inst.errno == errno.ENOENT:
       
    46                 msg = _("'%s' does not appear to be an hg repository") % path
       
    47                 raise repo.RepoError(msg)
       
    48             else:
       
    49                 requirements = []
       
    50 
    43         # check them
    51         # check them
    44         for r in requirements:
    52         for r in requirements:
    45             if r not in self.supported:
    53             if r not in self.supported:
    46                 raise repo.RepoError(_("requirement '%s' not supported") % r)
    54                 raise repo.RepoError(_("requirement '%s' not supported") % r)
    47 
    55