Selaa lähdekoodia

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
Dan Willemsen 9 vuotta sitten
vanhempi
commit
eceeb1b1f5
1 muutettua tiedostoa jossa 7 lisäystä ja 1 poistoa
  1. 7 1
      subcmds/sync.py

+ 7 - 1
subcmds/sync.py

@@ -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
                          if os.path.join(root, d) not in 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:
           os.rmdir(d)
         except OSError: