79
def export_commit(self, rev, tree_sha):
80
"""Turn a Bazaar revision in to a Git commit
82
:param tree_sha: HACK parameter (until we can retrieve this from the mapping)
83
:return dulwich.objects.Commit represent the revision:
85
from dulwich.objects import Commit
87
commit._tree = tree_sha
88
for p in rev.parent_ids:
89
commit._parents.append(self.revision_id_bzr_to_foreign(p))
90
commit._message = rev.message
91
commit._committer = rev.committer
92
if 'author' in rev.properties:
93
commit._author = rev.properties['author']
95
commit._author = rev.committer
96
commit._commit_time = long(rev.timestamp)
101
80
class BzrGitMappingv1(BzrGitMapping):
102
81
revid_prefix = 'git-v1'
141
120
foreign_git = ForeignGit()
142
121
default_mapping = BzrGitMappingv1()
124
def inventory_to_tree_and_blobs(repo, mapping, revision_id):
129
inv = repo.get_inventory(revision_id)
131
for path, entry in inv.iter_entries():
132
while stack and not path.startswith(cur):
134
sha = tree.sha().hexdigest()
135
yield sha, tree, path
136
t = (stat.S_IFDIR, splitpath(cur)[-1:][0].encode('UTF-8'), sha)
137
cur, tree = stack.pop()
140
if type(entry) == InventoryDirectory:
141
stack.append((cur, tree))
145
if type(entry) == InventoryFile:
146
#FIXME: We can make potentially make this Lazy to avoid shaing lots of stuff
147
# and having all these objects in memory at once
149
_, blob._text = repo.iter_files_bytes([(entry.file_id, revision_id, path)]).next()
150
sha = blob.sha().hexdigest()
151
yield sha, blob, path
153
name = splitpath(path)[-1:][0].encode('UTF-8')
154
mode = stat.S_IFREG | 0644
157
tree.add(mode, name, sha)
159
while len(stack) > 1:
161
sha = tree.sha().hexdigest()
162
yield sha, tree, path
163
t = (stat.S_IFDIR, splitpath(cur)[-1:][0].encode('UTF-8'), sha)
164
cur, tree = stack.pop()
168
yield tree.sha().hexdigest(), tree, path
171
def revision_to_commit(rev, tree_sha, parent_lookup):
172
"""Turn a Bazaar revision in to a Git commit
174
:param tree_sha: Tree sha for the commit
175
:param parent_lookup: Function for looking up the GIT sha equiv of a bzr revision
176
:return dulwich.objects.Commit represent the revision:
178
from dulwich.objects import Commit
180
commit._tree = tree_sha
181
for p in rev.parent_ids:
182
commit._parents.append(parent_lookup(p))
183
commit._message = rev.message
184
commit._committer = rev.committer
185
if 'author' in rev.properties:
186
commit._author = rev.properties['author']
188
commit._author = rev.committer
189
commit._commit_time = long(rev.timestamp)