1481
1484
return conflicts
1483
1486
def walkdirs(self, prefix=""):
1487
inventory_iterator = self._walkdirs(prefix)
1488
disk_top = self.abspath(prefix)
1489
if disk_top.endswith('/'):
1490
disk_top = disk_top[:-1]
1491
top_strip_len = len(disk_top) + 1
1492
disk_iterator = osutils.walkdirs(disk_top, prefix)
1493
current_inv = inventory_iterator.next()
1494
current_disk = disk_iterator.next()
1495
inv_finished = False
1496
disk_finished = False
1497
while not inv_finished or not disk_finished:
1498
if not disk_finished:
1499
# strip out .bzr dirs
1500
if current_disk[0][1][top_strip_len:] == '':
1501
# osutils.walkdirs can be made nicer -
1502
# yield the path-from-prefix rather than the pathjoined
1504
bzrdir_loc = bisect_left(current_disk[1], ('.bzr', '.bzr'))
1505
if current_disk[1][bzrdir_loc][0] == '.bzr':
1506
# we dont yield the contents of, or, .bzr itself.
1507
del current_disk[1][bzrdir_loc]
1508
direction = cmp(current_inv[0][0], current_disk[0][0])
1510
# inventory is before disk - unknown.
1511
dirblock = [(relpath, basename, kind, stat, top_path[top_strip_len:], None, None) for relpath, basename, kind, stat, top_path in current_disk[1]]
1512
yield (current_disk[0][0], current_disk[0][1][top_strip_len:], None), dirblock
1514
current_disk = disk_iterator.next()
1515
except StopIteration:
1516
disk_finished = True
1518
# disk is before inventory - missing
1520
current_inv = inventory_iterator.next()
1521
except StopIteration:
1524
# versioned present directory
1525
# merge the inventory and disk data together
1526
# dirblock = [(relpath, basename, kind, stat, top_path, None, None, None) for relpath, basename, kind, stat, top_path in current_disk[1]]
1529
for relpath, subiterator in itertools.groupby(sorted(current_inv[1] + current_disk[1]), operator.itemgetter(1)):
1530
path_elements = list(subiterator)
1531
if len(path_elements) == 2:
1532
# versioned, present file
1533
dirblock.append((path_elements[0][0], path_elements[0][1], path_elements[1][2], path_elements[1][3], path_elements[0][4], path_elements[0][5], path_elements[0][6]))
1534
elif len(path_elements[0]) == 5:
1536
dirblock.append((path_elements[0][0], path_elements[0][1], path_elements[0][2], path_elements[0][3], path_elements[0][4][top_strip_len:], None, None))
1537
yield current_inv[0], dirblock
1539
current_inv = inventory_iterator.next()
1540
except StopIteration:
1543
current_disk = disk_iterator.next()
1544
except StopIteration:
1545
disk_finished = True
1547
#for dirinfo, dirblock in self._walkdirs(prefix):
1548
# yield dirinfo, dirblock
1550
def _walkdirs(self, prefix=""):
1484
1551
_directory = 'directory'
1485
1552
pending = [('', '', _directory, None, '', None, None)]
1486
1553
inv = self.inventory