/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
1
# Copyright (C) 2007 Canonical Ltd
0.200.252 by Jelmer Vernooij
Clarify history, copyright.
2
# Copyright (C) 2009 Jelmer Vernooij <jelmer@samba.org>
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
3
#
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; either version 2 of the License, or
7
# (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
18
"""An adapter between a Git Branch and a Bazaar Branch"""
19
0.200.261 by Jelmer Vernooij
More formatting fixes.
20
from dulwich.objects import (
21
    Commit,
22
    Tag,
23
    )
24
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
25
from bzrlib import (
26
    branch,
27
    config,
0.200.446 by Jelmer Vernooij
Support new 'local' argument.
28
    errors,
0.200.327 by Jelmer Vernooij
merge new bzr-foreign.
29
    foreign,
0.200.225 by Jelmer Vernooij
Implement custom InterBranch to support fetching from remote git branches.
30
    repository,
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
31
    revision,
0.200.82 by Jelmer Vernooij
Support listing tags.
32
    tag,
0.230.1 by Jelmer Vernooij
Support lightweight checkouts.
33
    transport,
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
34
    )
0.200.261 by Jelmer Vernooij
More formatting fixes.
35
from bzrlib.decorators import (
36
    needs_read_lock,
37
    )
38
from bzrlib.trace import (
0.200.342 by Jelmer Vernooij
Report git sha during pull.
39
    is_quiet,
0.200.261 by Jelmer Vernooij
More formatting fixes.
40
    mutter,
41
    )
42
0.200.386 by Jelmer Vernooij
Move config to a separate file, support BranchConfig.username().
43
from bzrlib.plugins.git.config import (
44
    GitBranchConfig,
45
    )
0.200.278 by Jelmer Vernooij
Update branch head appropriately during dpull.
46
from bzrlib.plugins.git.errors import (
47
    NoSuchRef,
48
    )
0.200.261 by Jelmer Vernooij
More formatting fixes.
49
0.200.388 by Jelmer Vernooij
Support bzr 1.14 as well.
50
try:
51
    from bzrlib.foreign import ForeignBranch
52
except ImportError:
53
    class ForeignBranch(branch.Branch):
54
        def __init__(self, mapping):
55
            self.mapping = mapping
56
            super(ForeignBranch, self).__init__()
57
0.200.261 by Jelmer Vernooij
More formatting fixes.
58
0.200.334 by Jelmer Vernooij
Support pulling from git to git.
59
class GitPullResult(branch.PullResult):
60
61
    def _lookup_revno(self, revid):
62
        assert isinstance(revid, str), "was %r" % revid
63
        # Try in source branch first, it'll be faster
64
        return self.target_branch.revision_id_to_revno(revid)
65
66
    @property
67
    def old_revno(self):
68
        return self._lookup_revno(self.old_revid)
69
70
    @property
71
    def new_revno(self):
72
        return self._lookup_revno(self.new_revid)
73
74
0.200.261 by Jelmer Vernooij
More formatting fixes.
75
class LocalGitTagDict(tag.BasicTags):
76
    """Dictionary with tags in a local repository."""
0.200.82 by Jelmer Vernooij
Support listing tags.
77
0.200.89 by Jelmer Vernooij
Support sprouting branches.
78
    def __init__(self, branch):
79
        self.branch = branch
80
        self.repository = branch.repository
0.200.82 by Jelmer Vernooij
Support listing tags.
81
82
    def get_tag_dict(self):
83
        ret = {}
0.200.180 by Jelmer Vernooij
Simplify tag handling.
84
        for k,v in self.repository._git.tags.iteritems():
0.200.194 by Jelmer Vernooij
Look for commit object in heavyweight tags.
85
            obj = self.repository._git.get_object(v)
86
            while isinstance(obj, Tag):
87
                v = obj.object[1]
88
                obj = self.repository._git.get_object(v)
89
            if not isinstance(obj, Commit):
0.200.261 by Jelmer Vernooij
More formatting fixes.
90
                mutter("Tag %s points at object %r that is not a commit, "
91
                       "ignoring", k, obj)
0.200.194 by Jelmer Vernooij
Look for commit object in heavyweight tags.
92
                continue
0.200.180 by Jelmer Vernooij
Simplify tag handling.
93
            ret[k] = self.branch.mapping.revision_id_foreign_to_bzr(v)
0.200.82 by Jelmer Vernooij
Support listing tags.
94
        return ret
95
0.200.86 by Jelmer Vernooij
Clearer error when setting tags.
96
    def set_tag(self, name, revid):
0.200.181 by Jelmer Vernooij
Support setting tags.
97
        self.repository._git.tags[name] = revid
0.200.86 by Jelmer Vernooij
Clearer error when setting tags.
98
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
99
100
class GitBranchFormat(branch.BranchFormat):
101
0.200.70 by Jelmer Vernooij
Implement GitBranchFormat.get_format_description.
102
    def get_format_description(self):
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
103
        return 'Git Branch'
104
0.200.82 by Jelmer Vernooij
Support listing tags.
105
    def supports_tags(self):
106
        return True
107
0.200.246 by Jelmer Vernooij
Cope with API changes in 1.13.
108
    def make_tags(self, branch):
0.228.3 by Jelmer Vernooij
Fix tags when fetching from remotes.
109
        if getattr(branch.repository, "get_refs", None) is not None:
110
            from bzrlib.plugins.git.remote import RemoteGitTagDict
111
            return RemoteGitTagDict(branch)
0.200.261 by Jelmer Vernooij
More formatting fixes.
112
        else:
113
            return LocalGitTagDict(branch)
0.200.246 by Jelmer Vernooij
Cope with API changes in 1.13.
114
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
115
0.200.388 by Jelmer Vernooij
Support bzr 1.14 as well.
116
class GitBranch(ForeignBranch):
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
117
    """An adapter to git repositories for bzr Branch objects."""
118
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
119
    def __init__(self, bzrdir, repository, name, head, lockfiles):
0.200.82 by Jelmer Vernooij
Support listing tags.
120
        self.repository = repository
0.200.246 by Jelmer Vernooij
Cope with API changes in 1.13.
121
        self._format = GitBranchFormat()
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
122
        self.control_files = lockfiles
0.200.59 by Jelmer Vernooij
Add more tests, fix revision history.
123
        self.bzrdir = bzrdir
0.231.1 by Jelmer Vernooij
Check that regenerated objects have the expected sha1.
124
        super(GitBranch, self).__init__(repository.get_mapping())
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
125
        self.name = name
0.200.57 by Jelmer Vernooij
Fix more tests.
126
        self.head = head
0.200.143 by Jelmer Vernooij
Reoncile InterGitRepository objects.
127
        self.base = bzrdir.transport.base
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
128
0.200.293 by Jelmer Vernooij
Fix branch nicks.
129
    def _get_nick(self, local=False, possible_master_transports=None):
130
        """Find the nick name for this branch.
131
132
        :return: Branch nick
133
        """
134
        return self.name
135
0.200.331 by Jelmer Vernooij
Add stub for setting nick function.
136
    def _set_nick(self, nick):
137
        raise NotImplementedError
138
139
    nick = property(_get_nick, _set_nick)
0.200.293 by Jelmer Vernooij
Fix branch nicks.
140
0.200.412 by Jelmer Vernooij
Implement GitBranch.__repr__.
141
    def __repr__(self):
142
        return "%s(%r, %r)" % (self.__class__.__name__, self.repository.base, self.name)
143
0.200.211 by Jelmer Vernooij
Add basic infrastructure for dpush.
144
    def dpull(self, source, stop_revision=None):
145
        if stop_revision is None:
146
            stop_revision = source.last_revision()
147
        # FIXME: Check for diverged branches
0.200.456 by Jelmer Vernooij
Fix git -> git fetching.
148
        refs = { "HEAD": stop_revision }
0.200.433 by Jelmer Vernooij
dpush tags too.
149
        for name, revid in source.tags.get_tag_dict().iteritems():
0.200.434 by Jelmer Vernooij
Only attempt to push revisions that actually exist in the source branch.
150
            if source.repository.has_revision(revid):
151
                refs["refs/tags/%s" % name] = revid
0.200.438 by Jelmer Vernooij
Somewhat fix dpushing to remote repos.
152
        revidmap, new_refs = self.repository.dfetch_refs(source.repository, 
0.200.433 by Jelmer Vernooij
dpush tags too.
153
                refs)
0.200.338 by Jelmer Vernooij
Fix dpushing without changes necessary.
154
        if revidmap != {}:
155
            self.generate_revision_history(revidmap[stop_revision])
0.200.438 by Jelmer Vernooij
Somewhat fix dpushing to remote repos.
156
        return revidmap
0.200.334 by Jelmer Vernooij
Support pulling from git to git.
157
158
    def generate_revision_history(self, revid, old_revid=None):
159
        # FIXME: Check that old_revid is in the ancestry of revid
160
        newhead, self.mapping = self.mapping.revision_id_bzr_to_foreign(revid)
161
        self._set_head(newhead)
162
163
    def _set_head(self, head):
0.200.338 by Jelmer Vernooij
Fix dpushing without changes necessary.
164
        self.head = head
0.200.278 by Jelmer Vernooij
Update branch head appropriately during dpull.
165
        self.repository._git.set_ref(self.name, self.head)
0.200.456 by Jelmer Vernooij
Fix git -> git fetching.
166
        self._clear_cached_state()
0.200.211 by Jelmer Vernooij
Add basic infrastructure for dpush.
167
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
168
    def lock_write(self):
169
        self.control_files.lock_write()
170
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
171
    def get_stacked_on_url(self):
172
        # Git doesn't do stacking (yet...)
173
        return None
174
175
    def get_parent(self):
176
        """See Branch.get_parent()."""
0.200.312 by Jelmer Vernooij
Add notes about parent locations.
177
        # FIXME: Set "origin" url from .git/config ?
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
178
        return None
179
0.200.175 by Jelmer Vernooij
Add optimized handling when fetching from git to git.
180
    def set_parent(self, url):
0.200.312 by Jelmer Vernooij
Add notes about parent locations.
181
        # FIXME: Set "origin" url in .git/config ?
0.200.175 by Jelmer Vernooij
Add optimized handling when fetching from git to git.
182
        pass
183
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
184
    def lock_read(self):
185
        self.control_files.lock_read()
186
0.200.432 by Jelmer Vernooij
Support Branch.is_locked, required for loggerhead.
187
    def is_locked(self):
188
        return self.control_files.is_locked()
189
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
190
    def unlock(self):
191
        self.control_files.unlock()
192
193
    def get_physical_lock_status(self):
194
        return False
195
196
 
197
class LocalGitBranch(GitBranch):
0.200.261 by Jelmer Vernooij
More formatting fixes.
198
    """A local Git branch."""
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
199
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
200
    @needs_read_lock
201
    def last_revision(self):
202
        # perhaps should escape this ?
0.200.57 by Jelmer Vernooij
Fix more tests.
203
        if self.head is None:
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
204
            return revision.NULL_REVISION
0.200.112 by Jelmer Vernooij
Fix the build.
205
        return self.mapping.revision_id_foreign_to_bzr(self.head)
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
206
0.230.1 by Jelmer Vernooij
Support lightweight checkouts.
207
    def _get_checkout_format(self):
208
        """Return the most suitable metadir for a checkout of this branch.
209
        Weaves are used if this branch's repository uses weaves.
210
        """
211
        format = self.repository.bzrdir.checkout_metadir()
212
        format.set_branch_format(self._format)
213
        return format
214
0.200.261 by Jelmer Vernooij
More formatting fixes.
215
    def create_checkout(self, to_location, revision_id=None, lightweight=False,
216
        accelerator_tree=None, hardlink=False):
0.200.210 by Jelmer Vernooij
properly error out about not support lightweight checkouts.
217
        if lightweight:
0.230.1 by Jelmer Vernooij
Support lightweight checkouts.
218
            t = transport.get_transport(to_location)
219
            t.ensure_base()
220
            format = self._get_checkout_format()
221
            checkout = format.initialize_on_transport(t)
222
            from_branch = branch.BranchReferenceFormat().initialize(checkout, 
223
                self)
224
            tree = checkout.create_workingtree(revision_id,
225
                from_branch=from_branch, hardlink=hardlink)
226
            return tree
227
        else:
228
            return self._create_heavyweight_checkout(to_location, revision_id,
0.200.261 by Jelmer Vernooij
More formatting fixes.
229
            hardlink)
0.200.210 by Jelmer Vernooij
properly error out about not support lightweight checkouts.
230
231
    def _create_heavyweight_checkout(self, to_location, revision_id=None, 
232
                                     hardlink=False):
233
        """Create a new heavyweight checkout of this branch.
234
235
        :param to_location: URL of location to create the new checkout in.
236
        :param revision_id: Revision that should be the tip of the checkout.
237
        :param hardlink: Whether to hardlink
238
        :return: WorkingTree object of checkout.
239
        """
240
        checkout_branch = BzrDir.create_branch_convenience(
241
            to_location, force_new_tree=False, format=get_rich_root_format())
242
        checkout = checkout_branch.bzrdir
243
        checkout_branch.bind(self)
244
        # pull up to the specified revision_id to set the initial 
245
        # branch tip correctly, and seed it with history.
246
        checkout_branch.pull(self, stop_revision=revision_id)
247
        return checkout.create_workingtree(revision_id, hardlink=hardlink)
248
0.200.57 by Jelmer Vernooij
Fix more tests.
249
    def _gen_revision_history(self):
0.200.58 by Jelmer Vernooij
Fix remaining tests.
250
        if self.head is None:
251
            return []
0.200.261 by Jelmer Vernooij
More formatting fixes.
252
        ret = list(self.repository.iter_reverse_revision_history(
253
            self.last_revision()))
0.200.59 by Jelmer Vernooij
Add more tests, fix revision history.
254
        ret.reverse()
0.200.57 by Jelmer Vernooij
Fix more tests.
255
        return ret
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
256
257
    def get_config(self):
258
        return GitBranchConfig(self)
259
260
    def get_push_location(self):
261
        """See Branch.get_push_location."""
262
        push_loc = self.get_config().get_user_option('push_location')
263
        return push_loc
264
265
    def set_push_location(self, location):
266
        """See Branch.set_push_location."""
0.200.19 by John Arbash Meinel
More refactoring. Add some direct tests for GitModel.
267
        self.get_config().set_user_option('push_location', location,
0.217.54 by John Carr
set_user_option breaks - doesnt have a local option in BranchConfig. Follow the bzr.dev syntax instead.
268
                                          store=config.STORE_LOCATION)
0.200.43 by David Allouche
Ultra-experimental support for "bzr pull". No test. No sanity.
269
270
    def supports_tags(self):
0.200.82 by Jelmer Vernooij
Support listing tags.
271
        return True
0.200.96 by Jelmer Vernooij
Fix branch.
272
0.200.225 by Jelmer Vernooij
Implement custom InterBranch to support fetching from remote git branches.
273
0.200.342 by Jelmer Vernooij
Report git sha during pull.
274
class GitBranchPullResult(branch.PullResult):
275
276
    def report(self, to_file):
277
        if not is_quiet():
278
            if self.old_revid == self.new_revid:
279
                to_file.write('No revisions to pull.\n')
280
            else:
281
                to_file.write('Now on revision %d (git sha: %s).\n' % 
282
                        (self.new_revno, self.new_git_head))
283
        self._show_tag_conficts(to_file)
284
285
0.200.225 by Jelmer Vernooij
Implement custom InterBranch to support fetching from remote git branches.
286
class InterGitGenericBranch(branch.InterBranch):
0.200.261 by Jelmer Vernooij
More formatting fixes.
287
    """InterBranch implementation that pulls from Git into bzr."""
0.200.225 by Jelmer Vernooij
Implement custom InterBranch to support fetching from remote git branches.
288
289
    @classmethod
290
    def is_compatible(self, source, target):
0.200.334 by Jelmer Vernooij
Support pulling from git to git.
291
        return (isinstance(source, GitBranch) and 
292
                not isinstance(target, GitBranch))
0.200.225 by Jelmer Vernooij
Implement custom InterBranch to support fetching from remote git branches.
293
294
    def update_revisions(self, stop_revision=None, overwrite=False,
295
        graph=None):
296
        """See InterBranch.update_revisions()."""
0.226.2 by Jelmer Vernooij
Cope with new fetch_spec argument.
297
        interrepo = repository.InterRepository.get(self.source.repository, 
298
            self.target.repository)
0.200.342 by Jelmer Vernooij
Report git sha during pull.
299
        self._head = None
0.200.225 by Jelmer Vernooij
Implement custom InterBranch to support fetching from remote git branches.
300
        self._last_revid = None
301
        def determine_wants(heads):
302
            if not self.source.name in heads:
0.200.278 by Jelmer Vernooij
Update branch head appropriately during dpull.
303
                raise NoSuchRef(self.source.name, heads.keys())
0.200.314 by Jelmer Vernooij
Support stop_revision.
304
            if stop_revision is not None:
305
                self._last_revid = stop_revision
0.200.342 by Jelmer Vernooij
Report git sha during pull.
306
                self._head, mapping = self.source.repository.lookup_git_revid(
0.200.316 by Jelmer Vernooij
Fix formatting.
307
                    stop_revision)
0.200.314 by Jelmer Vernooij
Support stop_revision.
308
            else:
0.200.342 by Jelmer Vernooij
Report git sha during pull.
309
                self._head = heads[self.source.name]
0.200.316 by Jelmer Vernooij
Fix formatting.
310
                self._last_revid = \
0.200.342 by Jelmer Vernooij
Report git sha during pull.
311
                    self.source.mapping.revision_id_foreign_to_bzr(self._head)
0.200.226 by Jelmer Vernooij
Merge thin-pack work.
312
            if self.target.repository.has_revision(self._last_revid):
0.200.225 by Jelmer Vernooij
Implement custom InterBranch to support fetching from remote git branches.
313
                return []
0.200.342 by Jelmer Vernooij
Report git sha during pull.
314
            return [self._head]
0.200.225 by Jelmer Vernooij
Implement custom InterBranch to support fetching from remote git branches.
315
        interrepo.fetch_objects(determine_wants, self.source.mapping)
0.200.313 by Jelmer Vernooij
Support overwrite parameter.
316
        if overwrite:
0.200.314 by Jelmer Vernooij
Support stop_revision.
317
            prev_last_revid = None
0.200.313 by Jelmer Vernooij
Support overwrite parameter.
318
        else:
0.200.314 by Jelmer Vernooij
Support stop_revision.
319
            prev_last_revid = self.target.last_revision()
320
        self.target.generate_revision_history(self._last_revid, prev_last_revid)
0.200.225 by Jelmer Vernooij
Implement custom InterBranch to support fetching from remote git branches.
321
0.200.338 by Jelmer Vernooij
Fix dpushing without changes necessary.
322
    def pull(self, overwrite=False, stop_revision=None,
323
             possible_transports=None, _hook_master=None, run_hooks=True,
0.200.446 by Jelmer Vernooij
Support new 'local' argument.
324
             _override_hook_target=None, local=False):
0.200.338 by Jelmer Vernooij
Fix dpushing without changes necessary.
325
        """See Branch.pull.
326
327
        :param _hook_master: Private parameter - set the branch to
328
            be supplied as the master to pull hooks.
329
        :param run_hooks: Private parameter - if false, this branch
330
            is being called because it's the master of the primary branch,
331
            so it should not run its hooks.
332
        :param _override_hook_target: Private parameter - set the branch to be
333
            supplied as the target_branch to pull hooks.
334
        """
0.200.446 by Jelmer Vernooij
Support new 'local' argument.
335
        # This type of branch can't be bound.
336
        if local:
337
            raise errors.LocalRequiresBoundBranch()
0.200.342 by Jelmer Vernooij
Report git sha during pull.
338
        result = GitBranchPullResult()
0.200.338 by Jelmer Vernooij
Fix dpushing without changes necessary.
339
        result.source_branch = self.source
340
        if _override_hook_target is None:
341
            result.target_branch = self.target
342
        else:
343
            result.target_branch = _override_hook_target
344
        self.source.lock_read()
345
        try:
346
            # We assume that during 'pull' the target repository is closer than
347
            # the source one.
348
            graph = self.target.repository.get_graph(self.source.repository)
349
            result.old_revno, result.old_revid = \
350
                self.target.last_revision_info()
0.200.342 by Jelmer Vernooij
Report git sha during pull.
351
            self.update_revisions(stop_revision, overwrite=overwrite, 
352
                graph=graph)
353
            result.new_git_head = self._head
0.200.338 by Jelmer Vernooij
Fix dpushing without changes necessary.
354
            result.tag_conflicts = self.source.tags.merge_to(self.target.tags,
355
                overwrite)
356
            result.new_revno, result.new_revid = self.target.last_revision_info()
357
            if _hook_master:
358
                result.master_branch = _hook_master
359
                result.local_branch = result.target_branch
360
            else:
361
                result.master_branch = result.target_branch
362
                result.local_branch = None
363
            if run_hooks:
364
                for hook in branch.Branch.hooks['post_pull']:
365
                    hook(result)
366
        finally:
367
            self.source.unlock()
368
        return result
369
370
371
0.200.225 by Jelmer Vernooij
Implement custom InterBranch to support fetching from remote git branches.
372
373
branch.InterBranch.register_optimiser(InterGitGenericBranch)
0.200.334 by Jelmer Vernooij
Support pulling from git to git.
374
375
376
class InterGitRemoteLocalBranch(branch.InterBranch):
377
    """InterBranch implementation that pulls between Git branches."""
378
379
    @classmethod
380
    def is_compatible(self, source, target):
381
        from bzrlib.plugins.git.remote import RemoteGitBranch
382
        return (isinstance(source, RemoteGitBranch) and 
383
                isinstance(target, LocalGitBranch))
384
385
    def pull(self, stop_revision=None, overwrite=False, 
0.200.446 by Jelmer Vernooij
Support new 'local' argument.
386
        possible_transports=None, local=False):
387
        # This type of branch can't be bound.
388
        if local:
389
            raise errors.LocalRequiresBoundBranch()
0.200.334 by Jelmer Vernooij
Support pulling from git to git.
390
        result = GitPullResult()
391
        result.source_branch = self.source
392
        result.target_branch = self.target
393
        interrepo = repository.InterRepository.get(self.source.repository, 
394
            self.target.repository)
395
        result.old_revid = self.target.last_revision()
396
        if stop_revision is None:
0.200.456 by Jelmer Vernooij
Fix git -> git fetching.
397
            refs = interrepo.fetch_refs(branches=["HEAD"])
398
            stop_revision = self.target.mapping.revision_id_foreign_to_bzr(refs["HEAD"])
399
        else:
400
            refs = interrepo.fetch_refs(revision_id=stop_revision)
0.200.334 by Jelmer Vernooij
Support pulling from git to git.
401
        self.target.generate_revision_history(stop_revision, result.old_revid)
402
        result.new_revid = self.target.last_revision()
403
        return result
404
405
406
branch.InterBranch.register_optimiser(InterGitRemoteLocalBranch)