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