~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/remotebranch.py

  • Committer: Martin Pool
  • Date: 2005-05-09 08:27:49 UTC
  • Revision ID: mbp@sourcefrog.net-20050509082749-22b1a6f4af329f7b
- bzr log and bzr root now accept an http URL
- new RemoteBranch.relpath()
- new find_branch factory method

Show diffs side-by-side

added added

removed removed

Lines of Context:
67
67
            raise BzrError("remote fetch failed: %r: %s" % (url, e))
68
68
 
69
69
 
 
70
 
 
71
def _find_remote_root(url):
 
72
    """Return the prefix URL that corresponds to the branch root."""
 
73
    orig_url = url
 
74
    while True:
 
75
        try:
 
76
            ff = get_url(url + '/.bzr/branch-format')
 
77
            ff.close()
 
78
            return url
 
79
        except urllib.URLError:
 
80
            pass
 
81
 
 
82
        try:
 
83
            idx = url.rindex('/')
 
84
        except ValueError:
 
85
            raise BzrError('no branch root found for URL %s' % orig_url)
 
86
 
 
87
        url = url[:idx]        
 
88
        
 
89
 
 
90
 
70
91
class RemoteBranch(Branch):
71
 
    def __init__(self, baseurl):
 
92
    def __init__(self, baseurl, find_root=False, lock_mode='r'):
72
93
        """Create new proxy for a remote branch."""
 
94
        if lock_mode not in ('', 'r'):
 
95
            raise BzrError('lock mode %r is not supported for remote branches'
 
96
                           % lock_mode)
 
97
        
73
98
        self.baseurl = baseurl
74
99
        self._check_format()
75
100
 
85
110
    def _need_writelock(self):
86
111
        raise BzrError("cannot get write lock on HTTP remote branch")
87
112
 
 
113
    def relpath(self, path):
 
114
        if not path.startswith(self.baseurl):
 
115
            raise BzrError('path %r is not under base URL %r'
 
116
                           % (path, self.baseurl))
 
117
        pl = len(self.baseurl)
 
118
        return path[pl:].lstrip('/')
 
119
 
88
120
    def get_revision(self, revision_id):
89
121
        from revision import Revision
90
122
        revf = get_url(self.baseurl + '/.bzr/revision-store/' + revision_id,