Skip to content

Commit 7f8d79e

Browse files
committed
collect_exts_file_info: Add 'sources' key to extensions
The returned dict per extension has a 'patches' key but no 'sources'. Add this incoorporating `source_tmpl` or the default value. Add test for that and also for `nosource: True` and `sources` being a list.
1 parent 73e917c commit 7f8d79e

File tree

4 files changed

+52
-12
lines changed

4 files changed

+52
-12
lines changed

easybuild/framework/easyblock.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -646,6 +646,11 @@ def collect_exts_file_info(self, fetch_files=True, verify_checksums=True):
646646
# copy 'path' entry to 'src' for use with extensions
647647
'src': src['path'],
648648
})
649+
filename = src['name']
650+
else:
651+
filename = source.get('filename')
652+
if filename is not None:
653+
ext_src['sources'] = [filename]
649654

650655
else:
651656
# use default template for name of source file if none is specified
@@ -659,6 +664,7 @@ def collect_exts_file_info(self, fetch_files=True, verify_checksums=True):
659664
error_msg = "source_tmpl value must be a string! (found value of type '%s'): %s"
660665
raise EasyBuildError(error_msg, type(src_fn).__name__, src_fn)
661666

667+
ext_src['sources'] = [src_fn]
662668
if fetch_files:
663669
src_path = self.obtain_file(src_fn, extension=True, urls=source_urls,
664670
force_download=force_download,

test/framework/easyblock.py

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1856,17 +1856,25 @@ def test_collect_exts_file_info(self):
18561856
toy_sources = os.path.join(testdir, 'sandbox', 'sources', 'toy')
18571857
toy_ext_sources = os.path.join(toy_sources, 'extensions')
18581858
toy_ec_file = os.path.join(testdir, 'easyconfigs', 'test_ecs', 't', 'toy', 'toy-0.0-gompi-2018a-test.eb')
1859-
toy_ec = process_easyconfig(toy_ec_file)[0]
1859+
1860+
test_ec = os.path.join(self.test_prefix, 'test.eb')
1861+
new_ext_txt = "('baz', '0.0', {'nosource': True})," # With nosource option
1862+
new_ext_txt += "('barbar', '0.0', {'sources': [SOURCE_TAR_GZ]})," # With sources containing a list
1863+
test_ectxt = re.sub(r'\(name, version', new_ext_txt+r"\g<0>", read_file(toy_ec_file))
1864+
write_file(test_ec, test_ectxt)
1865+
1866+
toy_ec = process_easyconfig(test_ec)[0]
18601867
toy_eb = EasyBlock(toy_ec['ec'])
18611868

18621869
exts_file_info = toy_eb.collect_exts_file_info()
18631870

18641871
self.assertIsInstance(exts_file_info, list)
1865-
self.assertEqual(len(exts_file_info), 4)
1872+
self.assertEqual(len(exts_file_info), 6)
18661873

18671874
self.assertEqual(exts_file_info[0], {'name': 'ulimit'})
18681875

18691876
self.assertEqual(exts_file_info[1]['name'], 'bar')
1877+
self.assertEqual(exts_file_info[1]['sources'], ['bar-0.0.tar.gz'])
18701878
self.assertEqual(exts_file_info[1]['src'], os.path.join(toy_ext_sources, 'bar-0.0.tar.gz'))
18711879
bar_patch1 = 'bar-0.0_fix-silly-typo-in-printf-statement.patch'
18721880
self.assertEqual(exts_file_info[1]['patches'][0]['name'], bar_patch1)
@@ -1876,36 +1884,63 @@ def test_collect_exts_file_info(self):
18761884
self.assertEqual(exts_file_info[1]['patches'][1]['path'], os.path.join(toy_ext_sources, bar_patch2))
18771885

18781886
self.assertEqual(exts_file_info[2]['name'], 'barbar')
1887+
self.assertEqual(exts_file_info[2]['sources'], ['barbar-1.2.tar.gz'])
18791888
self.assertEqual(exts_file_info[2]['src'], os.path.join(toy_ext_sources, 'barbar-1.2.tar.gz'))
18801889
self.assertNotIn('patches', exts_file_info[2])
18811890

1882-
self.assertEqual(exts_file_info[3]['name'], 'toy')
1883-
self.assertEqual(exts_file_info[3]['src'], os.path.join(toy_sources, 'toy-0.0.tar.gz'))
1891+
self.assertEqual(exts_file_info[3]['name'], 'baz')
1892+
self.assertNotIn('sources', exts_file_info[3])
1893+
self.assertNotIn('sources', exts_file_info[3]['options'])
1894+
self.assertNotIn('src', exts_file_info[3])
18841895
self.assertNotIn('patches', exts_file_info[3])
18851896

1897+
self.assertEqual(exts_file_info[4]['name'], 'barbar')
1898+
self.assertEqual(exts_file_info[4]['sources'], ['barbar-0.0.tar.gz'])
1899+
self.assertEqual(exts_file_info[4]['src'], os.path.join(toy_ext_sources, 'barbar-0.0.tar.gz'))
1900+
self.assertNotIn('patches', exts_file_info[4])
1901+
1902+
self.assertEqual(exts_file_info[5]['name'], 'toy')
1903+
self.assertEqual(exts_file_info[5]['sources'], ['toy-0.0.tar.gz'])
1904+
self.assertEqual(exts_file_info[5]['src'], os.path.join(toy_sources, 'toy-0.0.tar.gz'))
1905+
self.assertNotIn('patches', exts_file_info[5])
1906+
18861907
# location of files is missing when fetch_files is set to False
18871908
exts_file_info = toy_eb.collect_exts_file_info(fetch_files=False, verify_checksums=False)
18881909

18891910
self.assertIsInstance(exts_file_info, list)
1890-
self.assertEqual(len(exts_file_info), 4)
1911+
self.assertEqual(len(exts_file_info), 6)
18911912

18921913
self.assertEqual(exts_file_info[0], {'name': 'ulimit'})
18931914

18941915
self.assertEqual(exts_file_info[1]['name'], 'bar')
1916+
self.assertEqual(exts_file_info[1]['sources'], ['bar-0.0.tar.gz'])
18951917
self.assertNotIn('src', exts_file_info[1])
18961918
self.assertEqual(exts_file_info[1]['patches'][0]['name'], bar_patch1)
18971919
self.assertNotIn('path', exts_file_info[1]['patches'][0])
18981920
self.assertEqual(exts_file_info[1]['patches'][1]['name'], bar_patch2)
18991921
self.assertNotIn('path', exts_file_info[1]['patches'][1])
19001922

19011923
self.assertEqual(exts_file_info[2]['name'], 'barbar')
1924+
self.assertEqual(exts_file_info[2]['sources'], ['barbar-1.2.tar.gz'])
19021925
self.assertNotIn('src', exts_file_info[2])
19031926
self.assertNotIn('patches', exts_file_info[2])
19041927

1905-
self.assertEqual(exts_file_info[3]['name'], 'toy')
1928+
self.assertEqual(exts_file_info[3]['name'], 'baz')
1929+
self.assertNotIn('sources', exts_file_info[3])
1930+
self.assertNotIn('sources', exts_file_info[3]['options'])
19061931
self.assertNotIn('src', exts_file_info[3])
19071932
self.assertNotIn('patches', exts_file_info[3])
19081933

1934+
self.assertEqual(exts_file_info[4]['name'], 'barbar')
1935+
self.assertEqual(exts_file_info[4]['sources'], ['barbar-0.0.tar.gz'])
1936+
self.assertNotIn('src', exts_file_info[4])
1937+
self.assertNotIn('patches', exts_file_info[4])
1938+
1939+
self.assertEqual(exts_file_info[5]['name'], 'toy')
1940+
self.assertEqual(exts_file_info[5]['sources'], ['toy-0.0.tar.gz'])
1941+
self.assertNotIn('src', exts_file_info[5])
1942+
self.assertNotIn('patches', exts_file_info[5])
1943+
19091944
error_msg = "Can't verify checksums for extension files if they are not being fetched"
19101945
self.assertErrorRegex(EasyBuildError, error_msg, toy_eb.collect_exts_file_info, fetch_files=False)
19111946

@@ -2619,14 +2654,11 @@ def run_checks():
26192654

26202655
# full check also catches checksum issues with extensions
26212656
res = eb.check_checksums()
2622-
self.assertEqual(len(res), 4)
2657+
self.assertEqual(len(res), 3)
26232658
run_checks()
26242659

2625-
idx = 2
2626-
for ext in ['bar', 'barbar']:
2627-
expected = "Checksums missing for one or more sources/patches of extension %s in " % ext
2628-
self.assertTrue(res[idx].startswith(expected))
2629-
idx += 1
2660+
expected = "Checksums missing for one or more sources/patches of extension bar in "
2661+
self.assertTrue(res[2].startswith(expected))
26302662

26312663
# check whether tuple of alternative SHA256 checksums is correctly recognized
26322664
toy_ec = os.path.join(testdir, 'easyconfigs', 'test_ecs', 't', 'toy', 'toy-0.0.eb')

test/framework/easyconfigs/test_ecs/t/toy/toy-0.0-gompi-2018a-test.eb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ exts_list = [
4545
}),
4646
('barbar', '1.2', {
4747
'start_dir': 'src',
48+
'sources': {'filename': SOURCE_TAR_GZ},
4849
}),
4950
(name, version, {
5051
'sanity_check_paths': {'files': ['lib/libtoy.a'], 'dirs': []},

test/framework/options.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6023,6 +6023,7 @@ def test_inject_checksums(self):
60236023
}))
60246024
self.assertEqual(ec['exts_list'][2], ('barbar', '1.2', {
60256025
'checksums': ['d5bd9908cdefbe2d29c6f8d5b45b2aaed9fd904b5e6397418bb5094fbdb3d838'],
6026+
'sources': {'filename': '%(name)s-%(version)s.tar.gz'},
60266027
'start_dir': 'src',
60276028
}))
60286029

0 commit comments

Comments
 (0)