1
# Copyright (C) 2005, 2009 Canonical Ltd
1
# Copyright (C) 2005, 2009, 2010 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
404
404
bit_iter = iter(path.split("/"))
405
405
for elt in bit_iter:
406
406
lelt = elt.lower()
407
408
for child in self.iter_children(cur_id):
410
# XXX: it seem like if the child is known to be in the
411
# tree, we shouldn't need to go from its id back to
412
# its path -- mbp 2010-02-11
414
# XXX: it seems like we could be more efficient
415
# by just directly looking up the original name and
416
# only then searching all children; also by not
417
# chopping paths so much. -- mbp 2010-02-11
409
418
child_base = os.path.basename(self.id2path(child))
410
if child_base.lower() == lelt:
419
if (child_base == elt):
420
# if we found an exact match, we can stop now; if
421
# we found an approximate match we need to keep
422
# searching because there might be an exact match
412
cur_path = osutils.pathjoin(cur_path, child_base)
425
new_path = osutils.pathjoin(cur_path, child_base)
427
elif child_base.lower() == lelt:
429
new_path = osutils.pathjoin(cur_path, child_base)
415
431
# before a change is committed we can see this error...
418
436
# got to the end of this directory and no entries matched.
419
437
# Return what matched so far, plus the rest as specified.