diff options
author | Michał Górny <mgorny@gentoo.org> | 2018-02-14 18:08:16 +0100 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2018-02-22 17:45:08 +0100 |
commit | 44e29b7c5e4354b65b3a45a2deb2f480ba7c2ee2 (patch) | |
tree | 7b71ed8393545dc5acb932d03d36793fabdf2cc3 | |
parent | 952fdcf63a227c341c96206d505be5c44546dd5b (diff) | |
download | gemato-44e29b7c5e4354b65b3a45a2deb2f480ba7c2ee2.tar.gz |
cli: Add -x option to prevent crossing filesystem boundaries
-rw-r--r-- | gemato/cli.py | 4 | ||||
-rw-r--r-- | tests/test_recursiveloader.py | 27 |
2 files changed, 31 insertions, 0 deletions
diff --git a/gemato/cli.py b/gemato/cli.py index 14e1dd5..fdd1a6c 100644 --- a/gemato/cli.py +++ b/gemato/cli.py @@ -146,6 +146,8 @@ class BaseManifestLoaderMixin(object): subp.add_argument('-j', '--jobs', type=int, help='Specify the maximum number of parallel jobs to use (default: {})' .format(multiprocessing.cpu_count())) + subp.add_argument('-x', '--one-file-system', action='store_true', + help='Do not cross filesystem boundaries (report an error instead)') def parse_args(self, args, argp): super(BaseManifestLoaderMixin, self).parse_args(args, argp) @@ -155,6 +157,8 @@ class BaseManifestLoaderMixin(object): if args.jobs < 1: argp.error('--jobs must be positive') self.init_kwargs['max_jobs'] = args.jobs + if args.one_file_system: + self.init_kwargs['allow_xdev'] = False class VerifyCommand(BaseManifestLoaderMixin, VerifyingOpenPGPMixin, diff --git a/tests/test_recursiveloader.py b/tests/test_recursiveloader.py index ae757f2..be32fc4 100644 --- a/tests/test_recursiveloader.py +++ b/tests/test_recursiveloader.py @@ -1575,6 +1575,11 @@ DATA sub/version 0 MD5 d41d8cd98f00b204e9800998ecf8427e self.assertRaises(gemato.exceptions.ManifestCrossDevice, m.assert_directory_verifies, 'sub') + def test_cli_verifies(self): + self.assertEqual( + gemato.cli.main(['gemato', 'verify', '-x', self.dir]), + 1) + def test_update_entries_for_directory(self): m = gemato.recursiveloader.ManifestRecursiveLoader( os.path.join(self.dir, 'Manifest'), @@ -1583,6 +1588,12 @@ DATA sub/version 0 MD5 d41d8cd98f00b204e9800998ecf8427e self.assertRaises(gemato.exceptions.ManifestCrossDevice, m.update_entries_for_directory, '') + def test_cli_update(self): + self.assertEqual( + gemato.cli.main(['gemato', 'update', '-x', + '--hashes=SHA256 SHA512', self.dir]), + 1) + class CrossDeviceEmptyManifestTest(TempDirTestCase): """ @@ -1615,6 +1626,11 @@ class CrossDeviceEmptyManifestTest(TempDirTestCase): m.assert_directory_verifies, '', fail_handler=callback_return_true) + def test_cli_verifies(self): + self.assertEqual( + gemato.cli.main(['gemato', 'verify', '-x', self.dir]), + 1) + def test_update_entries_for_directory(self): m = gemato.recursiveloader.ManifestRecursiveLoader( os.path.join(self.dir, 'Manifest'), @@ -1623,6 +1639,12 @@ class CrossDeviceEmptyManifestTest(TempDirTestCase): self.assertRaises(gemato.exceptions.ManifestCrossDevice, m.update_entries_for_directory, '') + def test_cli_update(self): + self.assertEqual( + gemato.cli.main(['gemato', 'update', '-x', + '--hashes=SHA256 SHA512', self.dir]), + 1) + class CrossDeviceIgnoreManifestTest(TempDirTestCase): """ @@ -1648,6 +1670,11 @@ IGNORE sub allow_xdev=False) m.assert_directory_verifies('') + def test_cli_verifies(self): + self.assertEqual( + gemato.cli.main(['gemato', 'verify', '-x', self.dir]), + 0) + def test_update_entries_for_directory(self): m = gemato.recursiveloader.ManifestRecursiveLoader( os.path.join(self.dir, 'Manifest'), |