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