/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) 2009-2018 Jelmer Vernooij <jelmer@jelmer.uk>
0.200.291 by Jelmer Vernooij
Print proper error about not supporting push.
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
0.358.1 by Jelmer Vernooij
Fix FSF address.
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0.200.291 by Jelmer Vernooij
Print proper error about not supporting push.
16
17
"""Push implementation that simply prints message saying push is not supported."""
18
0.200.1594 by Jelmer Vernooij
Use absolute_import everywhere.
19
from __future__ import absolute_import
20
6986.2.1 by Jelmer Vernooij
Move breezy.plugins.git to breezy.git.
21
from ..push import (
0.419.1 by Jelmer Vernooij
Simplify pushing to Git directories.
22
    PushResult,
23
    )
24
from .errors import (
25
    GitSmartRemoteNotSupported,
26
    )
27
28
class GitPushResult(PushResult):
29
30
    def _lookup_revno(self, revid):
31
        from .branch import _quick_lookup_revno
32
        try:
33
            return _quick_lookup_revno(self.source_branch, self.target_branch,
34
                revid)
35
        except GitSmartRemoteNotSupported:
36
            return None
37
38
    @property
39
    def old_revno(self):
40
        return self._lookup_revno(self.old_revid)
41
42
    @property
43
    def new_revno(self):
44
        return self._lookup_revno(self.new_revid)
45
0.200.364 by Jelmer Vernooij
Reimplement dpush, but more efficient and only writing a single pack file rather than one per revision.
46
47
class MissingObjectsIterator(object):
48
    """Iterate over git objects that are missing from a target repository.
49
50
    """
51
0.200.525 by Jelmer Vernooij
Simplify push a bit further, make dpush without rebase faster.
52
    def __init__(self, store, source, pb=None):
0.200.364 by Jelmer Vernooij
Reimplement dpush, but more efficient and only writing a single pack file rather than one per revision.
53
        """Create a new missing objects iterator.
54
55
        """
56
        self.source = source
0.200.525 by Jelmer Vernooij
Simplify push a bit further, make dpush without rebase faster.
57
        self._object_store = store
0.200.364 by Jelmer Vernooij
Reimplement dpush, but more efficient and only writing a single pack file rather than one per revision.
58
        self._pending = []
0.200.369 by Jelmer Vernooij
Report on pack objects progress.
59
        self.pb = pb
0.200.364 by Jelmer Vernooij
Reimplement dpush, but more efficient and only writing a single pack file rather than one per revision.
60
0.200.1509 by Jelmer Vernooij
Properly raise exception when pulling from git into bzr without experimental mappings.
61
    def import_revisions(self, revids, lossy):
0.200.947 by Jelmer Vernooij
Add convenience method for getting missing objects iterator.
62
        """Import a set of revisions into this git repository.
63
64
        :param revids: Revision ids of revisions to import
0.200.1509 by Jelmer Vernooij
Properly raise exception when pulling from git into bzr without experimental mappings.
65
        :param lossy: Whether to not roundtrip bzr metadata
0.200.947 by Jelmer Vernooij
Add convenience method for getting missing objects iterator.
66
        """
0.200.369 by Jelmer Vernooij
Report on pack objects progress.
67
        for i, revid in enumerate(revids):
68
            if self.pb:
69
                self.pb.update("pushing revisions", i, len(revids))
0.200.1509 by Jelmer Vernooij
Properly raise exception when pulling from git into bzr without experimental mappings.
70
            git_commit = self.import_revision(revid, lossy)
0.252.6 by Jelmer Vernooij
Roundtripping support for revision ids works.
71
            yield (revid, git_commit)
0.200.364 by Jelmer Vernooij
Reimplement dpush, but more efficient and only writing a single pack file rather than one per revision.
72
0.200.1509 by Jelmer Vernooij
Properly raise exception when pulling from git into bzr without experimental mappings.
73
    def import_revision(self, revid, lossy):
0.200.947 by Jelmer Vernooij
Add convenience method for getting missing objects iterator.
74
        """Import a revision into this Git repository.
0.200.364 by Jelmer Vernooij
Reimplement dpush, but more efficient and only writing a single pack file rather than one per revision.
75
0.200.947 by Jelmer Vernooij
Add convenience method for getting missing objects iterator.
76
        :param revid: Revision id of the revision
77
        :param roundtrip: Whether to roundtrip bzr metadata
0.200.364 by Jelmer Vernooij
Reimplement dpush, but more efficient and only writing a single pack file rather than one per revision.
78
        """
0.200.852 by Jelmer Vernooij
Cache trees rather than inventories.
79
        tree = self._object_store.tree_cache.revision_tree(revid)
0.200.548 by Jelmer Vernooij
Extract unusual file modes from revision when reconstructing Trees.
80
        rev = self.source.get_revision(revid)
0.200.784 by Jelmer Vernooij
Use common object generation code in push.
81
        commit = None
0.423.1 by Jelmer Vernooij
Some performance fixes.
82
        for path, obj in self._object_store._revision_to_objects(rev, tree, lossy):
0.200.829 by Jelmer Vernooij
Cope with the fact that _type is gone in upstream dulwich.
83
            if obj.type_name == "commit":
0.200.784 by Jelmer Vernooij
Use common object generation code in push.
84
                commit = obj
0.200.786 by Jelmer Vernooij
Simplify push code.
85
            self._pending.append((obj, path))
0.200.1482 by Jelmer Vernooij
Add extra assertion.
86
        if commit is None:
87
            raise AssertionError("no commit object generated for revision %s" %
88
                revid)
0.200.364 by Jelmer Vernooij
Reimplement dpush, but more efficient and only writing a single pack file rather than one per revision.
89
        return commit.id
90
91
    def __len__(self):
92
        return len(self._pending)
93
94
    def __iter__(self):
0.200.786 by Jelmer Vernooij
Simplify push code.
95
        return iter(self._pending)
0.404.5 by Jelmer Vernooij
Check for diverged branches during push.
96
97
98
class ObjectStoreParentsProvider(object):
99
100
    def __init__(self, store):
101
        self._store = store
102
103
    def get_parent_map(self, shas):
104
        ret = {}
105
        for sha in shas:
106
            if sha is None:
107
                parents = []
108
            else:
109
                try:
110
                    parents = self._store[sha].parents
111
                except KeyError:
112
                    parents = None
113
            ret[sha] = parents
114
        return ret
115
116
117
def remote_divergence(old_sha, new_sha, store):
118
    if old_sha is None:
119
        return False
120
    if not isinstance(old_sha, bytes):
121
        raise TypeError(old_sha)
122
    if not isinstance(new_sha, bytes):
123
        raise TypeError(new_sha)
124
    from breezy.graph import Graph
125
    graph = Graph(ObjectStoreParentsProvider(store))
126
    return not graph.is_ancestor(old_sha, new_sha)