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):
125
from dulwich.objects import Tree, Blob
126
from bzrlib.inventory import InventoryDirectory, InventoryFile
132
inv = repo.get_inventory(revision_id)
134
for path, entry in inv.iter_entries():
135
while stack and not path.startswith(cur):
137
sha = tree.sha().hexdigest()
138
yield sha, tree, path
139
t = (stat.S_IFDIR, splitpath(cur)[-1:][0].encode('UTF-8'), sha)
140
cur, tree = stack.pop()
143
if type(entry) == InventoryDirectory:
144
stack.append((cur, tree))
148
if type(entry) == InventoryFile:
149
#FIXME: We can make potentially make this Lazy to avoid shaing lots of stuff
150
# and having all these objects in memory at once
152
_, blob._text = repo.iter_files_bytes([(entry.file_id, revision_id, path)]).next()
153
sha = blob.sha().hexdigest()
154
yield sha, blob, path
156
name = splitpath(path)[-1:][0].encode('UTF-8')
157
mode = stat.S_IFREG | 0644
160
tree.add(mode, name, sha)
162
while len(stack) > 1:
164
sha = tree.sha().hexdigest()
165
yield sha, tree, path
166
t = (stat.S_IFDIR, splitpath(cur)[-1:][0].encode('UTF-8'), sha)
167
cur, tree = stack.pop()
171
yield tree.sha().hexdigest(), tree, path
174
def revision_to_commit(rev, tree_sha, parent_lookup):
175
"""Turn a Bazaar revision in to a Git commit
177
:param tree_sha: Tree sha for the commit
178
:param parent_lookup: Function for looking up the GIT sha equiv of a bzr revision
179
:return dulwich.objects.Commit represent the revision:
181
from dulwich.objects import Commit
183
commit._tree = tree_sha
184
for p in rev.parent_ids:
185
commit._parents.append(parent_lookup(p))
186
commit._message = rev.message
187
commit._committer = rev.committer
188
if 'author' in rev.properties:
189
commit._author = rev.properties['author']
191
commit._author = rev.committer
192
commit._commit_time = long(rev.timestamp)