Support broken symlinks when cleaning obsolete paths

When there's a symlink to a directory, os.walk still lists the symlink
in dirs, even if it isn't configured to follow symlinks. This will fail
the listdirs check if the symlink is broken (either before or during the
cleanup). So instead, check for directory symlinks and remove them using
os.remove.

Bug: Issue 231
Change-Id: I0ec45a26be566613a4a39bf694a3d9c6328481c2
This commit is contained in:
Dan Willemsen 2016-09-25 18:24:27 -07:00 committed by David Pursehouse
parent 16889ba43d
commit eceeb1b1f5

View File

@ -487,7 +487,13 @@ later is required to fix a server side protocol bug.
dirs_to_remove += [os.path.join(root, d) for d in dirs dirs_to_remove += [os.path.join(root, d) for d in dirs
if os.path.join(root, d) not in dirs_to_remove] if os.path.join(root, d) not in dirs_to_remove]
for d in reversed(dirs_to_remove): for d in reversed(dirs_to_remove):
if len(os.listdir(d)) == 0: if os.path.islink(d):
try:
os.remove(d)
except OSError:
print('Failed to remove %s' % os.path.join(root, d), file=sys.stderr)
failed = True
elif len(os.listdir(d)) == 0:
try: try:
os.rmdir(d) os.rmdir(d)
except OSError: except OSError: