/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
0.358.2 by Jelmer Vernooij
Refresh copyright headers, add my email.
1
# Copyright (C) 2008-2018 Jelmer Vernooij <jelmer@jelmer.uk>
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
2
# Copyright (C) 2007 Canonical Ltd
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
0.358.1 by Jelmer Vernooij
Fix FSF address.
16
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
17
18
"""An adapter between a Git Repository and a Bazaar Branch"""
19
0.200.1594 by Jelmer Vernooij
Use absolute_import everywhere.
20
from __future__ import absolute_import
21
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
22
from .. import (
0.200.1244 by Jelmer Vernooij
Implement GitRepository.check.
23
    check,
0.200.43 by David Allouche
Ultra-experimental support for "bzr pull". No test. No sanity.
24
    errors,
0.200.1281 by Jelmer Vernooij
Provide Repository.get_known_graph_ancestry.
25
    graph as _mod_graph,
0.200.1670 by Jelmer Vernooij
Fix compatibility with newer versions of bzr.
26
    lock,
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
27
    repository,
0.285.5 by Jelmer Vernooij
Fix import.
28
    revision as _mod_revision,
0.425.1 by Jelmer Vernooij
Add really basic check implementation.
29
    trace,
0.200.1411 by Jelmer Vernooij
Fix control files.
30
    transactions,
0.200.1601 by Jelmer Vernooij
remove compatibility code for bzr < 2.5.
31
    ui,
0.200.1646 by Jelmer Vernooij
Rename bzrlib to breezy.
32
    version_info as breezy_version,
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
33
    )
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
34
from ..decorators import only_raises
35
from ..foreign import (
0.200.292 by Jelmer Vernooij
Fix formatting.
36
    ForeignRepository,
37
    )
6986.2.3 by Jelmer Vernooij
Merge trunk
38
from ..sixish import (
7045.1.11 by Jelmer Vernooij
Some annotate fixes.
39
    viewitems,
40
    viewvalues,
41
    )
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
42
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
43
from .commit import (
0.200.387 by Jelmer Vernooij
Initial work on supporting commit in git trees.
44
    GitCommitBuilder,
45
    )
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
46
from .filegraph import (
0.200.1283 by Jelmer Vernooij
Provide Repository.get_file_graph() and Tree.get_file_revision().
47
    GitFileLastChangeScanner,
48
    GitFileParentProvider,
49
    )
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
50
from .mapping import (
0.200.256 by Jelmer Vernooij
Add tests for import_revision_gist.
51
    default_mapping,
0.200.1263 by Jelmer Vernooij
Fix foreign_vcs_git.
52
    foreign_vcs_git,
0.200.256 by Jelmer Vernooij
Add tests for import_revision_gist.
53
    mapping_registry,
54
    )
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
55
from .tree import (
0.200.617 by Jelmer Vernooij
Add custom InterTree for use between git revision trees.
56
    GitRevisionTree,
57
    )
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
58
59
0.200.1636 by Jelmer Vernooij
Some formatting fixes.
60
from dulwich.errors import (
61
    NotCommitError,
62
    )
0.252.21 by Jelmer Vernooij
Fix GitRepository.all_revision_ids() to find all revisions.
63
from dulwich.objects import (
64
    Commit,
0.200.1153 by Jelmer Vernooij
Import ZERO_SHA from dulwich.objects.
65
    ZERO_SHA,
0.252.21 by Jelmer Vernooij
Fix GitRepository.all_revision_ids() to find all revisions.
66
    )
0.200.1233 by Jelmer Vernooij
Implement Repository.iter_files_bytes.
67
from dulwich.object_store import (
68
    tree_lookup_path,
69
    )
0.252.21 by Jelmer Vernooij
Fix GitRepository.all_revision_ids() to find all revisions.
70
71
0.200.1246 by Jelmer Vernooij
Provide GitRepository.reconcile.
72
class RepoReconciler(object):
73
    """Reconciler that reconciles a repository.
74
75
    """
76
77
    def __init__(self, repo, other=None, thorough=False):
78
        """Construct a RepoReconciler.
79
80
        :param thorough: perform a thorough check which may take longer but
81
                         will correct non-data loss issues such as incorrect
82
                         cached data.
83
        """
84
        self.repo = repo
85
86
    def reconcile(self):
87
        """Perform reconciliation.
88
89
        After reconciliation the following attributes document found issues:
90
        inconsistent_parents: The number of revisions in the repository whose
91
                              ancestry was being reported incorrectly.
92
        garbage_inventories: The number of inventory objects without revisions
93
                             that were garbage collected.
94
        """
95
96
0.200.1244 by Jelmer Vernooij
Implement GitRepository.check.
97
class GitCheck(check.Check):
98
99
    def __init__(self, repository, check_repo=True):
100
        self.repository = repository
0.425.1 by Jelmer Vernooij
Add really basic check implementation.
101
        self.check_repo = check_repo
0.200.1244 by Jelmer Vernooij
Implement GitRepository.check.
102
        self.checked_rev_cnt = 0
0.425.1 by Jelmer Vernooij
Add really basic check implementation.
103
        self.object_count = None
104
        self.problems = []
0.200.1244 by Jelmer Vernooij
Implement GitRepository.check.
105
106
    def check(self, callback_refs=None, check_repo=True):
107
        if callback_refs is None:
108
            callback_refs = {}
0.425.1 by Jelmer Vernooij
Add really basic check implementation.
109
        with self.repository.lock_read(), ui.ui_factory.nested_progress_bar() as self.progress:
110
            shas = set(self.repository._git.object_store)
111
            self.object_count = len(shas)
112
            # TODO(jelmer): Check more things
113
            for i, sha in enumerate(shas):
114
                self.progress.update('checking objects', i, self.object_count)
115
                o = self.repository._git.object_store[sha]
116
                try:
117
                    o.check()
118
                except Exception as e:
119
                    self.problems.append((sha, e))
120
121
    def _report_repo_results(self, verbose):
122
        trace.note('checked repository {0} format {1}'.format(
123
            self.repository.user_url,
124
            self.repository._format))
125
        trace.note('%6d objects', self.object_count)
126
        for sha, problem in self.problems:
127
            trace.note('%s: %s', sha, problem)
0.200.1244 by Jelmer Vernooij
Implement GitRepository.check.
128
129
    def report_results(self, verbose):
0.425.1 by Jelmer Vernooij
Add really basic check implementation.
130
        if self.check_repo:
131
            self._report_repo_results(verbose)
0.200.1244 by Jelmer Vernooij
Implement GitRepository.check.
132
133
0.200.1447 by Jelmer Vernooij
Load optimisers at most once.
134
_optimisers_loaded = False
135
136
def lazy_load_optimisers():
137
    global _optimisers_loaded
138
    if _optimisers_loaded:
139
        return
0.401.2 by Jelmer Vernooij
Move all InterRepository implementations into interrepo.
140
    from . import interrepo
141
    for optimiser in [interrepo.InterRemoteGitNonGitRepository,
142
                      interrepo.InterLocalGitNonGitRepository,
143
                      interrepo.InterLocalGitLocalGitRepository,
144
                      interrepo.InterRemoteGitLocalGitRepository,
145
                      interrepo.InterToLocalGitRepository,
0.401.3 by Jelmer Vernooij
Formatting fixes.
146
                      interrepo.InterToRemoteGitRepository,
147
                      ]:
0.200.1447 by Jelmer Vernooij
Load optimisers at most once.
148
        repository.InterRepository.register_optimiser(optimiser)
149
    _optimisers_loaded = True
150
151
0.200.115 by Jelmer Vernooij
Pass mapping object.
152
class GitRepository(ForeignRepository):
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
153
    """An adapter to git repositories for bzr."""
154
0.200.41 by David Allouche
Define _serializer = None in GitRepository.
155
    _serializer = None
0.200.1263 by Jelmer Vernooij
Fix foreign_vcs_git.
156
    vcs = foreign_vcs_git
0.200.1086 by Jelmer Vernooij
Provide chk_bytes attribute.
157
    chk_bytes = None
0.200.41 by David Allouche
Define _serializer = None in GitRepository.
158
0.200.1411 by Jelmer Vernooij
Fix control files.
159
    def __init__(self, gitdir):
0.200.1447 by Jelmer Vernooij
Load optimisers at most once.
160
        self._transport = gitdir.root_transport
0.200.1307 by Jelmer Vernooij
Formatting fixes, specify path to a couple more functions.
161
        super(GitRepository, self).__init__(GitRepositoryFormat(),
0.200.1601 by Jelmer Vernooij
remove compatibility code for bzr < 2.5.
162
            gitdir, control_files=None)
0.200.1449 by Jelmer Vernooij
Fix compatibility with bzr < 2.5 when used with remote repositories.
163
        self.base = gitdir.root_transport.base
0.200.1447 by Jelmer Vernooij
Load optimisers at most once.
164
        lazy_load_optimisers()
0.200.1411 by Jelmer Vernooij
Fix control files.
165
        self._lock_mode = None
166
        self._lock_count = 0
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
167
0.200.1231 by Jelmer Vernooij
Implement GitRepository.add_fallback_repository.
168
    def add_fallback_repository(self, basis_url):
0.200.1307 by Jelmer Vernooij
Formatting fixes, specify path to a couple more functions.
169
        raise errors.UnstackableRepositoryFormat(self._format,
170
            self.control_transport.base)
0.200.1231 by Jelmer Vernooij
Implement GitRepository.add_fallback_repository.
171
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
172
    def is_shared(self):
0.200.886 by Jelmer Vernooij
Git repositories are not shared.
173
        return False
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
174
0.200.1411 by Jelmer Vernooij
Fix control files.
175
    def get_physical_lock_status(self):
176
        return False
177
178
    def lock_write(self):
179
        """See Branch.lock_write()."""
180
        if self._lock_mode:
0.361.1 by Jelmer Vernooij
Don't use assert.
181
            if self._lock_mode != 'w':
182
                raise errors.ReadOnlyError(self)
0.200.1411 by Jelmer Vernooij
Fix control files.
183
            self._lock_count += 1
184
        else:
185
            self._lock_mode = 'w'
186
            self._lock_count = 1
0.334.1 by Jelmer Vernooij
Improve transaction and write group handling.
187
            self._transaction = transactions.WriteTransaction()
0.200.1680 by Jelmer Vernooij
Fix repo locks.
188
        return repository.RepositoryWriteLockResult(self.unlock, None)
0.200.1411 by Jelmer Vernooij
Fix control files.
189
0.200.1454 by Jelmer Vernooij
Provide Repository.break_lock.
190
    def break_lock(self):
191
        raise NotImplementedError(self.break_lock)
192
0.200.1411 by Jelmer Vernooij
Fix control files.
193
    def dont_leave_lock_in_place(self):
194
        raise NotImplementedError(self.dont_leave_lock_in_place)
195
196
    def leave_lock_in_place(self):
197
        raise NotImplementedError(self.leave_lock_in_place)
198
199
    def lock_read(self):
200
        if self._lock_mode:
0.361.1 by Jelmer Vernooij
Don't use assert.
201
            if self._lock_mode not in ('r', 'w'):
202
                raise AssertionError
0.200.1411 by Jelmer Vernooij
Fix control files.
203
            self._lock_count += 1
204
        else:
205
            self._lock_mode = 'r'
206
            self._lock_count = 1
0.334.1 by Jelmer Vernooij
Improve transaction and write group handling.
207
            self._transaction = transactions.ReadOnlyTransaction()
0.200.1670 by Jelmer Vernooij
Fix compatibility with newer versions of bzr.
208
        return lock.LogicalLockResult(self.unlock)
0.200.1411 by Jelmer Vernooij
Fix control files.
209
210
    @only_raises(errors.LockNotHeld, errors.LockBroken)
211
    def unlock(self):
212
        if self._lock_count == 0:
213
            raise errors.LockNotHeld(self)
214
        if self._lock_count == 1 and self._lock_mode == 'w':
215
            if self._write_group is not None:
216
                self.abort_write_group()
217
                self._lock_count -= 1
218
                self._lock_mode = None
219
                raise errors.BzrError(
220
                    'Must end write groups before releasing write locks.')
221
        self._lock_count -= 1
222
        if self._lock_count == 0:
223
            self._lock_mode = None
0.334.1 by Jelmer Vernooij
Improve transaction and write group handling.
224
            transaction = self._transaction
225
            self._transaction = None
226
            transaction.finish()
0.200.1411 by Jelmer Vernooij
Fix control files.
227
228
    def is_write_locked(self):
229
        return (self._lock_mode == 'w')
230
231
    def is_locked(self):
232
        return (self._lock_mode is not None)
233
234
    def get_transaction(self):
235
        """See Repository.get_transaction()."""
0.334.1 by Jelmer Vernooij
Improve transaction and write group handling.
236
        if self._transaction is None:
0.200.1411 by Jelmer Vernooij
Fix control files.
237
            return transactions.PassThroughTransaction()
238
        else:
0.334.1 by Jelmer Vernooij
Improve transaction and write group handling.
239
            return self._transaction
0.200.1411 by Jelmer Vernooij
Fix control files.
240
0.200.1246 by Jelmer Vernooij
Provide GitRepository.reconcile.
241
    def reconcile(self, other=None, thorough=False):
242
        """Reconcile this repository."""
243
        reconciler = RepoReconciler(self, thorough=thorough)
244
        reconciler.reconcile()
245
        return reconciler
246
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
247
    def supports_rich_root(self):
248
        return True
249
250
    def get_mapping(self):
251
        return default_mapping
252
0.200.147 by Jelmer Vernooij
Merge new dulwich; fetching objects from local repository works now; they aren't converted yet though.
253
    def make_working_trees(self):
0.200.1546 by Jelmer Vernooij
Provide get_config.
254
        return not self._git.get_config().get_boolean(("core", ), "bare")
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
255
0.200.557 by Jelmer Vernooij
Implement GitRepository.revision_graph_can_have_wrong_parents().
256
    def revision_graph_can_have_wrong_parents(self):
257
        return False
258
0.200.1158 by Jelmer Vernooij
Implement stub Repositor.add_signature_text.
259
    def add_signature_text(self, revid, signature):
260
        raise errors.UnsupportedOperation(self.add_signature_text, self)
261
0.200.1467 by Jelmer Vernooij
Implement GitRepository.sign_revision.
262
    def sign_revision(self, revision_id, gpg_strategy):
263
        raise errors.UnsupportedOperation(self.add_signature_text, self)
264
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
265
266
class LocalGitRepository(GitRepository):
0.200.276 by Jelmer Vernooij
Improve formatting.
267
    """Git repository on the file system."""
0.200.139 by Jelmer Vernooij
Share more code between local and remote classes, support opening remote branches.
268
0.200.1411 by Jelmer Vernooij
Fix control files.
269
    def __init__(self, gitdir):
270
        GitRepository.__init__(self, gitdir)
0.200.90 by Jelmer Vernooij
Basic support for opening working trees.
271
        self._git = gitdir._git
0.200.1283 by Jelmer Vernooij
Provide Repository.get_file_graph() and Tree.get_file_revision().
272
        self._file_change_scanner = GitFileLastChangeScanner(self)
0.334.1 by Jelmer Vernooij
Improve transaction and write group handling.
273
        self._transaction = None
0.200.45 by David Allouche
More performance hacking, introduce sqlite cache, escape characters in commits that break serializers.
274
0.200.1224 by Jelmer Vernooij
provide explicit GitRepository.get_commit_builder.
275
    def get_commit_builder(self, branch, parents, config, timestamp=None,
276
                           timezone=None, committer=None, revprops=None,
277
                           revision_id=None, lossy=False):
278
        """Obtain a CommitBuilder for this repository.
279
280
        :param branch: Branch to commit to.
281
        :param parents: Revision ids of the parents of the new revision.
282
        :param config: Configuration to use.
283
        :param timestamp: Optional timestamp recorded for commit.
284
        :param timezone: Optional timezone for timestamp.
285
        :param committer: Optional committer to set for commit.
286
        :param revprops: Optional dictionary of revision properties.
287
        :param revision_id: Optional revision id.
288
        :param lossy: Whether to discard data that can not be natively
289
            represented, when pushing to a foreign VCS
290
        """
0.294.1 by Jelmer Vernooij
Fix write group handling when creating commit builder fails.
291
        builder = GitCommitBuilder(self, parents, config,
292
                timestamp, timezone, committer, revprops, revision_id,
293
                lossy)
0.200.1229 by Jelmer Vernooij
Provide CommitBuilder.any_changes.
294
        self.start_write_group()
0.294.1 by Jelmer Vernooij
Fix write group handling when creating commit builder fails.
295
        return builder
0.200.1224 by Jelmer Vernooij
provide explicit GitRepository.get_commit_builder.
296
0.200.1283 by Jelmer Vernooij
Provide Repository.get_file_graph() and Tree.get_file_revision().
297
    def get_file_graph(self):
0.200.1307 by Jelmer Vernooij
Formatting fixes, specify path to a couple more functions.
298
        return _mod_graph.Graph(GitFileParentProvider(
299
            self._file_change_scanner))
0.200.1283 by Jelmer Vernooij
Provide Repository.get_file_graph() and Tree.get_file_revision().
300
0.200.1233 by Jelmer Vernooij
Implement Repository.iter_files_bytes.
301
    def iter_files_bytes(self, desired_files):
302
        """Iterate through file versions.
303
304
        Files will not necessarily be returned in the order they occur in
305
        desired_files.  No specific order is guaranteed.
306
307
        Yields pairs of identifier, bytes_iterator.  identifier is an opaque
308
        value supplied by the caller as part of desired_files.  It should
309
        uniquely identify the file version in the caller's context.  (Examples:
310
        an index number or a TreeTransform trans_id.)
311
312
        bytes_iterator is an iterable of bytestrings for the file.  The
313
        kind of iterable and length of the bytestrings are unspecified, but for
314
        this implementation, it is a list of bytes produced by
315
        VersionedFile.get_record_stream().
316
317
        :param desired_files: a list of (file_id, revision_id, identifier)
318
            triples
319
        """
320
        per_revision = {}
321
        for (file_id, revision_id, identifier) in desired_files:
0.200.1307 by Jelmer Vernooij
Formatting fixes, specify path to a couple more functions.
322
            per_revision.setdefault(revision_id, []).append(
323
                (file_id, identifier))
7045.2.13 by Jelmer Vernooij
Fix some workingtree_4 tests.
324
        for revid, files in viewitems(per_revision):
0.200.1745 by Jelmer Vernooij
Fix iter_files_bytes.
325
            try:
326
                (commit_id, mapping) = self.lookup_bzr_revision_id(revid)
327
            except errors.NoSuchRevision:
328
                raise errors.RevisionNotPresent(revid, self)
0.200.1233 by Jelmer Vernooij
Implement Repository.iter_files_bytes.
329
            try:
330
                commit = self._git.object_store[commit_id]
331
            except KeyError:
332
                raise errors.RevisionNotPresent(revid, self)
333
            root_tree = commit.tree
334
            for fileid, identifier in files:
0.200.1715 by Jelmer Vernooij
Fix some more tests.
335
                try:
336
                    path = mapping.parse_file_id(fileid)
337
                except ValueError:
338
                    raise errors.RevisionNotPresent((fileid, revid), self)
0.200.1233 by Jelmer Vernooij
Implement Repository.iter_files_bytes.
339
                try:
340
                    obj = tree_lookup_path(
7045.4.1 by Jelmer Vernooij
Some brz-git fixes.
341
                        self._git.object_store.__getitem__, root_tree,
342
                        path.encode('utf-8'))
0.200.1233 by Jelmer Vernooij
Implement Repository.iter_files_bytes.
343
                    if isinstance(obj, tuple):
344
                        (mode, item_id) = obj
345
                        obj = self._git.object_store[item_id]
346
                except KeyError:
347
                    raise errors.RevisionNotPresent((fileid, revid), self)
348
                else:
7045.2.13 by Jelmer Vernooij
Fix some workingtree_4 tests.
349
                    if obj.type_name == b"tree":
0.200.1233 by Jelmer Vernooij
Implement Repository.iter_files_bytes.
350
                        yield (identifier, [])
7045.2.13 by Jelmer Vernooij
Fix some workingtree_4 tests.
351
                    elif obj.type_name == b"blob":
0.200.1233 by Jelmer Vernooij
Implement Repository.iter_files_bytes.
352
                        yield (identifier, obj.chunked)
353
                    else:
354
                        raise AssertionError("file text resolved to %r" % obj)
355
0.200.1533 by Jelmer Vernooij
Improve gather_stats.
356
    def gather_stats(self, revid=None, committers=None):
357
        """See Repository.gather_stats()."""
358
        result = super(LocalGitRepository, self).gather_stats(revid, committers)
359
        revs = []
360
        for sha in self._git.object_store:
361
            o = self._git.object_store[sha]
7045.2.13 by Jelmer Vernooij
Fix some workingtree_4 tests.
362
            if o.type_name == b"commit":
0.200.1533 by Jelmer Vernooij
Improve gather_stats.
363
                revs.append(o.id)
364
        result['revisions'] = len(revs)
365
        return result
366
0.252.46 by Jelmer Vernooij
Generate refs/bzr/* if not set yet.
367
    def _iter_revision_ids(self):
0.200.1021 by Jelmer Vernooij
Put testament sha1 in revisions.
368
        mapping = self.get_mapping()
0.252.21 by Jelmer Vernooij
Fix GitRepository.all_revision_ids() to find all revisions.
369
        for sha in self._git.object_store:
370
            o = self._git.object_store[sha]
371
            if not isinstance(o, Commit):
372
                continue
0.200.1029 by Jelmer Vernooij
Use dictionary with verifiers rather than requiring testament3-sha1 everywhere.
373
            rev, roundtrip_revid, verifiers = mapping.import_commit(o,
0.261.6 by Jelmer Vernooij
Use mapping.revision_id_foreign_to_bzr to find parents everywhere.
374
                mapping.revision_id_foreign_to_bzr)
0.200.1021 by Jelmer Vernooij
Put testament sha1 in revisions.
375
            yield o.id, rev.revision_id, roundtrip_revid
0.252.46 by Jelmer Vernooij
Generate refs/bzr/* if not set yet.
376
377
    def all_revision_ids(self):
0.200.1727 by Jelmer Vernooij
Change all_revision_ids type to list.
378
        ret = set()
0.200.1021 by Jelmer Vernooij
Put testament sha1 in revisions.
379
        for git_sha, revid, roundtrip_revid in self._iter_revision_ids():
380
            if roundtrip_revid:
381
                ret.add(roundtrip_revid)
0.200.1325 by Jelmer Vernooij
More test fixes.
382
            else:
383
                ret.add(revid)
0.200.1727 by Jelmer Vernooij
Change all_revision_ids type to list.
384
        return list(ret)
0.200.74 by Jelmer Vernooij
Implement Repository.all_revision_ids().
385
0.200.1552 by Jelmer Vernooij
Claim to support nested trees.
386
    def _get_parents(self, revid, no_alternates=False):
0.200.1756 by Jelmer Vernooij
Initial work on annotate support.
387
        if type(revid) != bytes:
0.200.1328 by Jelmer Vernooij
More test fixes.
388
            raise ValueError
389
        try:
0.200.1343 by Jelmer Vernooij
Update docstrings.
390
            (hexsha, mapping) = self.lookup_bzr_revision_id(revid)
0.200.1328 by Jelmer Vernooij
More test fixes.
391
        except errors.NoSuchRevision:
392
            return None
0.200.1552 by Jelmer Vernooij
Claim to support nested trees.
393
        # FIXME: Honor no_alternates setting
0.200.1328 by Jelmer Vernooij
More test fixes.
394
        try:
0.200.1553 by Jelmer Vernooij
Avoid using nonexistant method.
395
            commit = self._git.object_store[hexsha]
0.200.1328 by Jelmer Vernooij
More test fixes.
396
        except KeyError:
397
            return None
6965.1.1 by Jelmer Vernooij
Add basic support for horizoned history.
398
        ret = []
399
        for p in commit.parents:
400
            try:
401
                ret.append(self.lookup_foreign_revision_id(p, mapping))
402
            except KeyError:
403
                ret.append(mapping.revision_id_foreign_to_bzr(p))
404
        return ret
0.200.1328 by Jelmer Vernooij
More test fixes.
405
0.200.1552 by Jelmer Vernooij
Claim to support nested trees.
406
    def _get_parent_map_no_fallbacks(self, revids):
407
        return self.get_parent_map(revids, no_alternates=True)
408
409
    def get_parent_map(self, revids, no_alternates=False):
0.200.131 by Jelmer Vernooij
Fix all tests but two, use rich roots by default.
410
        parent_map = {}
411
        for revision_id in revids:
0.200.1552 by Jelmer Vernooij
Claim to support nested trees.
412
            parents = self._get_parents(revision_id, no_alternates=no_alternates)
0.285.5 by Jelmer Vernooij
Fix import.
413
            if revision_id == _mod_revision.NULL_REVISION:
0.200.1329 by Jelmer Vernooij
Fix more tests.
414
                parent_map[revision_id] = ()
415
                continue
0.200.1328 by Jelmer Vernooij
More test fixes.
416
            if parents is None:
417
                continue
0.200.1324 by Jelmer Vernooij
More work on roundtripping support.
418
            if len(parents) == 0:
0.285.5 by Jelmer Vernooij
Fix import.
419
                parents = [_mod_revision.NULL_REVISION]
0.200.1094 by Jelmer Vernooij
Fix test_get_no_parents.
420
            parent_map[revision_id] = tuple(parents)
0.200.131 by Jelmer Vernooij
Fix all tests but two, use rich roots by default.
421
        return parent_map
422
0.200.1281 by Jelmer Vernooij
Provide Repository.get_known_graph_ancestry.
423
    def get_known_graph_ancestry(self, revision_ids):
424
        """Return the known graph for a set of revision ids and their ancestors.
425
        """
426
        pending = set(revision_ids)
427
        parent_map = {}
428
        while pending:
0.200.1328 by Jelmer Vernooij
More test fixes.
429
            this_parent_map = {}
430
            for revid in pending:
0.285.5 by Jelmer Vernooij
Fix import.
431
                if revid == _mod_revision.NULL_REVISION:
0.200.1328 by Jelmer Vernooij
More test fixes.
432
                    continue
433
                parents = self._get_parents(revid)
434
                if parents is not None:
435
                    this_parent_map[revid] = parents
0.200.1281 by Jelmer Vernooij
Provide Repository.get_known_graph_ancestry.
436
            parent_map.update(this_parent_map)
437
            pending = set()
7045.4.4 by Jelmer Vernooij
Fix more git tests.
438
            for values in viewvalues(this_parent_map):
439
                pending.update(values)
0.200.1281 by Jelmer Vernooij
Provide Repository.get_known_graph_ancestry.
440
            pending = pending.difference(parent_map)
441
        return _mod_graph.KnownGraph(parent_map)
442
0.200.43 by David Allouche
Ultra-experimental support for "bzr pull". No test. No sanity.
443
    def get_signature_text(self, revision_id):
0.386.1 by Jelmer Vernooij
Support signing commits.
444
        git_commit_id, mapping = self.lookup_bzr_revision_id(revision_id)
445
        try:
446
            commit = self._git.object_store[git_commit_id]
447
        except KeyError:
448
            raise errors.NoSuchRevision(self, revision_id)
449
        if commit.gpgsig is None:
450
            raise errors.NoSuchRevision(self, revision_id)
451
        return commit.gpgsig
0.200.43 by David Allouche
Ultra-experimental support for "bzr pull". No test. No sanity.
452
0.200.1244 by Jelmer Vernooij
Implement GitRepository.check.
453
    def check(self, revision_ids=None, callback_refs=None, check_repo=True):
454
        result = GitCheck(self, check_repo=check_repo)
455
        result.check(callback_refs)
456
        return result
457
0.257.1 by Jelmer Vernooij
use transport repo objects even for local access.
458
    def pack(self, hint=None, clean_obsolete_packs=False):
459
        self._git.object_store.pack_loose_objects()
460
0.200.650 by Jelmer Vernooij
Use standard names for lookup functions.
461
    def lookup_foreign_revision_id(self, foreign_revid, mapping=None):
0.200.124 by Jelmer Vernooij
Add lookup_revision_id stub.
462
        """Lookup a revision id.
0.200.676 by Jelmer Vernooij
Avoid iterating over all keys in the tdb database.
463
0.200.1508 by Jelmer Vernooij
Add docstring, use peel_sha.
464
        :param foreign_revid: Foreign revision id to look up
465
        :param mapping: Mapping to use (use default mapping if not specified)
466
        :raise KeyError: If foreign revision was not found
467
        :return: bzr revision id
0.200.124 by Jelmer Vernooij
Add lookup_revision_id stub.
468
        """
7018.3.2 by Jelmer Vernooij
Fix some git tests.
469
        if not isinstance(foreign_revid, bytes):
0.361.1 by Jelmer Vernooij
Don't use assert.
470
            raise TypeError(foreign_revid)
0.200.649 by Jelmer Vernooij
Make GitRevisions VF implementation behave as the interface expects.
471
        if mapping is None:
472
            mapping = self.get_mapping()
0.200.914 by Jelmer Vernooij
Fix tests.
473
        if foreign_revid == ZERO_SHA:
0.285.5 by Jelmer Vernooij
Fix import.
474
            return _mod_revision.NULL_REVISION
0.200.1508 by Jelmer Vernooij
Add docstring, use peel_sha.
475
        commit = self._git.object_store.peel_sha(foreign_revid)
0.200.1403 by Jelmer Vernooij
Cope with tags pointing at tree objects when cloning local git repositories.
476
        if not isinstance(commit, Commit):
477
            raise NotCommitError(commit.id)
0.200.1029 by Jelmer Vernooij
Use dictionary with verifiers rather than requiring testament3-sha1 everywhere.
478
        rev, roundtrip_revid, verifiers = mapping.import_commit(commit,
0.261.6 by Jelmer Vernooij
Use mapping.revision_id_foreign_to_bzr to find parents everywhere.
479
            mapping.revision_id_foreign_to_bzr)
0.200.1021 by Jelmer Vernooij
Put testament sha1 in revisions.
480
        # FIXME: check testament before doing this?
481
        if roundtrip_revid:
482
            return roundtrip_revid
483
        else:
484
            return rev.revision_id
0.200.124 by Jelmer Vernooij
Add lookup_revision_id stub.
485
0.200.60 by Jelmer Vernooij
Support signature functions.
486
    def has_signature_for_revision_id(self, revision_id):
0.200.1343 by Jelmer Vernooij
Update docstrings.
487
        """Check whether a GPG signature is present for this revision.
488
489
        This is never the case for Git repositories.
490
        """
0.386.2 by Jelmer Vernooij
Support verifying signatures.
491
        try:
492
            self.get_signature_text(revision_id)
493
        except errors.NoSuchRevision:
494
            return False
495
        else:
496
            return True
497
498
    def verify_revision_signature(self, revision_id, gpg_strategy):
499
        """Verify the signature on a revision.
500
501
        :param revision_id: the revision to verify
502
        :gpg_strategy: the GPGStrategy object to used
503
504
        :return: gpg.SIGNATURE_VALID or a failed SIGNATURE_ value
505
        """
506
        from breezy import gpg
507
        with self.lock_read():
508
            git_commit_id, mapping = self.lookup_bzr_revision_id(revision_id)
509
            try:
510
                commit = self._git.object_store[git_commit_id]
511
            except KeyError:
512
                raise errors.NoSuchRevision(self, revision_id)
513
514
            if commit.gpgsig is None:
515
                return gpg.SIGNATURE_NOT_SIGNED, None
516
517
            without_sig = Commit.from_string(commit.as_raw_string())
518
            without_sig.gpgsig = None
519
0.386.3 by Jelmer Vernooij
use new API.
520
            (result, key, plain_text) = gpg_strategy.verify(without_sig.as_raw_string(), commit.gpgsig)
521
            return (result, key)
0.200.60 by Jelmer Vernooij
Support signature functions.
522
0.200.913 by Jelmer Vernooij
Fix tests.
523
    def lookup_bzr_revision_id(self, bzr_revid, mapping=None):
0.200.1343 by Jelmer Vernooij
Update docstrings.
524
        """Lookup a bzr revision id in a Git repository.
525
526
        :param bzr_revid: Bazaar revision id
527
        :param mapping: Optional mapping to use
528
        :return: Tuple with git commit id, mapping that was used and supplement
529
            details
530
        """
0.200.105 by Jelmer Vernooij
Add common function for finding git commit by bzr revid.
531
        try:
0.200.1343 by Jelmer Vernooij
Update docstrings.
532
            (git_sha, mapping) = mapping_registry.revision_id_bzr_to_foreign(bzr_revid)
0.200.105 by Jelmer Vernooij
Add common function for finding git commit by bzr revid.
533
        except errors.InvalidRevisionId:
0.200.913 by Jelmer Vernooij
Fix tests.
534
            if mapping is None:
535
                mapping = self.get_mapping()
0.252.6 by Jelmer Vernooij
Roundtripping support for revision ids works.
536
            try:
0.200.1307 by Jelmer Vernooij
Formatting fixes, specify path to a couple more functions.
537
                return (self._git.refs[mapping.revid_as_refname(bzr_revid)],
538
                        mapping)
0.252.6 by Jelmer Vernooij
Roundtripping support for revision ids works.
539
            except KeyError:
0.252.46 by Jelmer Vernooij
Generate refs/bzr/* if not set yet.
540
                # Update refs from Git commit objects
541
                # FIXME: Hitting this a lot will be very inefficient...
0.200.1601 by Jelmer Vernooij
remove compatibility code for bzr < 2.5.
542
                pb = ui.ui_factory.nested_progress_bar()
543
                try:
544
                    for i, (git_sha, revid, roundtrip_revid) in enumerate(self._iter_revision_ids()):
545
                        if not roundtrip_revid:
546
                            continue
547
                        pb.update("resolving revision id", i)
548
                        refname = mapping.revid_as_refname(roundtrip_revid)
549
                        self._git.refs[refname] = git_sha
550
                        if roundtrip_revid == bzr_revid:
551
                            return git_sha, mapping
552
                finally:
553
                    pb.finished()
0.200.913 by Jelmer Vernooij
Fix tests.
554
                raise errors.NoSuchRevision(self, bzr_revid)
0.200.1343 by Jelmer Vernooij
Update docstrings.
555
        else:
556
            return (git_sha, mapping)
0.200.105 by Jelmer Vernooij
Add common function for finding git commit by bzr revid.
557
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
558
    def get_revision(self, revision_id):
7018.3.7 by Jelmer Vernooij
Fix remaining git tests.
559
        if not isinstance(revision_id, bytes):
0.200.1101 by Jelmer Vernooij
Raise InvalidRevisionId on invalid type being specified to Repository.get_revision.
560
            raise errors.InvalidRevisionId(revision_id, self)
0.200.650 by Jelmer Vernooij
Use standard names for lookup functions.
561
        git_commit_id, mapping = self.lookup_bzr_revision_id(revision_id)
0.200.147 by Jelmer Vernooij
Merge new dulwich; fetching objects from local repository works now; they aren't converted yet though.
562
        try:
0.200.1552 by Jelmer Vernooij
Claim to support nested trees.
563
            commit = self._git.object_store[git_commit_id]
0.200.147 by Jelmer Vernooij
Merge new dulwich; fetching objects from local repository works now; they aren't converted yet though.
564
        except KeyError:
565
            raise errors.NoSuchRevision(self, revision_id)
0.200.1029 by Jelmer Vernooij
Use dictionary with verifiers rather than requiring testament3-sha1 everywhere.
566
        revision, roundtrip_revid, verifiers = mapping.import_commit(
0.200.1021 by Jelmer Vernooij
Put testament sha1 in revisions.
567
            commit, self.lookup_foreign_revision_id)
0.361.1 by Jelmer Vernooij
Don't use assert.
568
        if revision is None:
569
            raise AssertionError
0.200.1029 by Jelmer Vernooij
Use dictionary with verifiers rather than requiring testament3-sha1 everywhere.
570
        # FIXME: check verifiers ?
0.200.1021 by Jelmer Vernooij
Put testament sha1 in revisions.
571
        if roundtrip_revid:
572
            revision.revision_id = roundtrip_revid
0.200.43 by David Allouche
Ultra-experimental support for "bzr pull". No test. No sanity.
573
        return revision
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
574
575
    def has_revision(self, revision_id):
0.200.1119 by Jelmer Vernooij
Refactor repository initialization.
576
        """See Repository.has_revision."""
0.285.5 by Jelmer Vernooij
Fix import.
577
        if revision_id == _mod_revision.NULL_REVISION:
0.200.1122 by Jelmer Vernooij
has_revision(null:) should always return True.
578
            return True
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
579
        try:
0.200.902 by Jelmer Vernooij
Fix Repository.has_revision{s,}.
580
            git_commit_id, mapping = self.lookup_bzr_revision_id(revision_id)
0.200.130 by Jelmer Vernooij
Make most tree inspection tests succeed.
581
        except errors.NoSuchRevision:
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
582
            return False
0.200.902 by Jelmer Vernooij
Fix Repository.has_revision{s,}.
583
        return (git_commit_id in self._git)
584
585
    def has_revisions(self, revision_ids):
0.200.1119 by Jelmer Vernooij
Refactor repository initialization.
586
        """See Repository.has_revisions."""
0.200.913 by Jelmer Vernooij
Fix tests.
587
        return set(filter(self.has_revision, revision_ids))
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
588
0.200.1657 by Jelmer Vernooij
Implement iter_revisions.
589
    def iter_revisions(self, revision_ids):
0.200.1119 by Jelmer Vernooij
Refactor repository initialization.
590
        """See Repository.get_revisions."""
0.200.1657 by Jelmer Vernooij
Implement iter_revisions.
591
        for revid in revision_ids:
592
            try:
593
                rev = self.get_revision(revid)
594
            except errors.NoSuchRevision:
595
                rev = None
596
            yield (revid, rev)
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
597
598
    def revision_trees(self, revids):
0.200.1119 by Jelmer Vernooij
Refactor repository initialization.
599
        """See Repository.revision_trees."""
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
600
        for revid in revids:
601
            yield self.revision_tree(revid)
602
603
    def revision_tree(self, revision_id):
0.200.1119 by Jelmer Vernooij
Refactor repository initialization.
604
        """See Repository.revision_tree."""
0.287.6 by Jelmer Vernooij
Fix some more tests.
605
        if revision_id is None:
606
            raise ValueError('invalid revision id %s' % revision_id)
0.200.195 by Jelmer Vernooij
Return mapping in revision_id_bzr_to_foreign() as required by the interface.
607
        return GitRevisionTree(self, revision_id)
0.200.18 by John Arbash Meinel
Start splitting up the Git{Branch,Dir,Repository} into separate modules, etc.
608
0.285.4 by Jelmer Vernooij
Add get_deltas_for_revisoins implementation.
609
    def get_deltas_for_revisions(self, revisions, specific_fileids=None):
610
        """Produce a generator of revision deltas.
611
612
        Note that the input is a sequence of REVISIONS, not revision_ids.
613
        Trees will be held in memory until the generator exits.
614
        Each delta is relative to the revision's lefthand predecessor.
615
616
        :param specific_fileids: if not None, the result is filtered
617
          so that only those file-ids, their parents and their
618
          children are included.
619
        """
620
        # Get the revision-ids of interest
621
        required_trees = set()
622
        for revision in revisions:
623
            required_trees.add(revision.revision_id)
624
            required_trees.update(revision.parent_ids[:1])
625
0.200.1743 by Jelmer Vernooij
Fix some revision delta filtering.
626
        trees = dict((t.get_revision_id(), t) for
627
            t in self.revision_trees(required_trees))
0.285.4 by Jelmer Vernooij
Add get_deltas_for_revisoins implementation.
628
629
        # Calculate the deltas
630
        for revision in revisions:
631
            if not revision.parent_ids:
632
                old_tree = self.revision_tree(_mod_revision.NULL_REVISION)
633
            else:
634
                old_tree = trees[revision.parent_ids[0]]
0.200.1743 by Jelmer Vernooij
Fix some revision delta filtering.
635
            new_tree = trees[revision.revision_id]
636
            if specific_fileids is not None:
637
                specific_files = [new_tree.id2path(fid) for fid in specific_fileids]
638
            else:
639
                specific_files = None
640
            yield new_tree.changes_from(old_tree, specific_files=specific_files)
0.285.4 by Jelmer Vernooij
Add get_deltas_for_revisoins implementation.
641
0.200.108 by Jelmer Vernooij
Support bzr init --git.
642
    def set_make_working_trees(self, trees):
0.287.6 by Jelmer Vernooij
Fix some more tests.
643
        raise errors.UnsupportedOperation(self.set_make_working_trees, self)
0.200.108 by Jelmer Vernooij
Support bzr init --git.
644
0.200.276 by Jelmer Vernooij
Improve formatting.
645
    def fetch_objects(self, determine_wants, graph_walker, resolve_ext_ref,
0.286.6 by Jelmer Vernooij
Pass through limit argument.
646
        progress=None, limit=None):
647
        return self._git.fetch_objects(determine_wants, graph_walker, progress,
648
            limit=limit)
0.200.138 by Jelmer Vernooij
Add initial infrastructure for accessing remote git repositories.
649
0.200.43 by David Allouche
Ultra-experimental support for "bzr pull". No test. No sanity.
650
0.200.289 by Jelmer Vernooij
Cope with new member variables in RepositoryFormat.
651
class GitRepositoryFormat(repository.RepositoryFormat):
0.200.429 by Jelmer Vernooij
get remote dpush to a point where we now what to send.
652
    """Git repository format."""
0.203.1 by Aaron Bentley
Make checkouts work
653
0.200.1294 by Jelmer Vernooij
Mark as not supporting versioned directories.
654
    supports_versioned_directories = False
0.429.2 by Jelmer Vernooij
Some more work on submodule support.
655
    supports_tree_reference = True
0.200.133 by Jelmer Vernooij
Unmark as deprecated.
656
    rich_root_data = True
0.200.1105 by Jelmer Vernooij
Don't claim to support leaving locks.
657
    supports_leaving_lock = False
0.200.1106 by Jelmer Vernooij
Claim to support fast deltas.
658
    fast_deltas = True
0.200.1123 by Jelmer Vernooij
Set more repository format flags.
659
    supports_funky_characters = True
0.200.1560 by Jelmer Vernooij
stacking is not supported.
660
    supports_external_lookups = False
0.200.1135 by Jelmer Vernooij
Set supports_full_versioned_files=False.
661
    supports_full_versioned_files = False
0.200.1162 by Jelmer Vernooij
Set RepositoryFormat.supports_revision_signatures.
662
    supports_revision_signatures = False
0.200.1383 by Jelmer Vernooij
Claim to not support nested repositories.
663
    supports_nesting_repositories = False
0.200.1166 by Jelmer Vernooij
Set GitRepositoryFormat.revision_graph_can_have_wrong_parents.
664
    revision_graph_can_have_wrong_parents = False
0.200.1493 by Jelmer Vernooij
Test fixes.
665
    supports_unreferenced_revisions = True
0.200.1665 by Jelmer Vernooij
Rename _matchingbzrdir to _matchingcnotroldir.
666
    supports_setting_revision_ids = False
0.200.1698 by Jelmer Vernooij
Update xfail.
667
    supports_storing_branch_nick = False
668
    supports_overriding_transport = False
0.200.1746 by Jelmer Vernooij
Mark as not supporting custom revision properties.
669
    supports_custom_revision_properties = False
0.396.1 by Jelmer Vernooij
Mark as not support per file revision recording.
670
    records_per_file_revision = False
0.200.71 by Jelmer Vernooij
Implement GitRepositoryFormat.get_format_description.
671
0.200.1083 by Jelmer Vernooij
Register repository format.
672
    @property
0.200.1665 by Jelmer Vernooij
Rename _matchingbzrdir to _matchingcnotroldir.
673
    def _matchingcontroldir(self):
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
674
        from .dir import LocalGitControlDirFormat
0.200.1083 by Jelmer Vernooij
Register repository format.
675
        return LocalGitControlDirFormat()
676
0.200.71 by Jelmer Vernooij
Implement GitRepositoryFormat.get_format_description.
677
    def get_format_description(self):
678
        return "Git Repository"
0.200.133 by Jelmer Vernooij
Unmark as deprecated.
679
0.200.1084 by Jelmer Vernooij
Support 'initializing' repositories in control directories.
680
    def initialize(self, controldir, shared=False, _internal=False):
0.200.1641 by Jelmer Vernooij
Use relative imports where possible.
681
        from .dir import GitDir
0.200.1084 by Jelmer Vernooij
Support 'initializing' repositories in control directories.
682
        if not isinstance(controldir, GitDir):
683
            raise errors.UninitializableFormat(self)
684
        return controldir.open_repository()
0.200.133 by Jelmer Vernooij
Unmark as deprecated.
685
686
    def check_conversion_target(self, target_repo_format):
687
        return target_repo_format.rich_root_data
0.200.536 by Jelmer Vernooij
Implement network name.
688
0.200.658 by Jelmer Vernooij
Provide right infrastructure for foreign repository tests from bzrlib.
689
    def get_foreign_tests_repository_factory(self):
0.200.1654 by Jelmer Vernooij
Fix test import.
690
        from .tests.test_repository import (
0.200.713 by Jelmer Vernooij
Improve formatting.
691
            ForeignTestsRepositoryFactory,
692
            )
0.200.658 by Jelmer Vernooij
Provide right infrastructure for foreign repository tests from bzrlib.
693
        return ForeignTestsRepositoryFactory()
694
0.200.536 by Jelmer Vernooij
Implement network name.
695
    def network_name(self):
6973.7.8 by Jelmer Vernooij
Fix more tests.
696
        return b"git"
6989.2.6 by Jelmer Vernooij
Run tests against brz-git interrepositories.
697
698
699
def get_extra_interrepo_test_combinations():
6986.2.2 by Jelmer Vernooij
Merge trunk.
700
    from ..bzr.groupcompress_repo import RepositoryFormat2a
6989.2.6 by Jelmer Vernooij
Run tests against brz-git interrepositories.
701
    from . import interrepo
702
    return [
703
            (interrepo.InterLocalGitNonGitRepository, GitRepositoryFormat(), RepositoryFormat2a()),
704
            (interrepo.InterLocalGitLocalGitRepository, GitRepositoryFormat(), GitRepositoryFormat()),
705
            (interrepo.InterToLocalGitRepository, RepositoryFormat2a(), GitRepositoryFormat()),
706
        ]