~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/remotebranch.py

  • Committer: Martin Pool
  • Date: 2005-09-12 08:45:58 UTC
  • Revision ID: mbp@sourcefrog.net-20050912084558-93fecb4c84386c17
doc

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
from cStringIO import StringIO
29
29
import urllib2
30
30
 
31
 
from errors import BzrError, BzrCheckError
32
 
from branch import Branch, BZR_BRANCH_FORMAT
33
 
from trace import mutter
 
31
from bzrlib.errors import BzrError, BzrCheckError
 
32
from bzrlib.branch import Branch, BZR_BRANCH_FORMAT_5
 
33
from bzrlib.trace import mutter
 
34
from bzrlib.xml5 import serializer_v5
34
35
 
35
36
# velocitynet.com.au transparently proxies connections and thereby
36
37
# breaks keep-alive -- sucks!
37
38
 
38
39
 
39
 
ENABLE_URLGRABBER = True
40
 
 
 
40
ENABLE_URLGRABBER = False
 
41
 
 
42
from bzrlib.errors import BzrError, NoSuchRevision
 
43
 
 
44
class GetFailed(BzrError):
 
45
    def __init__(self, url, status):
 
46
        BzrError.__init__(self, "Get %s failed with status %s" % (url, status))
 
47
        self.url = url
 
48
        self.status = status
41
49
 
42
50
if ENABLE_URLGRABBER:
43
 
    import urlgrabber
44
 
    import urlgrabber.keepalive
45
 
    urlgrabber.keepalive.DEBUG = 0
 
51
    import util.urlgrabber
 
52
    import util.urlgrabber.keepalive
 
53
    util.urlgrabber.keepalive.DEBUG = 0
46
54
    def get_url(path, compressed=False):
47
55
        try:
48
56
            url = path
49
57
            if compressed:
50
58
                url += '.gz'
51
59
            mutter("grab url %s" % url)
52
 
            url_f = urlgrabber.urlopen(url, keepalive=1, close_connection=0)
 
60
            url_f = util.urlgrabber.urlopen(url, keepalive=1, close_connection=0)
 
61
            if url_f.status != 200:
 
62
                raise GetFailed(url, url_f.status)
53
63
            if not compressed:
54
64
                return url_f
55
65
            else:
80
90
            fmt = ff.read()
81
91
            ff.close()
82
92
 
83
 
            fmt = fmt.rstrip('\r\n')
84
 
            if fmt != BZR_BRANCH_FORMAT.rstrip('\r\n'):
 
93
            if fmt != BZR_BRANCH_FORMAT_5:
85
94
                raise BzrError("sorry, branch format %r not supported at url %s"
86
95
                               % (fmt, url))
87
96
            
146
155
 
147
156
    def get_revision(self, revision_id):
148
157
        from bzrlib.revision import Revision
149
 
        from bzrlib.xml import unpack_xml
150
 
        revf = self.revision_store[revision_id]
151
 
        r = unpack_xml(Revision, revf)
 
158
        try:
 
159
            revf = self.revision_store[revision_id]
 
160
        except KeyError:
 
161
            raise NoSuchRevision(self, revision_id)
 
162
        r = serializer_v5.read_revision(revf)
152
163
        if r.revision_id != revision_id:
153
164
            raise BzrCheckError('revision stored as {%s} actually contains {%s}'
154
165
                                % (revision_id, r.revision_id))
167
178
        
168
179
    def __getitem__(self, fileid):
169
180
        p = self._path(fileid)
170
 
        return get_url(p, compressed=True)
 
181
        try:
 
182
            return get_url(p, compressed=True)
 
183
        except:
 
184
            raise KeyError(fileid)
171
185
    
172
186
 
173
187