/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.200.1014 by Jelmer Vernooij
Fix tests.
1
# Copyright (C) 2007-2010 Jelmer Vernooij <jelmer@samba.org>
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
0.200.289 by Jelmer Vernooij
Cope with new member variables in RepositoryFormat.
17
from bzrlib import (
0.200.596 by Jelmer Vernooij
Import RemoteGitBranch._get_config().
18
    config,
0.200.707 by Jelmer Vernooij
Add debug routines.
19
    debug,
0.200.586 by Jelmer Vernooij
Fix issues pointed out by pyflakes.
20
    trace,
0.200.333 by Jelmer Vernooij
Support progress reporting when creating index.
21
    ui,
0.200.289 by Jelmer Vernooij
Cope with new member variables in RepositoryFormat.
22
    urlutils,
23
    )
24
from bzrlib.errors import (
25
    BzrError,
0.200.415 by Jelmer Vernooij
make 'bzr pull --revision' work for remote repositories.
26
    InvalidRevisionId,
0.200.289 by Jelmer Vernooij
Cope with new member variables in RepositoryFormat.
27
    NoSuchFile,
0.200.415 by Jelmer Vernooij
make 'bzr pull --revision' work for remote repositories.
28
    NoSuchRevision,
0.200.1137 by Jelmer Vernooij
Support BzrProber.known_formats().
29
    NotBranchError,
0.200.289 by Jelmer Vernooij
Cope with new member variables in RepositoryFormat.
30
    NotLocalUrl,
0.200.1137 by Jelmer Vernooij
Support BzrProber.known_formats().
31
    UninitializableFormat,
0.200.289 by Jelmer Vernooij
Cope with new member variables in RepositoryFormat.
32
    )
0.200.292 by Jelmer Vernooij
Fix formatting.
33
from bzrlib.transport import (
34
    Transport,
35
    )
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
36
0.200.292 by Jelmer Vernooij
Fix formatting.
37
from bzrlib.plugins.git import (
38
    lazy_check_versions,
39
    )
0.200.200 by Jelmer Vernooij
Register lazily where possible.
40
lazy_check_versions()
41
0.200.292 by Jelmer Vernooij
Fix formatting.
42
from bzrlib.plugins.git.branch import (
43
    GitBranch,
0.200.1064 by Jelmer Vernooij
Use common base class for tags.
44
    GitTags,
0.200.292 by Jelmer Vernooij
Fix formatting.
45
    )
0.200.1137 by Jelmer Vernooij
Support BzrProber.known_formats().
46
from bzrlib.plugins.git.dir import (
47
    GitControlDirFormat,
48
    GitDir,
49
    GitLockableFiles,
50
    GitLock,
51
    )
0.200.292 by Jelmer Vernooij
Fix formatting.
52
from bzrlib.plugins.git.errors import (
0.200.319 by Jelmer Vernooij
Print proper error when trying unsupported operations against a git server.
53
    GitSmartRemoteNotSupported,
0.200.292 by Jelmer Vernooij
Fix formatting.
54
    NoSuchRef,
55
    )
0.200.415 by Jelmer Vernooij
make 'bzr pull --revision' work for remote repositories.
56
from bzrlib.plugins.git.mapping import (
57
    mapping_registry,
58
    )
0.200.289 by Jelmer Vernooij
Cope with new member variables in RepositoryFormat.
59
from bzrlib.plugins.git.repository import (
60
    GitRepository,
61
    )
0.200.872 by Jelmer Vernooij
Move refs code to separate module.
62
from bzrlib.plugins.git.refs import (
63
    extract_tags,
64
    branch_name_to_ref,
65
    )
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
66
0.200.289 by Jelmer Vernooij
Cope with new member variables in RepositoryFormat.
67
import dulwich as git
0.200.292 by Jelmer Vernooij
Fix formatting.
68
from dulwich.errors import (
69
    GitProtocolError,
70
    )
0.200.289 by Jelmer Vernooij
Cope with new member variables in RepositoryFormat.
71
from dulwich.pack import (
72
    Pack,
0.200.900 by Jelmer Vernooij
Fix compatibility with newer versions of Dulwich.
73
    ThinPackData,
0.200.289 by Jelmer Vernooij
Cope with new member variables in RepositoryFormat.
74
    )
0.200.167 by Jelmer Vernooij
Implement fetch_objects properly.
75
import os
76
import tempfile
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
77
import urllib
78
import urlparse
0.200.741 by Jelmer Vernooij
Cope with older versions of Python by adding git and git+ssh to the list of known schemes.
79
urlparse.uses_netloc.extend(['git', 'git+ssh'])
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
80
0.200.586 by Jelmer Vernooij
Fix issues pointed out by pyflakes.
81
from dulwich.pack import load_pack_index
0.200.306 by Jelmer Vernooij
Fix tests, split up InterGitNonGitRepository.
82
0.200.143 by Jelmer Vernooij
Reoncile InterGitRepository objects.
83
0.200.695 by Jelmer Vernooij
Clean up trailing whitespace.
84
# Don't run any tests on GitSmartTransport as it is not intended to be
0.200.181 by Jelmer Vernooij
Support setting tags.
85
# a full implementation of Transport
86
def get_test_permutations():
87
    return []
88
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
89
0.200.708 by Jelmer Vernooij
Factor out URL parsing.
90
def split_git_url(url):
0.200.709 by Jelmer Vernooij
When unpacking URLs, strip leftmost slash to match gits behaviour.
91
    """Split a Git URL.
92
93
    :param url: Git URL
94
    :return: Tuple with host, port, username, path.
95
    """
0.200.743 by Jelmer Vernooij
Fix URL parsing.
96
    (scheme, netloc, loc, _, _) = urlparse.urlsplit(url)
97
    path = urllib.unquote(loc)
0.246.2 by Jelmer Vernooij
Improve the fix dealing with git repo's in home directories.
98
    if path.startswith("/~"):
0.200.709 by Jelmer Vernooij
When unpacking URLs, strip leftmost slash to match gits behaviour.
99
        path = path[1:]
0.200.743 by Jelmer Vernooij
Fix URL parsing.
100
    (username, hostport) = urllib.splituser(netloc)
0.200.708 by Jelmer Vernooij
Factor out URL parsing.
101
    (host, port) = urllib.splitnport(hostport, None)
102
    return (host, port, username, path)
103
104
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
105
class GitSmartTransport(Transport):
106
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
107
    def __init__(self, url, _client=None):
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
108
        Transport.__init__(self, url)
0.200.708 by Jelmer Vernooij
Factor out URL parsing.
109
        (self._host, self._port, self._username, self._path) = \
110
            split_git_url(url)
0.200.707 by Jelmer Vernooij
Add debug routines.
111
        if 'transport' in debug.debug_flags:
112
            trace.mutter('host: %r, user: %r, port: %r, path: %r',
113
                         self._host, self._username, self._port, self._path)
0.200.166 by Jelmer Vernooij
don't reuse client objects.
114
        self._client = _client
115
0.200.543 by Jelmer Vernooij
Implement GitSmartTransport.external_url().
116
    def external_url(self):
117
        return self.base
118
0.200.238 by Jelmer Vernooij
Import Transport.has().
119
    def has(self, relpath):
120
        return False
121
0.200.567 by Jelmer Vernooij
Pass along thin pack settings.
122
    def _get_client(self, thin_packs):
0.200.307 by Jelmer Vernooij
Support git+ssh.
123
        raise NotImplementedError(self._get_client)
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
124
0.200.470 by Jelmer Vernooij
Properly parse username in URLs.
125
    def _get_path(self):
126
        return self._path
127
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
128
    def fetch_pack(self, determine_wants, graph_walker, pack_data, progress=None):
129
        if progress is None:
130
            def progress(text):
0.200.707 by Jelmer Vernooij
Add debug routines.
131
                trace.info("git: %s" % text)
0.200.567 by Jelmer Vernooij
Pass along thin pack settings.
132
        client = self._get_client(thin_packs=False)
0.200.240 by Jelmer Vernooij
Wrap socket errors.
133
        try:
0.200.695 by Jelmer Vernooij
Clean up trailing whitespace.
134
            return client.fetch_pack(self._get_path(), determine_wants,
0.200.240 by Jelmer Vernooij
Wrap socket errors.
135
                graph_walker, pack_data, progress)
136
        except GitProtocolError, e:
137
            raise BzrError(e)
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
138
0.200.427 by Jelmer Vernooij
make send_pack accessible.
139
    def send_pack(self, get_changed_refs, generate_pack_contents):
0.200.567 by Jelmer Vernooij
Pass along thin pack settings.
140
        client = self._get_client(thin_packs=False)
0.200.427 by Jelmer Vernooij
make send_pack accessible.
141
        try:
0.200.695 by Jelmer Vernooij
Clean up trailing whitespace.
142
            return client.send_pack(self._get_path(), get_changed_refs,
0.200.427 by Jelmer Vernooij
make send_pack accessible.
143
                generate_pack_contents)
144
        except GitProtocolError, e:
145
            raise BzrError(e)
146
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
147
    def get(self, path):
148
        raise NoSuchFile(path)
149
0.200.160 by Jelmer Vernooij
Implement abspath.
150
    def abspath(self, relpath):
151
        return urlutils.join(self.base, relpath)
152
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
153
    def clone(self, offset=None):
154
        """See Transport.clone()."""
155
        if offset is None:
156
            newurl = self.base
157
        else:
158
            newurl = urlutils.join(self.base, offset)
159
0.200.307 by Jelmer Vernooij
Support git+ssh.
160
        return self.__class__(newurl, self._client)
161
162
163
class TCPGitSmartTransport(GitSmartTransport):
164
0.200.332 by Jelmer Vernooij
Support activity reporting.
165
    _scheme = 'git'
166
0.200.567 by Jelmer Vernooij
Pass along thin pack settings.
167
    def _get_client(self, thin_packs):
0.200.307 by Jelmer Vernooij
Support git+ssh.
168
        if self._client is not None:
169
            ret = self._client
170
            self._client = None
171
            return ret
0.200.859 by Jelmer Vernooij
Trivial cleanups.
172
        return git.client.TCPGitClient(self._host, self._port,
173
            thin_packs=thin_packs, report_activity=self._report_activity)
0.200.307 by Jelmer Vernooij
Support git+ssh.
174
175
176
class SSHGitSmartTransport(GitSmartTransport):
177
0.200.332 by Jelmer Vernooij
Support activity reporting.
178
    _scheme = 'git+ssh'
179
0.200.470 by Jelmer Vernooij
Properly parse username in URLs.
180
    def _get_path(self):
181
        if self._path.startswith("/~/"):
182
            return self._path[3:]
183
        return self._path
184
0.200.567 by Jelmer Vernooij
Pass along thin pack settings.
185
    def _get_client(self, thin_packs):
0.200.307 by Jelmer Vernooij
Support git+ssh.
186
        if self._client is not None:
187
            ret = self._client
188
            self._client = None
189
            return ret
0.253.1 by Ross Light
Added configuration options for git-upload-pack and git-receive-pack
190
        location_config = config.LocationConfig(self.base)
191
        client = git.client.SSHGitClient(self._host, self._port, self._username,
0.200.567 by Jelmer Vernooij
Pass along thin pack settings.
192
            thin_packs=thin_packs, report_activity=self._report_activity)
0.253.1 by Ross Light
Added configuration options for git-upload-pack and git-receive-pack
193
        # Set up alternate pack program paths
194
        upload_pack = location_config.get_user_option('git_upload_pack')
195
        if upload_pack:
0.200.949 by Jelmer Vernooij
merge support for specifying alternative paths for git executables.
196
            client.alternative_paths["upload-pack"] = upload_pack
0.253.1 by Ross Light
Added configuration options for git-upload-pack and git-receive-pack
197
        receive_pack = location_config.get_user_option('git_receive_pack')
198
        if receive_pack:
0.200.949 by Jelmer Vernooij
merge support for specifying alternative paths for git executables.
199
            client.alternative_paths["receive-pack"] = receive_pack
0.253.1 by Ross Light
Added configuration options for git-upload-pack and git-receive-pack
200
        return client
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
201
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
202
0.200.148 by Jelmer Vernooij
Share more infrastructure between LocalGitDir and RemoteGitDir.
203
class RemoteGitDir(GitDir):
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
204
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
205
    def __init__(self, transport, lockfiles, format):
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
206
        self._format = format
207
        self.root_transport = transport
208
        self.transport = transport
209
        self._lockfiles = lockfiles
0.200.381 by Jelmer Vernooij
Support working trees properly, status and ls.
210
        self._mode_check_done = None
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
211
0.200.1068 by Jelmer Vernooij
Implement user_url/control_url.
212
    @property
213
    def user_url(self):
214
        return self.control_url
215
0.200.916 by Jelmer Vernooij
Set refs/heads/master if no ref is set yet.
216
    def _branch_name_to_ref(self, name, default=None):
0.200.915 by Jelmer Vernooij
Cope with the fact that the old format didn't export file ids.
217
        return branch_name_to_ref(name, default=default)
0.200.833 by Jelmer Vernooij
Fix handling of remote branches.
218
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
219
    def open_repository(self):
220
        return RemoteGitRepository(self, self._lockfiles)
221
0.200.777 by Jelmer Vernooij
Fix colocated remote branches.
222
    def _open_branch(self, name=None, ignore_fallbacks=False, 
0.200.731 by Jelmer Vernooij
Handle unsupported flag to open_branch().
223
                    unsupported=False):
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
224
        repo = self.open_repository()
0.200.729 by Jelmer Vernooij
Improve colocated branches support.
225
        refname = self._branch_name_to_ref(name)
226
        return RemoteGitBranch(self, repo, refname, self._lockfiles)
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
227
0.200.662 by Jelmer Vernooij
Deal with recommend_upgrade argument to open_workingtree.
228
    def open_workingtree(self, recommend_upgrade=False):
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
229
        raise NotLocalUrl(self.transport.base)
230
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
231
0.225.2 by Jelmer Vernooij
Handle situation when repository is already up to date during pull.
232
class EmptyObjectStoreIterator(dict):
233
234
    def iterobjects(self):
235
        return []
236
237
0.200.218 by Jelmer Vernooij
Simplify TemporaryPack implementation.
238
class TemporaryPackIterator(Pack):
239
0.200.226 by Jelmer Vernooij
Merge thin-pack work.
240
    def __init__(self, path, resolve_ext_ref):
0.200.310 by Jelmer Vernooij
Fix pull from remote branches.
241
        super(TemporaryPackIterator, self).__init__(path)
0.200.226 by Jelmer Vernooij
Merge thin-pack work.
242
        self.resolve_ext_ref = resolve_ext_ref
243
0.200.218 by Jelmer Vernooij
Simplify TemporaryPack implementation.
244
    @property
0.200.604 by Jelmer Vernooij
Fix fetching of remote repositories on Windows.
245
    def data(self):
246
        if self._data is None:
0.200.900 by Jelmer Vernooij
Fix compatibility with newer versions of Dulwich.
247
            self._data = ThinPackData(self.resolve_ext_ref, self._data_path)
0.200.604 by Jelmer Vernooij
Fix fetching of remote repositories on Windows.
248
        return self._data
249
250
    @property
0.200.458 by Jelmer Vernooij
Fix index.
251
    def index(self):
0.200.218 by Jelmer Vernooij
Simplify TemporaryPack implementation.
252
        if self._idx is None:
0.200.562 by Jelmer Vernooij
Only create pack index if it doesn't exist yet.
253
            if not os.path.exists(self._idx_path):
254
                pb = ui.ui_factory.nested_progress_bar()
255
                try:
256
                    def report_progress(cur, total):
257
                        pb.update("generating index", cur, total)
0.200.900 by Jelmer Vernooij
Fix compatibility with newer versions of Dulwich.
258
                    self.data.create_index(self._idx_path, 
0.200.562 by Jelmer Vernooij
Only create pack index if it doesn't exist yet.
259
                        progress=report_progress)
260
                finally:
261
                    pb.finished()
0.200.306 by Jelmer Vernooij
Fix tests, split up InterGitNonGitRepository.
262
            self._idx = load_pack_index(self._idx_path)
0.200.218 by Jelmer Vernooij
Simplify TemporaryPack implementation.
263
        return self._idx
0.200.205 by Jelmer Vernooij
Fix remote fetching.
264
265
    def __del__(self):
0.200.611 by Jelmer Vernooij
Merge warning fix from Naoki.
266
        if self._idx is not None:
0.241.1 by Naoki INADA
Fix can't delete tempfile on Windows
267
            self._idx.close()
268
            os.remove(self._idx_path)
0.200.611 by Jelmer Vernooij
Merge warning fix from Naoki.
269
        if self._data is not None:
0.241.1 by Naoki INADA
Fix can't delete tempfile on Windows
270
            self._data.close()
271
            os.remove(self._data_path)
0.200.205 by Jelmer Vernooij
Fix remote fetching.
272
273
0.200.1137 by Jelmer Vernooij
Support BzrProber.known_formats().
274
class RemoteGitControlDirFormat(GitControlDirFormat):
275
    """The .git directory control format."""
276
277
    supports_workingtrees = False
278
279
    @classmethod
280
    def _known_formats(self):
281
        return set([RemoteGitControlDirFormat()])
282
283
    def open(self, transport, _found=None):
284
        """Open this directory.
285
286
        """
287
        # we dont grok readonly - git isn't integrated with transport.
288
        url = transport.base
289
        if url.startswith('readonly+'):
290
            url = url[len('readonly+'):]
291
        if (not url.startswith("git://") and not url.startswith("git+")):
292
            raise NotBranchError(transport.base)
293
        if not isinstance(transport, GitSmartTransport):
294
            raise NotBranchError(transport.base)
295
        lockfiles = GitLockableFiles(transport, GitLock())
296
        return RemoteGitDir(transport, lockfiles, self)
297
298
    def get_format_description(self):
299
        return "Remote Git Repository"
300
301
    def initialize_on_transport(self, transport):
302
        raise UninitializableFormat(self)
303
304
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
305
class RemoteGitRepository(GitRepository):
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
306
307
    def __init__(self, gitdir, lockfiles):
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
308
        GitRepository.__init__(self, gitdir, lockfiles)
0.228.3 by Jelmer Vernooij
Fix tags when fetching from remotes.
309
        self._refs = None
310
0.200.319 by Jelmer Vernooij
Print proper error when trying unsupported operations against a git server.
311
    @property
0.200.1068 by Jelmer Vernooij
Implement user_url/control_url.
312
    def user_url(self):
313
        return self.control_url
314
315
    @property
0.200.319 by Jelmer Vernooij
Print proper error when trying unsupported operations against a git server.
316
    def inventories(self):
317
        raise GitSmartRemoteNotSupported()
318
319
    @property
320
    def revisions(self):
321
        raise GitSmartRemoteNotSupported()
322
323
    @property
324
    def texts(self):
325
        raise GitSmartRemoteNotSupported()
326
0.228.3 by Jelmer Vernooij
Fix tags when fetching from remotes.
327
    def get_refs(self):
328
        if self._refs is not None:
329
            return self._refs
0.200.695 by Jelmer Vernooij
Clean up trailing whitespace.
330
        self._refs = self.bzrdir.root_transport.fetch_pack(lambda x: [], None,
0.200.586 by Jelmer Vernooij
Fix issues pointed out by pyflakes.
331
            lambda x: None, lambda x: trace.mutter("git: %s" % x))
0.228.3 by Jelmer Vernooij
Fix tags when fetching from remotes.
332
        return self._refs
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
333
0.200.695 by Jelmer Vernooij
Clean up trailing whitespace.
334
    def fetch_pack(self, determine_wants, graph_walker, pack_data,
0.200.155 by Jelmer Vernooij
Fix formatting, remove catch-all for exceptions when opening local repositories.
335
                   progress=None):
0.200.456 by Jelmer Vernooij
Fix git -> git fetching.
336
        return self._transport.fetch_pack(determine_wants, graph_walker,
337
                                          pack_data, progress)
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
338
0.200.427 by Jelmer Vernooij
make send_pack accessible.
339
    def send_pack(self, get_changed_refs, generate_pack_contents):
0.200.460 by Jelmer Vernooij
Somewhat fix commit in git working trees.
340
        return self._transport.send_pack(get_changed_refs, generate_pack_contents)
0.200.427 by Jelmer Vernooij
make send_pack accessible.
341
0.200.695 by Jelmer Vernooij
Clean up trailing whitespace.
342
    def fetch_objects(self, determine_wants, graph_walker, resolve_ext_ref,
343
                      progress=None):
0.200.167 by Jelmer Vernooij
Implement fetch_objects properly.
344
        fd, path = tempfile.mkstemp(suffix=".pack")
0.200.695 by Jelmer Vernooij
Clean up trailing whitespace.
345
        self.fetch_pack(determine_wants, graph_walker,
346
            lambda x: os.write(fd, x), progress)
0.200.167 by Jelmer Vernooij
Implement fetch_objects properly.
347
        os.close(fd)
0.200.226 by Jelmer Vernooij
Merge thin-pack work.
348
        if os.path.getsize(path) == 0:
0.225.2 by Jelmer Vernooij
Handle situation when repository is already up to date during pull.
349
            return EmptyObjectStoreIterator()
0.200.226 by Jelmer Vernooij
Merge thin-pack work.
350
        return TemporaryPackIterator(path[:-len(".pack")], resolve_ext_ref)
0.200.167 by Jelmer Vernooij
Implement fetch_objects properly.
351
0.200.650 by Jelmer Vernooij
Use standard names for lookup functions.
352
    def lookup_bzr_revision_id(self, bzr_revid):
0.200.415 by Jelmer Vernooij
make 'bzr pull --revision' work for remote repositories.
353
        # This won't work for any round-tripped bzr revisions, but it's a start..
354
        try:
355
            return mapping_registry.revision_id_bzr_to_foreign(bzr_revid)
356
        except InvalidRevisionId:
357
            raise NoSuchRevision(self, bzr_revid)
358
0.252.48 by Jelmer Vernooij
Implement lookup_foreign_revision for remote branches.
359
    def lookup_foreign_revision_id(self, foreign_revid, mapping=None):
360
        """Lookup a revision id.
361
362
        """
363
        if mapping is None:
364
            mapping = self.get_mapping()
365
        # Not really an easy way to parse foreign revids here..
366
        return mapping.revision_id_foreign_to_bzr(foreign_revid)
367
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
368
0.200.1064 by Jelmer Vernooij
Use common base class for tags.
369
class RemoteGitTagDict(GitTags):
0.228.3 by Jelmer Vernooij
Fix tags when fetching from remotes.
370
0.200.1066 by Jelmer Vernooij
Add GitTags.get_refs.
371
    def get_refs(self):
372
        return self.repository.get_refs()
373
0.200.1065 by Jelmer Vernooij
Don't peel tags automatically when pushing back.
374
    def _iter_tag_refs(self, refs):
0.200.1060 by Jelmer Vernooij
Return unpeeled tags in extract_tags.
375
        for k, (peeled, unpeeled) in extract_tags(refs).iteritems():
0.200.1065 by Jelmer Vernooij
Don't peel tags automatically when pushing back.
376
            yield (k, peeled, unpeeled,
377
                  self.branch.mapping.revision_id_foreign_to_bzr(peeled))
0.228.3 by Jelmer Vernooij
Fix tags when fetching from remotes.
378
379
    def set_tag(self, name, revid):
380
        # FIXME: Not supported yet, should do a push of a new ref
381
        raise NotImplementedError(self.set_tag)
382
383
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
384
class RemoteGitBranch(GitBranch):
385
386
    def __init__(self, bzrdir, repository, name, lockfiles):
0.200.919 by Jelmer Vernooij
Simplify ref handling in remote.py.
387
        self._sha = None
0.200.695 by Jelmer Vernooij
Clean up trailing whitespace.
388
        super(RemoteGitBranch, self).__init__(bzrdir, repository, name,
0.200.461 by Jelmer Vernooij
Reduce number of round trips when fetching from Git.
389
                lockfiles)
390
0.200.1068 by Jelmer Vernooij
Implement user_url/control_url.
391
    @property
392
    def user_url(self):
393
        return self.control_url
394
395
    @property
396
    def control_url(self):
397
        return self.base
398
0.200.461 by Jelmer Vernooij
Reduce number of round trips when fetching from Git.
399
    def revision_history(self):
400
        raise GitSmartRemoteNotSupported()
401
402
    def last_revision(self):
0.252.44 by Jelmer Vernooij
Properly look up Bazaar revision ids for revision parents in case they are round-tripped.
403
        return self.lookup_foreign_revision_id(self.head)
0.200.461 by Jelmer Vernooij
Reduce number of round trips when fetching from Git.
404
0.200.596 by Jelmer Vernooij
Import RemoteGitBranch._get_config().
405
    def _get_config(self):
406
        class EmptyConfig(object):
407
408
            def _get_configobj(self):
409
                return config.ConfigObj()
410
411
        return EmptyConfig()
412
0.200.461 by Jelmer Vernooij
Reduce number of round trips when fetching from Git.
413
    @property
414
    def head(self):
0.200.919 by Jelmer Vernooij
Simplify ref handling in remote.py.
415
        if self._sha is not None:
416
            return self._sha
0.200.465 by Jelmer Vernooij
Use dulwich standard functionality for finding missing revisions.
417
        heads = self.repository.get_refs()
0.200.919 by Jelmer Vernooij
Simplify ref handling in remote.py.
418
        name = self.bzrdir._branch_name_to_ref(self.name, "HEAD")
419
        if name in heads:
420
            self._sha = heads[name]
0.248.4 by Jelmer Vernooij
Look for heads a bit harder.
421
        else:
0.200.586 by Jelmer Vernooij
Fix issues pointed out by pyflakes.
422
            raise NoSuchRef(self.name)
0.200.919 by Jelmer Vernooij
Simplify ref handling in remote.py.
423
        return self._sha
0.200.141 by Jelmer Vernooij
Separate out local and remote fetching.
424
0.200.169 by Jelmer Vernooij
Fix branch cloning.
425
    def _synchronize_history(self, destination, revision_id):
426
        """See Branch._synchronize_history()."""
427
        destination.generate_revision_history(self.last_revision())
0.200.695 by Jelmer Vernooij
Clean up trailing whitespace.
428
0.200.499 by Jelmer Vernooij
Implement RemoteBranch.{get,set}_push_location.
429
    def get_push_location(self):
430
        return None
431
432
    def set_push_location(self, url):
433
        pass