~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/remotebranch.py

- merge improved merge base selection from aaron
aaron.bentley@utoronto.ca-20050912025534-43d7275dd948e4ad

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
 
27
27
import gzip
28
28
from cStringIO import StringIO
 
29
import os
29
30
import urllib2
30
 
 
31
 
from errors import BzrError, BzrCheckError
32
 
from branch import Branch, BZR_BRANCH_FORMAT
33
 
from trace import mutter
34
 
 
35
 
# velocitynet.com.au transparently proxies connections and thereby
36
 
# breaks keep-alive -- sucks!
37
 
 
38
 
 
39
 
ENABLE_URLGRABBER = True
40
 
 
 
31
import urlparse
 
32
 
 
33
from bzrlib.errors import BzrError, BzrCheckError
 
34
from bzrlib.branch import Branch, BZR_BRANCH_FORMAT
 
35
from bzrlib.trace import mutter
 
36
from bzrlib.xml import serializer_v4
 
37
 
 
38
 
 
39
ENABLE_URLGRABBER = False
 
40
 
 
41
from bzrlib.errors import BzrError, NoSuchRevision
 
42
 
 
43
class GetFailed(BzrError):
 
44
    def __init__(self, url, status):
 
45
        BzrError.__init__(self, "Get %s failed with status %s" % (url, status))
 
46
        self.url = url
 
47
        self.status = status
41
48
 
42
49
if ENABLE_URLGRABBER:
43
 
    import urlgrabber
44
 
    import urlgrabber.keepalive
45
 
    urlgrabber.keepalive.DEBUG = 0
 
50
    import util.urlgrabber
 
51
    import util.urlgrabber.keepalive
 
52
    util.urlgrabber.keepalive.DEBUG = 0
46
53
    def get_url(path, compressed=False):
47
54
        try:
48
55
            url = path
49
56
            if compressed:
50
57
                url += '.gz'
51
58
            mutter("grab url %s" % url)
52
 
            url_f = urlgrabber.urlopen(url, keepalive=1, close_connection=0)
 
59
            url_f = util.urlgrabber.urlopen(url, keepalive=1, close_connection=0)
 
60
            if url_f.status != 200:
 
61
                raise GetFailed(url, url_f.status)
53
62
            if not compressed:
54
63
                return url_f
55
64
            else:
75
84
    orig_url = url
76
85
    while True:
77
86
        try:
78
 
            ff = get_url(url + '/.bzr/branch-format')
79
 
 
 
87
            fmt_url = url + '/.bzr/branch-format'
 
88
            ff = get_url(fmt_url)
80
89
            fmt = ff.read()
81
90
            ff.close()
82
91
 
89
98
        except urllib2.URLError:
90
99
            pass
91
100
 
92
 
        try:
93
 
            idx = url.rindex('/')
94
 
        except ValueError:
95
 
            raise BzrError('no branch root found for URL %s' % orig_url)
96
 
 
97
 
        url = url[:idx]        
 
101
        scheme, host, path = list(urlparse.urlparse(url))[:3]
 
102
        # discard params, query, fragment
 
103
        
 
104
        # strip off one component of the path component
 
105
        idx = path.rfind('/')
 
106
        if idx == -1 or path == '/':
 
107
            raise BzrError('no branch root found for URL %s'
 
108
                           ' or enclosing directories'
 
109
                           % orig_url)
 
110
        path = path[:idx]
 
111
        url = urlparse.urlunparse((scheme, host, path, '', '', ''))
98
112
        
99
113
 
100
114
 
145
159
 
146
160
 
147
161
    def get_revision(self, revision_id):
148
 
        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)
 
162
        try:
 
163
            revf = self.revision_store[revision_id]
 
164
        except KeyError:
 
165
            raise NoSuchRevision(self, revision_id)
 
166
        r = serializer_v4.read_revision(revf)
152
167
        if r.revision_id != revision_id:
153
168
            raise BzrCheckError('revision stored as {%s} actually contains {%s}'
154
169
                                % (revision_id, r.revision_id))
167
182
        
168
183
    def __getitem__(self, fileid):
169
184
        p = self._path(fileid)
170
 
        return get_url(p, compressed=True)
 
185
        try:
 
186
            return get_url(p, compressed=True)
 
187
        except:
 
188
            raise KeyError(fileid)
171
189
    
172
190
 
173
191