/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.200.910 by Jelmer Vernooij
update copyright years
1
# Copyright (C) 2009-2010 Jelmer Vernooij <jelmer@samba.org>
0.200.291 by Jelmer Vernooij
Print proper error about not supporting push.
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
17
"""Push implementation that simply prints message saying push is not supported."""
18
0.200.357 by Jelmer Vernooij
Move push code to push.py.
19
from bzrlib import (
0.200.598 by Jelmer Vernooij
Cope with ghosts.
20
    errors,
0.200.357 by Jelmer Vernooij
Move push code to push.py.
21
    ui,
22
    )
0.200.291 by Jelmer Vernooij
Print proper error about not supporting push.
23
from bzrlib.repository import (
24
    InterRepository,
25
    )
0.200.371 by Jelmer Vernooij
Add progress bar when determining revisions to dpush
26
from bzrlib.revision import (
27
    NULL_REVISION,
28
    )
0.200.291 by Jelmer Vernooij
Print proper error about not supporting push.
29
30
from bzrlib.plugins.git.errors import (
31
    NoPushSupport,
32
    )
0.200.456 by Jelmer Vernooij
Fix git -> git fetching.
33
from bzrlib.plugins.git.object_store import (
0.200.1212 by Jelmer Vernooij
Support read locking object stores.
34
    get_object_store,
0.200.456 by Jelmer Vernooij
Fix git -> git fetching.
35
    )
0.200.291 by Jelmer Vernooij
Print proper error about not supporting push.
36
from bzrlib.plugins.git.repository import (
37
    GitRepository,
0.200.425 by Jelmer Vernooij
Split out push to remote git repositories.
38
    LocalGitRepository,
0.200.291 by Jelmer Vernooij
Print proper error about not supporting push.
39
    GitRepositoryFormat,
40
    )
0.200.425 by Jelmer Vernooij
Split out push to remote git repositories.
41
from bzrlib.plugins.git.remote import (
42
    RemoteGitRepository,
43
    )
0.200.1292 by Jelmer Vernooij
Fix repeeling objects when determining what to send.
44
from bzrlib.plugins.git.unpeel_map import (
0.200.1065 by Jelmer Vernooij
Don't peel tags automatically when pushing back.
45
    UnpeelMap,
0.200.1061 by Jelmer Vernooij
Add support for using unpeel map.
46
    )
0.200.291 by Jelmer Vernooij
Print proper error about not supporting push.
47
0.200.364 by Jelmer Vernooij
Reimplement dpush, but more efficient and only writing a single pack file rather than one per revision.
48
49
class MissingObjectsIterator(object):
50
    """Iterate over git objects that are missing from a target repository.
51
52
    """
53
0.200.525 by Jelmer Vernooij
Simplify push a bit further, make dpush without rebase faster.
54
    def __init__(self, store, source, pb=None):
0.200.364 by Jelmer Vernooij
Reimplement dpush, but more efficient and only writing a single pack file rather than one per revision.
55
        """Create a new missing objects iterator.
56
57
        """
58
        self.source = source
0.200.525 by Jelmer Vernooij
Simplify push a bit further, make dpush without rebase faster.
59
        self._object_store = store
0.200.364 by Jelmer Vernooij
Reimplement dpush, but more efficient and only writing a single pack file rather than one per revision.
60
        self._pending = []
0.200.369 by Jelmer Vernooij
Report on pack objects progress.
61
        self.pb = pb
0.200.364 by Jelmer Vernooij
Reimplement dpush, but more efficient and only writing a single pack file rather than one per revision.
62
0.252.4 by Jelmer Vernooij
More work on roundtripping.
63
    def import_revisions(self, revids, roundtrip):
0.200.947 by Jelmer Vernooij
Add convenience method for getting missing objects iterator.
64
        """Import a set of revisions into this git repository.
65
66
        :param revids: Revision ids of revisions to import
67
        :param roundtrip: Whether to roundtrip bzr metadata
68
        """
0.200.369 by Jelmer Vernooij
Report on pack objects progress.
69
        for i, revid in enumerate(revids):
70
            if self.pb:
71
                self.pb.update("pushing revisions", i, len(revids))
0.252.4 by Jelmer Vernooij
More work on roundtripping.
72
            git_commit = self.import_revision(revid, roundtrip)
0.252.6 by Jelmer Vernooij
Roundtripping support for revision ids works.
73
            yield (revid, git_commit)
0.200.364 by Jelmer Vernooij
Reimplement dpush, but more efficient and only writing a single pack file rather than one per revision.
74
0.252.4 by Jelmer Vernooij
More work on roundtripping.
75
    def import_revision(self, revid, roundtrip):
0.200.947 by Jelmer Vernooij
Add convenience method for getting missing objects iterator.
76
        """Import a revision into this Git repository.
0.200.364 by Jelmer Vernooij
Reimplement dpush, but more efficient and only writing a single pack file rather than one per revision.
77
0.200.947 by Jelmer Vernooij
Add convenience method for getting missing objects iterator.
78
        :param revid: Revision id of the revision
79
        :param roundtrip: Whether to roundtrip bzr metadata
0.200.364 by Jelmer Vernooij
Reimplement dpush, but more efficient and only writing a single pack file rather than one per revision.
80
        """
0.200.852 by Jelmer Vernooij
Cache trees rather than inventories.
81
        tree = self._object_store.tree_cache.revision_tree(revid)
0.200.548 by Jelmer Vernooij
Extract unusual file modes from revision when reconstructing Trees.
82
        rev = self.source.get_revision(revid)
0.200.784 by Jelmer Vernooij
Use common object generation code in push.
83
        commit = None
0.252.4 by Jelmer Vernooij
More work on roundtripping.
84
        for path, obj, ie in self._object_store._revision_to_objects(rev, tree,
85
            roundtrip):
0.200.829 by Jelmer Vernooij
Cope with the fact that _type is gone in upstream dulwich.
86
            if obj.type_name == "commit":
0.200.784 by Jelmer Vernooij
Use common object generation code in push.
87
                commit = obj
0.200.786 by Jelmer Vernooij
Simplify push code.
88
            self._pending.append((obj, path))
0.200.364 by Jelmer Vernooij
Reimplement dpush, but more efficient and only writing a single pack file rather than one per revision.
89
        return commit.id
90
91
    def __len__(self):
92
        return len(self._pending)
93
94
    def __iter__(self):
0.200.786 by Jelmer Vernooij
Simplify push code.
95
        return iter(self._pending)
0.200.364 by Jelmer Vernooij
Reimplement dpush, but more efficient and only writing a single pack file rather than one per revision.
96
97
0.200.291 by Jelmer Vernooij
Print proper error about not supporting push.
98
class InterToGitRepository(InterRepository):
99
    """InterRepository that copies into a Git repository."""
100
101
    _matching_repo_format = GitRepositoryFormat()
102
0.200.435 by Jelmer Vernooij
Remember mapping per InterRepository.
103
    def __init__(self, source, target):
104
        super(InterToGitRepository, self).__init__(source, target)
105
        self.mapping = self.target.get_mapping()
0.200.1212 by Jelmer Vernooij
Support read locking object stores.
106
        self.source_store = get_object_store(self.source, self.mapping)
0.200.435 by Jelmer Vernooij
Remember mapping per InterRepository.
107
0.200.291 by Jelmer Vernooij
Print proper error about not supporting push.
108
    @staticmethod
109
    def _get_repo_format_to_test():
110
        return None
111
112
    def copy_content(self, revision_id=None, pb=None):
113
        """See InterRepository.copy_content."""
114
        self.fetch(revision_id, pb, find_ghosts=False)
115
0.200.943 by Jelmer Vernooij
Add stubs.
116
    def dfetch_refs(self, update_refs):
117
        """Fetch non-roundtripped revisions into the target repository.
118
0.200.1036 by Jelmer Vernooij
More work on roundtrip push support.
119
        :param update_refs: Generate refs to fetch. Receives dictionary
0.200.943 by Jelmer Vernooij
Add stubs.
120
            with old names to old git shas. Should return a dictionary
121
            of new names to Bazaar revision ids.
122
        :return: revision id map, old refs dictionary and new refs dictionary
123
        """
124
        raise NotImplementedError(self.dfetch_refs)
125
126
    def fetch_refs(self, update_refs):
127
        """Fetch possibly roundtripped revisions into the target repository.
128
0.200.1036 by Jelmer Vernooij
More work on roundtrip push support.
129
        :param update_refs: Generate refs to fetch. Receives dictionary
130
            with old refs (git shas), returns dictionary of new names to
0.200.943 by Jelmer Vernooij
Add stubs.
131
            git shas.
132
        :return: old refs, new refs
133
        """
134
        raise NotImplementedError(self.fetch_refs)
135
0.200.425 by Jelmer Vernooij
Split out push to remote git repositories.
136
137
class InterToLocalGitRepository(InterToGitRepository):
0.200.966 by Jelmer Vernooij
Some more docstrings.
138
    """InterBranch implementation between a Bazaar and a Git repository."""
0.200.425 by Jelmer Vernooij
Split out push to remote git repositories.
139
0.252.3 by Jelmer Vernooij
Refactor revision finding code.
140
    def __init__(self, source, target):
141
        super(InterToLocalGitRepository, self).__init__(source, target)
142
        self.target_store = self.target._git.object_store
0.252.6 by Jelmer Vernooij
Roundtripping support for revision ids works.
143
        self.target_refs = self.target._git.refs
0.252.3 by Jelmer Vernooij
Refactor revision finding code.
144
0.200.1036 by Jelmer Vernooij
More work on roundtrip push support.
145
    def _revision_needs_fetching(self, sha_id, revid):
0.200.968 by Jelmer Vernooij
Add more tests, simplify push code.
146
        if revid == NULL_REVISION:
147
            return False
0.200.1036 by Jelmer Vernooij
More work on roundtrip push support.
148
        if sha_id is None:
149
            try:
150
                sha_id = self.source_store._lookup_revision_sha1(revid)
151
            except KeyError:
152
                return False
0.200.968 by Jelmer Vernooij
Add more tests, simplify push code.
153
        try:
154
            return (sha_id not in self.target_store)
155
        except errors.NoSuchRevision:
156
            # Ghost, can't push
157
            return False
158
159
    def missing_revisions(self, stop_revisions):
0.200.966 by Jelmer Vernooij
Some more docstrings.
160
        """Find the revisions that are missing from the target repository.
161
0.200.1036 by Jelmer Vernooij
More work on roundtrip push support.
162
        :param stop_revisions: Revisions to check for (tuples with
0.200.1030 by Jelmer Vernooij
More work on supporting roundtripping push.
163
            Git SHA1, bzr revid)
0.200.966 by Jelmer Vernooij
Some more docstrings.
164
        :return: sequence of missing revisions, in topological order
0.200.968 by Jelmer Vernooij
Add more tests, simplify push code.
165
        :raise: NoSuchRevision if the stop_revisions are not present in
166
            the source
0.200.966 by Jelmer Vernooij
Some more docstrings.
167
        """
0.200.1036 by Jelmer Vernooij
More work on roundtrip push support.
168
        revid_sha_map = {}
169
        stop_revids = []
170
        stop_sha1s = []
171
        for (sha1, revid) in stop_revisions:
172
            if sha1 is not None and revid is not None:
173
                revid_sha_map[revid] = sha1
174
            elif sha1 is not None:
175
                stop_sha1s.append(sha1)
176
            else:
177
                assert revid is not None
178
                stop_revids.append(revid)
0.200.357 by Jelmer Vernooij
Move push code to push.py.
179
        missing = []
0.252.43 by Jelmer Vernooij
Some refactoring, support proper file ids in revision deltas.
180
        graph = self.source.get_graph()
0.200.371 by Jelmer Vernooij
Add progress bar when determining revisions to dpush
181
        pb = ui.ui_factory.nested_progress_bar()
182
        try:
0.200.1030 by Jelmer Vernooij
More work on supporting roundtripping push.
183
            for revid, _ in graph.iter_ancestry(stop_revids):
0.200.969 by Jelmer Vernooij
Use tuples with bzr revid and git sha to avoid lookups.
184
                assert type(revid) is str
0.200.371 by Jelmer Vernooij
Add progress bar when determining revisions to dpush
185
                pb.update("determining revisions to fetch", len(missing))
0.200.1036 by Jelmer Vernooij
More work on roundtrip push support.
186
                sha1 = revid_sha_map.get(revid)
187
                if self._revision_needs_fetching(sha1, revid):
0.200.371 by Jelmer Vernooij
Add progress bar when determining revisions to dpush
188
                    missing.append(revid)
189
        finally:
190
            pb.finished()
0.200.1036 by Jelmer Vernooij
More work on roundtrip push support.
191
        for sha1 in stop_sha1s:
192
            try:
0.200.1167 by Jelmer Vernooij
Fix use of lookup_git_sha during push.
193
                for (kind, (revid, tree_sha, verifiers)) in self.source_store.lookup_git_sha(sha1):
194
                    missing.append(revid)
195
                    revid_sha_map[revid] = sha1
0.200.1036 by Jelmer Vernooij
More work on roundtrip push support.
196
            except KeyError:
197
                continue
0.252.43 by Jelmer Vernooij
Some refactoring, support proper file ids in revision deltas.
198
        return graph.iter_topo_order(missing)
0.200.357 by Jelmer Vernooij
Move push code to push.py.
199
0.200.969 by Jelmer Vernooij
Use tuples with bzr revid and git sha to avoid lookups.
200
    def _get_target_bzr_refs(self):
201
        """Return a dictionary with references.
202
203
        :return: Dictionary with reference names as keys and tuples
204
            with Git SHA, Bazaar revid as values.
205
        """
206
        bzr_refs = {}
0.263.1 by Jelmer Vernooij
Fix dpush for certain branches.
207
        refs = {}
208
        for k in self.target._git.refs.allkeys():
209
            v = self.target._git.refs.read_ref(k)
0.200.1180 by Jelmer Vernooij
Some dpush fixes.
210
            try:
211
                for (kind, type_data) in self.source_store.lookup_git_sha(v):
0.200.1181 by Jelmer Vernooij
Simplify dfetch_refs for local git repositories.
212
                    if kind == "commit" and self.source.has_revision(type_data[0]):
0.200.1180 by Jelmer Vernooij
Some dpush fixes.
213
                        revid = type_data[0]
0.200.1181 by Jelmer Vernooij
Simplify dfetch_refs for local git repositories.
214
                        break
215
                else:
216
                    revid = None
0.200.1180 by Jelmer Vernooij
Some dpush fixes.
217
            except KeyError:
218
                revid = None
0.200.969 by Jelmer Vernooij
Use tuples with bzr revid and git sha to avoid lookups.
219
            bzr_refs[k] = (v, revid)
220
        return bzr_refs
221
0.200.941 by Jelmer Vernooij
Pass update_refs argument to fetch_refs.
222
    def fetch_refs(self, update_refs):
0.200.1234 by Jelmer Vernooij
Lock store rather than repo.
223
        self.source_store.lock_read()
0.200.969 by Jelmer Vernooij
Use tuples with bzr revid and git sha to avoid lookups.
224
        try:
225
            old_refs = self._get_target_bzr_refs()
226
            new_refs = update_refs(old_refs)
0.200.1030 by Jelmer Vernooij
More work on supporting roundtripping push.
227
            self.fetch(mapped_refs=new_refs.values())
0.200.969 by Jelmer Vernooij
Use tuples with bzr revid and git sha to avoid lookups.
228
        finally:
0.200.1234 by Jelmer Vernooij
Lock store rather than repo.
229
            self.source_store.unlock()
0.200.941 by Jelmer Vernooij
Pass update_refs argument to fetch_refs.
230
        return old_refs, new_refs
0.252.5 by Jelmer Vernooij
enable 'bzr push'.
231
0.200.942 by Jelmer Vernooij
pass update_refs to dfetch_refs.
232
    def dfetch_refs(self, update_refs):
0.200.1212 by Jelmer Vernooij
Support read locking object stores.
233
        self.source_store.lock_read()
0.200.969 by Jelmer Vernooij
Use tuples with bzr revid and git sha to avoid lookups.
234
        try:
235
            old_refs = self._get_target_bzr_refs()
236
            new_refs = update_refs(old_refs)
0.200.1181 by Jelmer Vernooij
Simplify dfetch_refs for local git repositories.
237
            gitidmap = {}
238
            revidmap = {}
239
            todo = list(self.missing_revisions(new_refs.values()))
240
            pb = ui.ui_factory.nested_progress_bar()
241
            try:
242
                object_generator = self._get_missing_objects_iterator(pb)
243
                for old_bzr_revid, git_commit in object_generator.import_revisions(
244
                    todo, roundtrip=False):
245
                    new_bzr_revid = self.mapping.revision_id_foreign_to_bzr(git_commit)
0.200.1182 by Jelmer Vernooij
Fix local dpush.
246
                    assert type(old_bzr_revid) is str
247
                    assert type(new_bzr_revid) is str
248
                    assert type(git_commit) is str
0.200.1181 by Jelmer Vernooij
Simplify dfetch_refs for local git repositories.
249
                    revidmap[old_bzr_revid] = new_bzr_revid
250
                    gitidmap[old_bzr_revid] = git_commit
251
                self.target_store.add_objects(object_generator)
252
            finally:
253
                pb.finished()
0.200.969 by Jelmer Vernooij
Use tuples with bzr revid and git sha to avoid lookups.
254
            for name, (gitid, revid) in new_refs.iteritems():
0.200.1182 by Jelmer Vernooij
Fix local dpush.
255
                if gitid is None:
256
                    try:
257
                        gitid = gitidmap[revid]
258
                    except KeyError:
259
                        gitid = self.source_store._lookup_revision_sha1(revid)
260
                self.target_refs[name] = gitid
0.200.969 by Jelmer Vernooij
Use tuples with bzr revid and git sha to avoid lookups.
261
        finally:
0.200.1212 by Jelmer Vernooij
Support read locking object stores.
262
            self.source_store.unlock()
0.200.822 by Jelmer Vernooij
Fix indication of number of revisions pushed in dpush.
263
        return revidmap, old_refs, new_refs
0.200.428 by Jelmer Vernooij
use dfetch_refs, to prepare for dpush to remote repositories.
264
0.200.947 by Jelmer Vernooij
Add convenience method for getting missing objects iterator.
265
    def _get_missing_objects_iterator(self, pb):
266
        return MissingObjectsIterator(self.source_store, self.source, pb)
267
0.200.524 by Jelmer Vernooij
Simplify dpushing multiple heads.
268
    def dfetch(self, stop_revisions):
0.200.357 by Jelmer Vernooij
Move push code to push.py.
269
        """Import the gist of the ancestry of a particular revision."""
270
0.252.4 by Jelmer Vernooij
More work on roundtripping.
271
    def fetch(self, revision_id=None, pb=None, find_ghosts=False,
0.200.1030 by Jelmer Vernooij
More work on supporting roundtripping push.
272
            fetch_spec=None, mapped_refs=None):
0.200.1156 by Jelmer Vernooij
Disable push.
273
        if not self.mapping.roundtripping:
274
            raise NoPushSupport()
0.200.1212 by Jelmer Vernooij
Support read locking object stores.
275
        self.source_store.lock_read()
0.252.4 by Jelmer Vernooij
More work on roundtripping.
276
        try:
0.200.1212 by Jelmer Vernooij
Support read locking object stores.
277
            if mapped_refs is not None:
278
                stop_revisions = mapped_refs
279
            elif revision_id is not None:
280
                stop_revisions = [(None, revision_id)]
281
            elif fetch_spec is not None:
282
                stop_revisions = [(None, revid) for revid in fetch_spec.heads]
283
            else:
284
                stop_revisions = [(None, revid) for revid in self.source.all_revision_ids()]
0.200.968 by Jelmer Vernooij
Add more tests, simplify push code.
285
            todo = list(self.missing_revisions(stop_revisions))
0.252.4 by Jelmer Vernooij
More work on roundtripping.
286
            pb = ui.ui_factory.nested_progress_bar()
287
            try:
0.200.947 by Jelmer Vernooij
Add convenience method for getting missing objects iterator.
288
                object_generator = self._get_missing_objects_iterator(pb)
0.252.6 by Jelmer Vernooij
Roundtripping support for revision ids works.
289
                for (revid, git_sha) in object_generator.import_revisions(
290
                    todo, roundtrip=True):
0.252.11 by Jelmer Vernooij
only set refs/bzr for roundtripped revisions that otherwise couldn't be found.
291
                    try:
292
                        self.mapping.revision_id_bzr_to_foreign(revid)
293
                    except errors.InvalidRevisionId:
0.252.31 by Jelmer Vernooij
Properly escape revids when using them in ref names.
294
                        self.target_refs[self.mapping.revid_as_refname(revid)] = git_sha
0.252.4 by Jelmer Vernooij
More work on roundtripping.
295
                self.target_store.add_objects(object_generator)
296
            finally:
297
                pb.finished()
298
        finally:
0.200.1212 by Jelmer Vernooij
Support read locking object stores.
299
            self.source_store.unlock()
0.252.4 by Jelmer Vernooij
More work on roundtripping.
300
0.200.291 by Jelmer Vernooij
Print proper error about not supporting push.
301
    @staticmethod
302
    def is_compatible(source, target):
303
        """Be compatible with GitRepository."""
0.200.695 by Jelmer Vernooij
Clean up trailing whitespace.
304
        return (not isinstance(source, GitRepository) and
0.200.425 by Jelmer Vernooij
Split out push to remote git repositories.
305
                isinstance(target, LocalGitRepository))
306
307
308
class InterToRemoteGitRepository(InterToGitRepository):
309
0.200.942 by Jelmer Vernooij
pass update_refs to dfetch_refs.
310
    def dfetch_refs(self, update_refs):
0.200.425 by Jelmer Vernooij
Split out push to remote git repositories.
311
        """Import the gist of the ancestry of a particular revision."""
0.200.1065 by Jelmer Vernooij
Don't peel tags automatically when pushing back.
312
        unpeel_map = UnpeelMap.from_repository(self.source)
0.200.425 by Jelmer Vernooij
Split out push to remote git repositories.
313
        revidmap = {}
0.200.942 by Jelmer Vernooij
pass update_refs to dfetch_refs.
314
        def determine_wants(old_refs):
0.200.429 by Jelmer Vernooij
get remote dpush to a point where we now what to send.
315
            ret = {}
0.200.1052 by Jelmer Vernooij
Fix too many values to unpack error.
316
            self.old_refs = dict([(k, (v, None)) for (k, v) in old_refs.iteritems()])
0.200.942 by Jelmer Vernooij
pass update_refs to dfetch_refs.
317
            self.new_refs = update_refs(self.old_refs)
0.200.970 by Jelmer Vernooij
Fix dpush to remote locations.
318
            for name, (gitid, revid) in self.new_refs.iteritems():
319
                if gitid is None:
0.200.1212 by Jelmer Vernooij
Support read locking object stores.
320
                    git_sha = self.source_store._lookup_revision_sha1(revid)
321
                    ret[name] = unpeel_map.re_unpeel_tag(git_sha, old_refs.get(name))
0.200.970 by Jelmer Vernooij
Fix dpush to remote locations.
322
                else:
323
                    ret[name] = gitid
0.200.429 by Jelmer Vernooij
get remote dpush to a point where we now what to send.
324
            return ret
0.200.1212 by Jelmer Vernooij
Support read locking object stores.
325
        self.source_store.lock_read()
0.200.425 by Jelmer Vernooij
Split out push to remote git repositories.
326
        try:
0.200.460 by Jelmer Vernooij
Somewhat fix commit in git working trees.
327
            new_refs = self.target.send_pack(determine_wants,
0.252.37 by Jelmer Vernooij
Factor out some common code for finding refs to send.
328
                    self.source_store.generate_lossy_pack_contents)
0.200.425 by Jelmer Vernooij
Split out push to remote git repositories.
329
        finally:
0.200.1212 by Jelmer Vernooij
Support read locking object stores.
330
            self.source_store.unlock()
0.200.942 by Jelmer Vernooij
pass update_refs to dfetch_refs.
331
        return revidmap, self.old_refs, self.new_refs
0.200.425 by Jelmer Vernooij
Split out push to remote git repositories.
332
0.200.944 by Jelmer Vernooij
Properly error about not supporting push.
333
    def fetch_refs(self, update_refs):
0.252.4 by Jelmer Vernooij
More work on roundtripping.
334
        raise NoPushSupport()
335
0.200.425 by Jelmer Vernooij
Split out push to remote git repositories.
336
    @staticmethod
337
    def is_compatible(source, target):
338
        """Be compatible with GitRepository."""
0.200.695 by Jelmer Vernooij
Clean up trailing whitespace.
339
        return (not isinstance(source, GitRepository) and
0.200.425 by Jelmer Vernooij
Split out push to remote git repositories.
340
                isinstance(target, RemoteGitRepository))