/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

Fix storing of unusual file modes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
74
74
 
75
75
 
76
76
def warn_unusual_mode(commit, path, mode):
77
 
    trace.warning("Unusual file mode %o for %s in %s. Will be unable to "
78
 
                  "regenerate the SHA map.", mode, path, commit)
 
77
    trace.mutter("Unusual file mode %o for %s in %s. Storing as revision property. ",
 
78
                 mode, path, commit)
79
79
 
80
80
 
81
81
def squash_revision(target_repo, rev):
136
136
 
137
137
    def import_unusual_file_modes(self, rev, unusual_file_modes):
138
138
        if unusual_file_modes:
139
 
            rev.properties['file-modes'] = bencode.bencode(unusual_file_modes)
 
139
            ret = [(name, unusual_file_modes[name]) for name in sorted(unusual_file_modes.keys())]
 
140
            rev.properties['file-modes'] = bencode.bencode(ret)
140
141
 
141
142
    def export_unusual_file_modes(self, rev):
142
143
        try:
143
 
            return bencode.bdecode(rev.properties['file-modes'])
 
144
            return dict([(self.generate_file_id(path), mode) for (path, mode) in bencode.bdecode(rev.properties['file-modes'])])
144
145
        except KeyError:
145
146
            return {}
146
147
 
271
272
        raise AssertionError
272
273
 
273
274
 
274
 
def directory_to_tree(entry, lookup_ie_sha1):
 
275
def directory_to_tree(entry, lookup_ie_sha1, unusual_modes):
275
276
    from dulwich.objects import Tree
276
277
    tree = Tree()
277
278
    for name in sorted(entry.children.keys()):
278
279
        ie = entry.children[name]
279
 
        tree.add(entry_mode(ie), name.encode("utf-8"), lookup_ie_sha1(ie))
 
280
        try:
 
281
            mode = unusual_modes[ie.file_id]
 
282
        except KeyError:
 
283
            mode = entry_mode(ie)
 
284
        tree.add(mode, name.encode("utf-8"), lookup_ie_sha1(ie))
280
285
    tree.serialize()
281
286
    return tree
282
287
 
290
295
        return mapping.export_unusual_file_modes(rev)
291
296
 
292
297
 
293
 
def inventory_to_tree_and_blobs(inventory, texts, mapping, cur=None):
 
298
def inventory_to_tree_and_blobs(inventory, texts, mapping, unusual_modes, cur=None):
294
299
    """Convert a Bazaar tree to a Git tree.
295
300
 
296
301
    :return: Yields tuples with object sha1, object and path
310
315
            tree.serialize()
311
316
            sha = tree.id
312
317
            yield sha, tree, cur.encode("utf-8")
313
 
            t = (stat.S_IFDIR, urlutils.basename(cur).encode('UTF-8'), sha)
 
318
            mode = unusual_modes.get(cur.encode("utf-8"), stat.S_IFDIR)
 
319
            t = (mode, urlutils.basename(cur).encode('UTF-8'), sha)
314
320
            cur, tree = stack.pop()
315
321
            tree.add(*t)
316
322
 
328
334
            sha = blob.id
329
335
            yield sha, blob, path.encode("utf-8")
330
336
            name = urlutils.basename(path).encode("utf-8")
331
 
            tree.add(entry_mode(entry), name, sha)
 
337
            mode = unusual_modes.get(path.encode("utf-8"), entry_mode(entry))
 
338
            tree.add(mode, name, sha)
332
339
 
333
340
    while len(stack) > 1:
334
341
        tree.serialize()
335
342
        sha = tree.id
336
343
        yield sha, tree, cur.encode("utf-8")
337
 
        t = (stat.S_IFDIR, urlutils.basename(cur).encode('UTF-8'), sha)
 
344
        mode = unusual_modes.get(cur.encode('utf-8'), stat.S_IFDIR)
 
345
        t = (mode, urlutils.basename(cur).encode('UTF-8'), sha)
338
346
        cur, tree = stack.pop()
339
347
        tree.add(*t)
340
348