~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/remotebranch.py

  • Committer: Martin Pool
  • Date: 2005-07-18 14:28:13 UTC
  • Revision ID: mbp@sourcefrog.net-20050718142813-253ec02b9636bd98
- add stubbed-out test for clashing replace and delete

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
30
29
import urllib2
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
 
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
 
48
41
 
49
42
if ENABLE_URLGRABBER:
50
 
    import util.urlgrabber
51
 
    import util.urlgrabber.keepalive
52
 
    util.urlgrabber.keepalive.DEBUG = 0
 
43
    import urlgrabber
 
44
    import urlgrabber.keepalive
 
45
    urlgrabber.keepalive.DEBUG = 0
53
46
    def get_url(path, compressed=False):
54
47
        try:
55
48
            url = path
56
49
            if compressed:
57
50
                url += '.gz'
58
51
            mutter("grab url %s" % url)
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)
 
52
            url_f = urlgrabber.urlopen(url, keepalive=1, close_connection=0)
62
53
            if not compressed:
63
54
                return url_f
64
55
            else:
84
75
    orig_url = url
85
76
    while True:
86
77
        try:
87
 
            fmt_url = url + '/.bzr/branch-format'
88
 
            ff = get_url(fmt_url)
 
78
            ff = get_url(url + '/.bzr/branch-format')
 
79
 
89
80
            fmt = ff.read()
90
81
            ff.close()
91
82
 
98
89
        except urllib2.URLError:
99
90
            pass
100
91
 
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, '', '', ''))
 
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]        
112
98
        
113
99
 
114
100
 
159
145
 
160
146
 
161
147
    def get_revision(self, revision_id):
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)
 
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)
167
152
        if r.revision_id != revision_id:
168
153
            raise BzrCheckError('revision stored as {%s} actually contains {%s}'
169
154
                                % (revision_id, r.revision_id))
182
167
        
183
168
    def __getitem__(self, fileid):
184
169
        p = self._path(fileid)
185
 
        try:
186
 
            return get_url(p, compressed=True)
187
 
        except urllib2.URLError:
188
 
            raise KeyError(fileid)
 
170
        return get_url(p, compressed=True)
189
171
    
190
172
 
191
173