def test_process_manifest(self): source = self.tmppath('source') os.mkdir(source) os.mkdir('%s/base' % source) os.mkdir('%s/base/foo' % source) os.mkdir('%s/base2' % source) with open('%s/base/foo/file1' % source, 'a'): pass with open('%s/base/foo/file2' % source, 'a'): pass with open('%s/base2/file3' % source, 'a'): pass m = InstallManifest() m.add_pattern_link('%s/base' % source, '**', '') m.add_link('%s/base2/file3' % source, 'foo/file3') p = self.tmppath('m') m.write(path=p) dest = self.tmppath('dest') track = self.tmppath('track') for i in range(2): process_install_manifest.process_manifest(dest, [p], track) self.assertTrue(os.path.exists(self.tmppath('dest/foo/file1'))) self.assertTrue(os.path.exists(self.tmppath('dest/foo/file2'))) self.assertTrue(os.path.exists(self.tmppath('dest/foo/file3')))
def _synchronize_docs(self): m = InstallManifest() m.add_link(self._conf_py_path, 'conf.py') for dest, source in sorted(self._trees.items()): source_dir = os.path.join(self._topsrcdir, source) for root, dirs, files in os.walk(source_dir): for f in files: source_path = os.path.join(root, f) rel_source = source_path[len(source_dir) + 1:] m.add_link(source_path, os.path.join(dest, rel_source)) copier = FileCopier() m.populate_registry(copier) copier.copy(self._docs_dir) with open(self._index_path, 'rb') as fh: data = fh.read() indexes = ['%s/index' % p for p in sorted(self._trees.keys())] indexes = '\n '.join(indexes) packages = [os.path.basename(p) for p in self._python_package_dirs] packages = ['python/%s' % p for p in packages] packages = '\n '.join(sorted(packages)) data = data.format(indexes=indexes, python_packages=packages) with open(os.path.join(self._docs_dir, 'index.rst'), 'wb') as fh: fh.write(data)
def _get_test_manifest(self): m = InstallManifest() m.add_link(self.tmppath('s_source'), 's_dest') m.add_copy(self.tmppath('c_source'), 'c_dest') m.add_preprocess(self.tmppath('p_source'), 'p_dest', self.tmppath('p_source.pp'), '#', {'FOO':'BAR', 'BAZ':'QUX'}) m.add_required_exists('e_dest') m.add_optional_exists('o_dest') m.add_pattern_link('ps_base', '*', 'ps_dest') m.add_pattern_copy('pc_base', '**', 'pc_dest') m.add_content('the content\non\nmultiple lines', 'content') return m
def _get_test_manifest(self): m = InstallManifest() m.add_link(self.tmppath('s_source'), 's_dest') m.add_copy(self.tmppath('c_source'), 'c_dest') m.add_preprocess(self.tmppath('p_source'), 'p_dest', self.tmppath('p_source.pp'), '#', {'FOO':'BAR', 'BAZ':'QUX'}) m.add_required_exists('e_dest') m.add_optional_exists('o_dest') m.add_pattern_link('ps_base', '*', 'ps_dest') m.add_pattern_copy('pc_base', '**', 'pc_dest') m.add_content('the content\non\nmultiple lines', 'content') return m
def test_or(self): m1 = self._get_test_manifest() orig_length = len(m1) m2 = InstallManifest() m2.add_link('s_source2', 's_dest2') m2.add_copy('c_source2', 'c_dest2') m1 |= m2 self.assertEqual(len(m2), 2) self.assertEqual(len(m1), orig_length + 2) self.assertIn('s_dest2', m1) self.assertIn('c_dest2', m1)
def test_or(self): m1 = self._get_test_manifest() orig_length = len(m1) m2 = InstallManifest() m2.add_link('s_source2', 's_dest2') m2.add_copy('c_source2', 'c_dest2') m1 |= m2 self.assertEqual(len(m2), 2) self.assertEqual(len(m1), orig_length + 2) self.assertIn('s_dest2', m1) self.assertIn('c_dest2', m1)
def _synchronize_docs(self): m = InstallManifest() m.add_link(self.conf_py_path, 'conf.py') for dest, source in sorted(self.trees.items()): source_dir = os.path.join(self.topsrcdir, source) for root, dirs, files in os.walk(source_dir): for f in files: source_path = os.path.join(root, f) rel_source = source_path[len(source_dir) + 1:] m.add_link(source_path, os.path.join(dest, rel_source)) copier = FileCopier() m.populate_registry(copier) copier.copy(self.staging_dir) with open(self.index_path, 'rb') as fh: data = fh.read() def is_toplevel(key): """Whether the tree is nested under the toplevel index, or is nested under another tree's index. """ for k in self.trees: if k == key: continue if key.startswith(k): return False return True toplevel_trees = { k: v for k, v in self.trees.items() if is_toplevel(k) } indexes = ['%s/index' % p for p in sorted(toplevel_trees.keys())] indexes = '\n '.join(indexes) packages = [os.path.basename(p) for p in self.python_package_dirs] packages = ['python/%s' % p for p in packages] packages = '\n '.join(sorted(packages)) data = data.format(indexes=indexes, python_packages=packages) with open(os.path.join(self.staging_dir, 'index.rst'), 'wb') as fh: fh.write(data)
def test_install_manifests_written(self): env, objs = self._emit('stub0') backend = RecursiveMakeBackend(env) m = InstallManifest() backend._install_manifests['testing'] = m m.add_link(__file__, 'self') backend.consume(objs) man_dir = mozpath.join(env.topobjdir, '_build_manifests', 'install') self.assertTrue(os.path.isdir(man_dir)) expected = ['testing'] for e in expected: full = mozpath.join(man_dir, e) self.assertTrue(os.path.exists(full)) m2 = InstallManifest(path=full) self.assertEqual(m, m2)
def test_process_manifest(self): source = self.tmppath("source") os.mkdir(source) os.mkdir("%s/base" % source) os.mkdir("%s/base/foo" % source) os.mkdir("%s/base2" % source) with open("%s/base/foo/file1" % source, "a"): pass with open("%s/base/foo/file2" % source, "a"): pass with open("%s/base2/file3" % source, "a"): pass m = InstallManifest() m.add_pattern_link("%s/base" % source, "**", "") m.add_link("%s/base2/file3" % source, "foo/file3") p = self.tmppath("m") m.write(path=p) dest = self.tmppath("dest") track = self.tmppath("track") for i in range(2): process_install_manifest.process_manifest(dest, [p], track) self.assertTrue(os.path.exists(self.tmppath("dest/foo/file1"))) self.assertTrue(os.path.exists(self.tmppath("dest/foo/file2"))) self.assertTrue(os.path.exists(self.tmppath("dest/foo/file3"))) m = InstallManifest() m.write(path=p) for i in range(2): process_install_manifest.process_manifest(dest, [p], track) self.assertFalse(os.path.exists(self.tmppath("dest/foo/file1"))) self.assertFalse(os.path.exists(self.tmppath("dest/foo/file2"))) self.assertFalse(os.path.exists(self.tmppath("dest/foo/file3")))
def test_adds(self): m = InstallManifest() m.add_link('s_source', 's_dest') m.add_copy('c_source', 'c_dest') m.add_required_exists('e_dest') m.add_optional_exists('o_dest') m.add_pattern_link('ps_base', 'ps/*', 'ps_dest') m.add_pattern_copy('pc_base', 'pc/**', 'pc_dest') m.add_preprocess('p_source', 'p_dest', 'p_source.pp') m.add_content('content', 'content') self.assertEqual(len(m), 8) self.assertIn('s_dest', m) self.assertIn('c_dest', m) self.assertIn('p_dest', m) self.assertIn('e_dest', m) self.assertIn('o_dest', m) self.assertIn('content', m) with self.assertRaises(ValueError): m.add_link('s_other', 's_dest') with self.assertRaises(ValueError): m.add_copy('c_other', 'c_dest') with self.assertRaises(ValueError): m.add_preprocess('p_other', 'p_dest', 'p_other.pp') with self.assertRaises(ValueError): m.add_required_exists('e_dest') with self.assertRaises(ValueError): m.add_optional_exists('o_dest') with self.assertRaises(ValueError): m.add_pattern_link('ps_base', 'ps/*', 'ps_dest') with self.assertRaises(ValueError): m.add_pattern_copy('pc_base', 'pc/**', 'pc_dest') with self.assertRaises(ValueError): m.add_content('content', 'content')
def test_adds(self): m = InstallManifest() m.add_link("s_source", "s_dest") m.add_copy("c_source", "c_dest") m.add_required_exists("e_dest") m.add_optional_exists("o_dest") m.add_pattern_link("ps_base", "ps/*", "ps_dest") m.add_pattern_copy("pc_base", "pc/**", "pc_dest") m.add_preprocess("p_source", "p_dest", "p_source.pp") m.add_content("content", "content") self.assertEqual(len(m), 8) self.assertIn("s_dest", m) self.assertIn("c_dest", m) self.assertIn("p_dest", m) self.assertIn("e_dest", m) self.assertIn("o_dest", m) self.assertIn("content", m) with self.assertRaises(ValueError): m.add_link("s_other", "s_dest") with self.assertRaises(ValueError): m.add_copy("c_other", "c_dest") with self.assertRaises(ValueError): m.add_preprocess("p_other", "p_dest", "p_other.pp") with self.assertRaises(ValueError): m.add_required_exists("e_dest") with self.assertRaises(ValueError): m.add_optional_exists("o_dest") with self.assertRaises(ValueError): m.add_pattern_link("ps_base", "ps/*", "ps_dest") with self.assertRaises(ValueError): m.add_pattern_copy("pc_base", "pc/**", "pc_dest") with self.assertRaises(ValueError): m.add_content("content", "content")
def test_process_manifest(self): source = self.tmppath('source') os.mkdir(source) os.mkdir('%s/base' % source) os.mkdir('%s/base/foo' % source) os.mkdir('%s/base2' % source) with open('%s/base/foo/file1' % source, 'a'): pass with open('%s/base/foo/file2' % source, 'a'): pass with open('%s/base2/file3' % source, 'a'): pass m = InstallManifest() m.add_pattern_link('%s/base' % source, '**', '') m.add_link('%s/base2/file3' % source, 'foo/file3') p = self.tmppath('m') m.write(path=p) dest = self.tmppath('dest') track = self.tmppath('track') for i in range(2): process_install_manifest.process_manifest(dest, [p], track) self.assertTrue(os.path.exists(self.tmppath('dest/foo/file1'))) self.assertTrue(os.path.exists(self.tmppath('dest/foo/file2'))) self.assertTrue(os.path.exists(self.tmppath('dest/foo/file3'))) m = InstallManifest() m.write(path=p) for i in range(2): process_install_manifest.process_manifest(dest, [p], track) self.assertFalse(os.path.exists(self.tmppath('dest/foo/file1'))) self.assertFalse(os.path.exists(self.tmppath('dest/foo/file2'))) self.assertFalse(os.path.exists(self.tmppath('dest/foo/file3')))
def test_adds(self): m = InstallManifest() m.add_link('s_source', 's_dest') m.add_copy('c_source', 'c_dest') m.add_required_exists('e_dest') m.add_optional_exists('o_dest') m.add_pattern_link('ps_base', 'ps/*', 'ps_dest') m.add_pattern_copy('pc_base', 'pc/**', 'pc_dest') m.add_preprocess('p_source', 'p_dest', 'p_source.pp') m.add_content('content', 'content') self.assertEqual(len(m), 8) self.assertIn('s_dest', m) self.assertIn('c_dest', m) self.assertIn('p_dest', m) self.assertIn('e_dest', m) self.assertIn('o_dest', m) self.assertIn('content', m) with self.assertRaises(ValueError): m.add_link('s_other', 's_dest') with self.assertRaises(ValueError): m.add_copy('c_other', 'c_dest') with self.assertRaises(ValueError): m.add_preprocess('p_other', 'p_dest', 'p_other.pp') with self.assertRaises(ValueError): m.add_required_exists('e_dest') with self.assertRaises(ValueError): m.add_optional_exists('o_dest') with self.assertRaises(ValueError): m.add_pattern_link('ps_base', 'ps/*', 'ps_dest') with self.assertRaises(ValueError): m.add_pattern_copy('pc_base', 'pc/**', 'pc_dest') with self.assertRaises(ValueError): m.add_content('content', 'content')
def _get_test_manifest(self): m = InstallManifest() m.add_link(self.tmppath("s_source"), "s_dest") m.add_copy(self.tmppath("c_source"), "c_dest") m.add_preprocess( self.tmppath("p_source"), "p_dest", self.tmppath("p_source.pp"), "#", { "FOO": "BAR", "BAZ": "QUX" }, ) m.add_required_exists("e_dest") m.add_optional_exists("o_dest") m.add_pattern_link("ps_base", "*", "ps_dest") m.add_pattern_copy("pc_base", "**", "pc_dest") m.add_content("the content\non\nmultiple lines", "content") return m
def test_test_manifest_deffered_installs_written(self): """Shared support files are written to their own data file by the backend.""" env = self._consume('test-manifest-shared-support', RecursiveMakeBackend) # First, read the generated for ini manifest contents. test_files_manifest = mozpath.join(env.topobjdir, '_build_manifests', 'install', '_test_files') m = InstallManifest(path=test_files_manifest) # Then, synthesize one from the test-installs.pkl file. This should # allow us to re-create a subset of the above. env = self._consume('test-manifest-shared-support', TestManifestBackend) test_installs_path = mozpath.join(env.topobjdir, 'test-installs.pkl') with open(test_installs_path, 'r') as fh: test_installs = pickle.load(fh) self.assertEqual(set(test_installs.keys()), set(['child/test_sub.js', 'child/data/**', 'child/another-file.sjs'])) for key in test_installs.keys(): self.assertIn(key, test_installs) synthesized_manifest = InstallManifest() for item, installs in test_installs.items(): for install_info in installs: if len(install_info) == 3: synthesized_manifest.add_pattern_link(*install_info) if len(install_info) == 2: synthesized_manifest.add_link(*install_info) self.assertEqual(len(synthesized_manifest), 3) for item, info in synthesized_manifest._dests.items(): self.assertIn(item, m) self.assertEqual(info, m._dests[item])