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 |