From 6eaa7f2356881f16594dab93a41cc62e03431561 Mon Sep 17 00:00:00 2001 From: david-sarah Date: Sat, 30 Oct 2010 20:52:31 -0700 Subject: [PATCH] tahoe backup: perform tilde expansion in exclude-from filename (version 2). fixes #1241 --- src/allmydata/scripts/cli.py | 5 +++-- src/allmydata/test/test_cli.py | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/allmydata/scripts/cli.py b/src/allmydata/scripts/cli.py index bb0f4db2..9a2a75dd 100644 --- a/src/allmydata/scripts/cli.py +++ b/src/allmydata/scripts/cli.py @@ -307,10 +307,11 @@ class BackupOptions(VDriveOptions): def opt_exclude_from(self, filepath): """Ignore file matching glob patterns listed in file, one per line. The file is assumed to be in the argv encoding.""" + abs_filepath = argv_to_abspath(filepath) try: - exclude_file = file(filepath) + exclude_file = file(abs_filepath) except: - raise BackupConfigurationError('Error opening exclude file %r.' % filepath) + raise BackupConfigurationError('Error opening exclude file %s.' % quote_output(abs_filepath)) try: for line in exclude_file: self.opt_exclude(line) diff --git a/src/allmydata/test/test_cli.py b/src/allmydata/test/test_cli.py index b3d89916..be89e352 100644 --- a/src/allmydata/test/test_cli.py +++ b/src/allmydata/test/test_cli.py @@ -5,6 +5,8 @@ from cStringIO import StringIO import urllib, re import simplejson +from mock import patch + from allmydata.util import fileutil, hashutil, base32 from allmydata import uri from allmydata.immutable import upload @@ -1867,6 +1869,22 @@ class Backup(GridTestMixin, CLITestMixin, StallMixin, unittest.TestCase): self._check_filtering(filtered, root_listdir, (u'lib.a', u'_darcs', u'subdir'), (nice_doc,)) + @patch('__builtin__.file') + def test_exclude_from_tilde_expansion(self, mock): + basedir = "cli/Backup/exclude_from_tilde_expansion" + fileutil.make_dirs(basedir) + nodeurl_path = os.path.join(basedir, 'node.url') + fileutil.write(nodeurl_path, 'http://example.net:2357/') + + # ensure that tilde expansion is performed on exclude-from argument + exclude_file = u'~/.tahoe/excludes.dummy' + backup_options = cli.BackupOptions() + + mock.return_value = StringIO() + backup_options.parseOptions(['--exclude-from', unicode_to_argv(exclude_file), + '--node-directory', basedir, 'from', 'to']) + self.failUnlessIn(((abspath_expanduser_unicode(exclude_file),), {}), mock.call_args_list) + def test_ignore_symlinks(self): if not hasattr(os, 'symlink'): raise unittest.SkipTest("Symlinks are not supported by Python on this platform.") -- 2.45.2