From be5d07a70a369f34f186f4b28246e08635473f77 Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@lothar.com>
Date: Sun, 3 May 2015 22:03:25 -0700
Subject: [PATCH] apply review feedback

---
 src/allmydata/scripts/tahoe_cp.py | 14 ++++++++++----
 src/allmydata/test/test_cli_cp.py |  3 ++-
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/allmydata/scripts/tahoe_cp.py b/src/allmydata/scripts/tahoe_cp.py
index 7c302621..b603d6ba 100644
--- a/src/allmydata/scripts/tahoe_cp.py
+++ b/src/allmydata/scripts/tahoe_cp.py
@@ -24,6 +24,10 @@ class FilenameWithTrailingSlashError(TahoeError):
     def __init__(self, name, quotefn=quote_output):
         TahoeError.__init__(self, "source '%s' is not a directory, but ends with a slash" % quotefn(name))
 
+class WeirdSourceError(TahoeError):
+    def __init__(self, absname):
+        quoted = quote_local_unicode_path(absname)
+        TahoeError.__init__(self, "source '%s' is neither a file nor a directory, I can't handle it" % quoted)
 
 def GET_to_file(url):
     resp = do_http("GET", url)
@@ -507,8 +511,8 @@ class Copier:
         for ss in source_specs:
             try:
                 si = self.get_source_info(ss)
-            except FilenameWithTrailingSlashError:
-                self.to_stderr("source is not a directory, but ends with a slash")
+            except FilenameWithTrailingSlashError as e:
+                self.to_stderr(str(e))
                 return 1
             precondition(isinstance(si, FileSources + DirectorySources), si)
             sources.append(si)
@@ -643,8 +647,10 @@ class Copier:
                 t = LocalDirectorySource(self.progress, pathname, name)
             else:
                 if had_trailing_slash:
-                    raise FilenameWithTrailingSlashError(source_spec)
-                assert os.path.isfile(pathname)
+                    raise FilenameWithTrailingSlashError(source_spec,
+                                                         quotefn=quote_local_unicode_path)
+                if not os.path.isfile(pathname):
+                    raise WeirdSourceError(pathname)
                 t = LocalFileSource(pathname, name) # non-empty
         else:
             # this is a tahoe object
diff --git a/src/allmydata/test/test_cli_cp.py b/src/allmydata/test/test_cli_cp.py
index 03abcc45..65f4e4a1 100644
--- a/src/allmydata/test/test_cli_cp.py
+++ b/src/allmydata/test/test_cli_cp.py
@@ -949,7 +949,8 @@ class CopyOut(GridTestMixin, CLITestMixin, unittest.TestCase):
                     return set(["E6-MANYONE"])
                 if err == "target is not a directory, but ends with a slash":
                     return set(["E7-BADSLASH"])
-                if err == "source is not a directory, but ends with a slash":
+                if (err.startswith("source ") and
+                    "is not a directory, but ends with a slash" in err):
                     return set(["E8-BADSLASH"])
             self.fail("unrecognized error ('%s') %s" % (case, res))
         d.addCallback(_check)
-- 
2.45.2