/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/git/repository.py

  • Committer: Jelmer Vernooij
  • Date: 2020-05-24 00:39:50 UTC
  • mto: This revision was merged to the branch mainline in revision 7504.
  • Revision ID: jelmer@jelmer.uk-20200524003950-bbc545r76vc5yajg
Add github action.

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
    ForeignRepository,
34
34
    )
35
35
 
 
36
from .commit import (
 
37
    GitCommitBuilder,
 
38
    )
36
39
from .filegraph import (
37
40
    GitFileLastChangeScanner,
38
41
    GitFileParentProvider,
39
42
    )
40
43
from .mapping import (
41
44
    default_mapping,
42
 
    encode_git_path,
43
45
    foreign_vcs_git,
44
46
    mapping_registry,
45
47
    )
98
100
            self._report_repo_results(verbose)
99
101
 
100
102
 
101
 
for optimiser in ['InterRemoteGitNonGitRepository',
102
 
                  'InterLocalGitNonGitRepository',
103
 
                  'InterLocalGitLocalGitRepository',
104
 
                  'InterRemoteGitLocalGitRepository',
105
 
                  'InterToLocalGitRepository',
106
 
                  'InterToRemoteGitRepository',
107
 
                  ]:
108
 
    repository.InterRepository.register_lazy_optimiser(
109
 
        'breezy.git.interrepo', optimiser)
 
103
_optimisers_loaded = False
 
104
 
 
105
 
 
106
def lazy_load_optimisers():
 
107
    global _optimisers_loaded
 
108
    if _optimisers_loaded:
 
109
        return
 
110
    from . import interrepo
 
111
    for optimiser in [interrepo.InterRemoteGitNonGitRepository,
 
112
                      interrepo.InterLocalGitNonGitRepository,
 
113
                      interrepo.InterLocalGitLocalGitRepository,
 
114
                      interrepo.InterRemoteGitLocalGitRepository,
 
115
                      interrepo.InterToLocalGitRepository,
 
116
                      interrepo.InterToRemoteGitRepository,
 
117
                      ]:
 
118
        repository.InterRepository.register_optimiser(optimiser)
 
119
    _optimisers_loaded = True
110
120
 
111
121
 
112
122
class GitRepository(ForeignRepository):
121
131
        super(GitRepository, self).__init__(GitRepositoryFormat(),
122
132
                                            gitdir, control_files=None)
123
133
        self.base = gitdir.root_transport.base
 
134
        lazy_load_optimisers()
124
135
        self._lock_mode = None
125
136
        self._lock_count = 0
126
137
 
248
259
        :param lossy: Whether to discard data that can not be natively
249
260
            represented, when pushing to a foreign VCS
250
261
        """
251
 
        from .commit import (
252
 
            GitCommitBuilder,
253
 
            )
254
262
        builder = GitCommitBuilder(
255
263
            self, parents, config, timestamp, timezone, committer, revprops,
256
264
            revision_id, lossy)
302
310
                try:
303
311
                    obj = tree_lookup_path(
304
312
                        self._git.object_store.__getitem__, root_tree,
305
 
                        encode_git_path(path))
 
313
                        path.encode('utf-8'))
306
314
                    if isinstance(obj, tuple):
307
315
                        (mode, item_id) = obj
308
316
                        obj = self._git.object_store[item_id]
545
553
            raise ValueError('invalid revision id %s' % revision_id)
546
554
        return GitRevisionTree(self, revision_id)
547
555
 
 
556
    def get_deltas_for_revisions(self, revisions, specific_fileids=None):
 
557
        """Produce a generator of revision deltas.
 
558
 
 
559
        Note that the input is a sequence of REVISIONS, not revision_ids.
 
560
        Trees will be held in memory until the generator exits.
 
561
        Each delta is relative to the revision's lefthand predecessor.
 
562
 
 
563
        :param specific_fileids: if not None, the result is filtered
 
564
          so that only those file-ids, their parents and their
 
565
          children are included.
 
566
        """
 
567
        # Get the revision-ids of interest
 
568
        required_trees = set()
 
569
        for revision in revisions:
 
570
            required_trees.add(revision.revision_id)
 
571
            required_trees.update(revision.parent_ids[:1])
 
572
 
 
573
        trees = dict((t.get_revision_id(), t) for
 
574
                     t in self.revision_trees(required_trees))
 
575
 
 
576
        # Calculate the deltas
 
577
        for revision in revisions:
 
578
            if not revision.parent_ids:
 
579
                old_tree = self.revision_tree(_mod_revision.NULL_REVISION)
 
580
            else:
 
581
                old_tree = trees[revision.parent_ids[0]]
 
582
            new_tree = trees[revision.revision_id]
 
583
            if specific_fileids is not None:
 
584
                specific_files = [new_tree.id2path(
 
585
                    fid) for fid in specific_fileids]
 
586
            else:
 
587
                specific_files = None
 
588
            yield new_tree.changes_from(
 
589
                old_tree, specific_files=specific_files)
 
590
 
548
591
    def set_make_working_trees(self, trees):
549
592
        raise errors.UnsupportedOperation(self.set_make_working_trees, self)
550
593