From 1e62a55e2890d5fe884650e046e6bfad69cd74bf Mon Sep 17 00:00:00 2001 From: Nick Alexander Date: Thu, 13 Feb 2014 09:09:08 -0800 Subject: [PATCH] Bug 971272 - Part 2: Expose FileRegistry.required_directories. r=gps --- python/mozbuild/mozpack/copier.py | 9 +++++++ python/mozbuild/mozpack/test/test_copier.py | 27 +++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/python/mozbuild/mozpack/copier.py b/python/mozbuild/mozpack/copier.py index d047972ecbc2..b199890b7b0c 100644 --- a/python/mozbuild/mozpack/copier.py +++ b/python/mozbuild/mozpack/copier.py @@ -134,6 +134,15 @@ class FileRegistry(object): ''' return self._files.iteritems() + def required_directories(self): + ''' + Return the set of directories required by the paths in the container, + in no particular order. The returned directories are relative to an + unspecified (virtual) root directory (and do not include said root + directory). + ''' + return set(k for k, v in self._required_directories.items() if v > 0) + class FileCopyResult(object): """Represents results of a FileCopier.copy operation.""" diff --git a/python/mozbuild/mozpack/test/test_copier.py b/python/mozbuild/mozpack/test/test_copier.py index afa757d506a5..1bf3b1dbd738 100644 --- a/python/mozbuild/mozpack/test/test_copier.py +++ b/python/mozbuild/mozpack/test/test_copier.py @@ -116,6 +116,33 @@ class TestFileRegistry(MatchTestTemplate, unittest.TestCase): self.registry.remove('bar/zot') self.registry.add('bar/zot', GeneratedFile('barzot')) + def test_required_directories(self): + self.registry = FileRegistry() + + self.registry.add('foo', GeneratedFile('foo')) + self.assertEqual(self.registry.required_directories(), set()) + + self.registry.add('bar/baz', GeneratedFile('barbaz')) + self.assertEqual(self.registry.required_directories(), {'bar'}) + + self.registry.add('bar/zot', GeneratedFile('barzot')) + self.assertEqual(self.registry.required_directories(), {'bar'}) + + self.registry.add('bar/zap/zot', GeneratedFile('barzapzot')) + self.assertEqual(self.registry.required_directories(), {'bar', 'bar/zap'}) + + self.registry.remove('bar/zap/zot') + self.assertEqual(self.registry.required_directories(), {'bar'}) + + self.registry.remove('bar/baz') + self.assertEqual(self.registry.required_directories(), {'bar'}) + + self.registry.remove('bar/zot') + self.assertEqual(self.registry.required_directories(), set()) + + self.registry.add('x/y/z', GeneratedFile('xyz')) + self.assertEqual(self.registry.required_directories(), {'x', 'x/y'}) + class TestFileCopier(TestWithTmpDir): def all_dirs(self, base):