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