From f36db29b3738460482f5fa9578c07ce28fc366dd Mon Sep 17 00:00:00 2001
From: Daira Hopwood <daira@jacaranda.org>
Date: Thu, 16 Jul 2015 18:41:44 +0100
Subject: [PATCH] Fix some pyflakes errors and warnings.

Signed-off-by: Daira Hopwood <daira@jacaranda.org>
---
 src/allmydata/frontends/magic_folder.py     | 79 ++++++++++++---------
 src/allmydata/scripts/magic_folder_cli.py   |  6 +-
 src/allmydata/test/test_cli_magic_folder.py |  1 -
 3 files changed, 49 insertions(+), 37 deletions(-)

diff --git a/src/allmydata/frontends/magic_folder.py b/src/allmydata/frontends/magic_folder.py
index f37e77c3..b535db91 100644
--- a/src/allmydata/frontends/magic_folder.py
+++ b/src/allmydata/frontends/magic_folder.py
@@ -199,7 +199,6 @@ class MagicFolder(service.MultiService):
 
     def _filter_scan_batch(self, result):
         extension = []
-        max_version_dict = {}
         for name in self._download_scan_batch.keys():
             if name in self._download_pending:
                 continue
@@ -246,44 +245,58 @@ class MagicFolder(service.MultiService):
         except FilenameEncodingError:
             raise(Exception("WARNING: magic folder: could not list directory %s due to a filename encoding error" % (quoted_path,)))
 
+        d = defer.succeed(None)
         for child in children:
             assert isinstance(child, unicode), child
             childpath = os.path.join(localpath, child)
-            # note: symlinks to directories are both islink() and isdir()
-            isdir = os.path.isdir(childpath)
-            isfile = os.path.isfile(childpath)
-            islink = os.path.islink(childpath)
-
-            if islink:
-                self.warn("WARNING: cannot backup symlink %s" % quote_local_unicode_path(childpath))
-            elif isdir:
-                # process directories unconditionally
-                self._append_to_upload_deque(childpath)
-
-                # recurse on the child directory
-                self._scan(childpath)
-            elif isfile:
-                file_version = self._db.get_local_file_version(childpath)
-                if file_version is None:
-                    # XXX upload if we didn't record our version in magicfolder db?
+
+            def _process_child(ign, childpath=childpath):
+                # note: symlinks to directories are both islink() and isdir()
+                isdir = os.path.isdir(childpath)
+                isfile = os.path.isfile(childpath)
+                islink = os.path.islink(childpath)
+
+                if islink:
+                    self.warn("WARNING: cannot backup symlink %s" % quote_local_unicode_path(childpath))
+                    return None
+                elif isdir:
+                    # process directories unconditionally
                     self._append_to_upload_deque(childpath)
-                else:
-                    file_node, metadata = self._get_collective_latest_file(childpath)
-                    if collective_version is None:
-                        continue
-                    if file_version > collective_version:
+
+                    # recurse on the child directory
+                    return self._scan(childpath)
+                elif isfile:
+                    file_version = self._db.get_local_file_version(childpath)
+                    if file_version is None:
+                        # XXX upload if we didn't record our version in magicfolder db?
                         self._append_to_upload_deque(childpath)
-                    elif file_version < collective_version:
-                        # if a collective version of the file is newer than ours
-                        # we must download it and unlink the old file from our upload dirnode
-                        self._append_to_download_deque(childpath)
-                        # XXX where should we save the returned deferred?
-                        d = self._upload_dirnode.delete(childpath, must_be_file=True)
+                        return None
                     else:
-                        # XXX same version. do nothing.
-                        pass
-            else:
-                self.warn("WARNING: cannot backup special file %s" % quote_local_unicode_path(childpath))
+                        d2 = self._get_collective_latest_file(childpath)
+                        def _got_latest_file((file_node, metadata)):
+                            collective_version = metadata['version']
+                            if collective_version is None:
+                                return None
+                            if file_version > collective_version:
+                                self._append_to_upload_deque(childpath)
+                            elif file_version < collective_version:
+                                # if a collective version of the file is newer than ours
+                                # we must download it and unlink the old file from our upload dirnode
+                                self._append_to_download_deque(childpath)
+                                # XXX where should we save the returned deferred?
+                                return self._upload_dirnode.delete(childpath, must_be_file=True)
+                            else:
+                                # XXX same version. do nothing.
+                                pass
+                        d2.addCallback(_got_latest_file)
+                        return d2
+                else:
+                    self.warn("WARNING: cannot backup special file %s" % quote_local_unicode_path(childpath))
+                    return None
+            d.addCallback(_process_child)
+            d.addErrback(log.err)
+
+        return d
 
     def startService(self):
         self._db = backupdb.get_backupdb(self._dbfile, create_version=(backupdb.SCHEMA_v3, 3))
diff --git a/src/allmydata/scripts/magic_folder_cli.py b/src/allmydata/scripts/magic_folder_cli.py
index ebe30a13..22a613c1 100644
--- a/src/allmydata/scripts/magic_folder_cli.py
+++ b/src/allmydata/scripts/magic_folder_cli.py
@@ -1,11 +1,11 @@
 
-import os, json
+import os
 from cStringIO import StringIO
 from twisted.python import usage
 
 from .common import BaseOptions, BasedirOptions, get_aliases
-from .cli import MakeDirectoryOptions, ListOptions, LnOptions
-import tahoe_ls, tahoe_mv
+from .cli import MakeDirectoryOptions, LnOptions
+import tahoe_mv
 from allmydata.util import fileutil
 from allmydata import uri
 
diff --git a/src/allmydata/test/test_cli_magic_folder.py b/src/allmydata/test/test_cli_magic_folder.py
index 6199a3c3..7b526c95 100644
--- a/src/allmydata/test/test_cli_magic_folder.py
+++ b/src/allmydata/test/test_cli_magic_folder.py
@@ -1,6 +1,5 @@
 import os.path
 import re
-import json
 
 from twisted.trial import unittest
 from twisted.internet import defer
-- 
2.45.2