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

Handle non-ascii characters in filenames.

Show diffs side-by-side

added added

removed removed

Lines of Context:
155
155
                tuple(parent_keys), ie.text_sha1, chunks)])
156
156
    invdelta = []
157
157
    if base_hexsha is not None:
158
 
        old_path = path # Renames are not supported yet
 
158
        old_path = path.decode("utf-8") # Renames are not supported yet
159
159
        if stat.S_ISDIR(base_mode):
160
160
            invdelta.extend(remove_disappeared_children(base_inv, old_path,
161
161
                lookup_object(base_hexsha), [], lookup_object))
162
162
    else:
163
163
        old_path = None
164
 
    invdelta.append((old_path, path, file_id, ie))
 
164
    new_path = path.decode("utf-8")
 
165
    invdelta.append((old_path, new_path, file_id, ie))
165
166
    if base_hexsha != hexsha:
166
167
        store_updater.add_object(blob, ie, path)
167
168
    return invdelta
197
198
 
198
199
    :param base_inv: Base inventory against which to generate the 
199
200
        inventory delta.
200
 
    :param path: Path to process
 
201
    :param path: Path to process (unicode)
201
202
    :param base_tree: Git Tree base object
202
203
    :param existing_children: Children that still exist
203
204
    :param lookup_object: Lookup a git object by its SHA1
204
205
    :return: Inventory delta, as list
205
206
    """
 
207
    assert type(path) is unicode
206
208
    ret = []
207
209
    for name, mode, hexsha in base_tree.iteritems():
208
210
        if name in existing_children:
224
226
    """Import a git tree object into a bzr repository.
225
227
 
226
228
    :param texts: VersionedFiles object to add to
227
 
    :param path: Path in the tree
 
229
    :param path: Path in the tree (str)
 
230
    :param name: Name of the tree (str)
228
231
    :param tree: A git tree object
229
232
    :param base_inv: Base inventory against which to return inventory delta
230
233
    :return: Inventory delta for this subtree
231
234
    """
 
235
    assert type(path) is str
 
236
    assert type(name) is str
232
237
    if base_hexsha == hexsha and base_mode == mode:
233
238
        # If nothing has changed since the base revision, we're done
234
239
        return [], {}
242
247
        old_path = None # Newly appeared here
243
248
    else:
244
249
        base_tree = lookup_object(base_hexsha)
245
 
        old_path = path # Renames aren't supported yet
 
250
        old_path = path.decode("utf-8") # Renames aren't supported yet
 
251
    new_path = path.decode("utf-8")
246
252
    if base_tree is None or type(base_tree) is not Tree:
247
253
        ie.revision = revision_id
248
 
        invdelta.append((old_path, path, ie.file_id, ie))
 
254
        invdelta.append((old_path, new_path, ie.file_id, ie))
249
255
        texts.insert_record_stream([
250
256
            ChunkedContentFactory((ie.file_id, ie.revision), (), None, [])])
251
257
    # Remember for next time
289
295
            child_modes[child_path] = child_mode
290
296
    # Remove any children that have disappeared
291
297
    if base_tree is not None and type(base_tree) is Tree:
292
 
        invdelta.extend(remove_disappeared_children(base_inv, old_path, 
 
298
        invdelta.extend(remove_disappeared_children(base_inv, old_path,
293
299
            base_tree, existing_children, lookup_object))
294
300
    store_updater.add_object(tree, ie, path)
295
301
    return invdelta, child_modes
353
359
    store_updater.add_object(o, None, None)
354
360
    lookup_file_id = mapping.get_fileid_map(lookup_object, o.tree).lookup_file_id
355
361
    inv_delta, unusual_modes = import_git_tree(repo.texts,
356
 
            mapping, "", u"", (base_tree, o.tree), base_inv, 
 
362
            mapping, "", "", (base_tree, o.tree), base_inv, 
357
363
            None, rev.revision_id, [p.inventory for p in parent_trees],
358
364
            lookup_object, (base_mode, stat.S_IFDIR), store_updater,
359
365
            lookup_file_id,