/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 mapping.py

Return mapping in revision_id_bzr_to_foreign() as required by the interface.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
"""Converters, etc for going between Bazaar and Git ids."""
18
18
 
19
 
from bzrlib import errors
20
 
from bzrlib.plugins.git import foreign
 
19
from bzrlib import errors, foreign
 
20
from bzrlib.inventory import ROOT_ID
 
21
from bzrlib.foreign import (
 
22
        ForeignVcs, 
 
23
        VcsMappingRegistry, 
 
24
        ForeignRevision,
 
25
        )
 
26
 
 
27
 
 
28
def escape_file_id(file_id):
 
29
    return file_id.replace('_', '__').replace(' ', '_s')
 
30
 
 
31
 
 
32
def unescape_file_id(file_id):
 
33
    return file_id.replace("_s", " ").replace("__", "_")
 
34
 
21
35
 
22
36
class BzrGitMapping(foreign.VcsMapping):
23
37
    """Class that maps between Git and Bazaar semantics."""
24
38
    experimental = False
25
39
 
26
 
    def revision_id_foreign_to_bzr(self, git_rev_id):
 
40
    def __eq__(self, other):
 
41
        return type(self) == type(other) and self.revid_prefix == other.revid_prefix
 
42
 
 
43
    @classmethod
 
44
    def revision_id_foreign_to_bzr(cls, git_rev_id):
27
45
        """Convert a git revision id handle to a Bazaar revision id."""
28
 
        return "%s:%s" % (self.revid_prefix, git_rev_id)
 
46
        return "%s:%s" % (cls.revid_prefix, git_rev_id)
29
47
 
30
 
    def revision_id_bzr_to_foreign(self, bzr_rev_id):
 
48
    @classmethod
 
49
    def revision_id_bzr_to_foreign(cls, bzr_rev_id):
31
50
        """Convert a Bazaar revision id to a git revision id handle."""
32
 
        if not bzr_rev_id.startswith("%s:" % self.revid_prefix):
33
 
            raise errors.InvalidRevisionId(bzr_rev_id, self)
34
 
        return bzr_rev_id[len(self.revid_prefix)+1:]
35
 
 
36
 
 
37
 
class BzrGitMappingExperimental(BzrGitMapping):
 
51
        if not bzr_rev_id.startswith("%s:" % cls.revid_prefix):
 
52
            raise errors.InvalidRevisionId(bzr_rev_id, cls)
 
53
        return bzr_rev_id[len(cls.revid_prefix)+1:], cls()
 
54
 
 
55
    @classmethod
 
56
    def show_foreign_revid(cls, foreign_revid):
 
57
        return { "git commit": foreign_revid }
 
58
 
 
59
    def generate_file_id(self, path):
 
60
        if path == "":
 
61
            return ROOT_ID
 
62
        return escape_file_id(path.encode('utf-8'))
 
63
 
 
64
    def import_commit(self, commit):
 
65
        """Convert a git commit to a bzr revision.
 
66
 
 
67
        :return: a `bzrlib.revision.Revision` object.
 
68
        """
 
69
        if commit is None:
 
70
            raise AssertionError("Commit object can't be None")
 
71
        rev = ForeignRevision(commit.id, self, self.revision_id_foreign_to_bzr(commit.id))
 
72
        rev.parent_ids = tuple([self.revision_id_foreign_to_bzr(p) for p in commit.parents])
 
73
        rev.message = commit.message.decode("utf-8", "replace")
 
74
        rev.committer = str(commit.committer).decode("utf-8", "replace")
 
75
        if commit.committer != commit.author:
 
76
            rev.properties['author'] = str(commit.author).decode("utf-8", "replace")
 
77
        rev.timestamp = commit.commit_time
 
78
        rev.timezone = 0
 
79
        return rev
 
80
 
 
81
 
 
82
class BzrGitMappingv1(BzrGitMapping):
 
83
    revid_prefix = 'git-v1'
 
84
    experimental = False
 
85
 
 
86
 
 
87
class BzrGitMappingExperimental(BzrGitMappingv1):
38
88
    revid_prefix = 'git-experimental'
39
89
    experimental = True
40
90
 
41
91
 
42
 
default_mapping = BzrGitMappingExperimental()
 
92
class GitMappingRegistry(VcsMappingRegistry):
 
93
 
 
94
    def revision_id_bzr_to_foreign(self, bzr_revid):
 
95
        if not bzr_revid.startswith("git-"):
 
96
            raise errors.InvalidRevisionId(bzr_revid, None)
 
97
        (mapping_version, git_sha) = bzr_revid.split(":", 1)
 
98
        mapping = self.get(mapping_version)
 
99
        return mapping.revision_id_bzr_to_foreign(bzr_revid)
 
100
 
 
101
    parse_revision_id = revision_id_bzr_to_foreign
 
102
 
 
103
 
 
104
mapping_registry = GitMappingRegistry()
 
105
mapping_registry.register_lazy('git-v1', "bzrlib.plugins.git.mapping",
 
106
                                   "BzrGitMappingv1")
 
107
mapping_registry.register_lazy('git-experimental', "bzrlib.plugins.git.mapping",
 
108
                                   "BzrGitMappingExperimental")
 
109
 
 
110
 
 
111
class ForeignGit(ForeignVcs):
 
112
    """Foreign Git."""
 
113
 
 
114
    def __init__(self):
 
115
        super(ForeignGit, self).__init__(mapping_registry)
 
116
 
 
117
 
 
118
default_mapping = BzrGitMappingv1()
 
119
foreign_git = ForeignGit()