Skip to content

Commit fa9e6b6

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 47091c1 commit fa9e6b6

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
@@ -1829,17 +1829,25 @@ def test_collect_exts_file_info(self):
18291829
toy_sources = os.path.join(testdir, 'sandbox', 'sources', 'toy')
18301830
toy_ext_sources = os.path.join(toy_sources, 'extensions')
18311831
toy_ec_file = os.path.join(testdir, 'easyconfigs', 'test_ecs', 't', 'toy', 'toy-0.0-gompi-2018a-test.eb')
1832-
toy_ec = process_easyconfig(toy_ec_file)[0]
1832+
1833+
test_ec = os.path.join(self.test_prefix, 'test.eb')
1834+
new_ext_txt = "('baz', '0.0', {'nosource': True})," # With nosource option
1835+
new_ext_txt += "('barbar', '0.0', {'sources': [SOURCE_TAR_GZ]})," # With sources containing a list
1836+
test_ectxt = re.sub(r'\(name, version', new_ext_txt+r"\g<0>", read_file(toy_ec_file))
1837+
write_file(test_ec, test_ectxt)
1838+
1839+
toy_ec = process_easyconfig(test_ec)[0]
18331840
toy_eb = EasyBlock(toy_ec['ec'])
18341841

18351842
exts_file_info = toy_eb.collect_exts_file_info()
18361843

18371844
self.assertIsInstance(exts_file_info, list)
1838-
self.assertEqual(len(exts_file_info), 4)
1845+
self.assertEqual(len(exts_file_info), 6)
18391846

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

18421849
self.assertEqual(exts_file_info[1]['name'], 'bar')
1850+
self.assertEqual(exts_file_info[1]['sources'], ['bar-0.0.tar.gz'])
18431851
self.assertEqual(exts_file_info[1]['src'], os.path.join(toy_ext_sources, 'bar-0.0.tar.gz'))
18441852
bar_patch1 = 'bar-0.0_fix-silly-typo-in-printf-statement.patch'
18451853
self.assertEqual(exts_file_info[1]['patches'][0]['name'], bar_patch1)
@@ -1849,36 +1857,63 @@ def test_collect_exts_file_info(self):
18491857
self.assertEqual(exts_file_info[1]['patches'][1]['path'], os.path.join(toy_ext_sources, bar_patch2))
18501858

18511859
self.assertEqual(exts_file_info[2]['name'], 'barbar')
1860+
self.assertEqual(exts_file_info[2]['sources'], ['barbar-1.2.tar.gz'])
18521861
self.assertEqual(exts_file_info[2]['src'], os.path.join(toy_ext_sources, 'barbar-1.2.tar.gz'))
18531862
self.assertNotIn('patches', exts_file_info[2])
18541863

1855-
self.assertEqual(exts_file_info[3]['name'], 'toy')
1856-
self.assertEqual(exts_file_info[3]['src'], os.path.join(toy_sources, 'toy-0.0.tar.gz'))
1864+
self.assertEqual(exts_file_info[3]['name'], 'baz')
1865+
self.assertNotIn('sources', exts_file_info[3])
1866+
self.assertNotIn('sources', exts_file_info[3]['options'])
1867+
self.assertNotIn('src', exts_file_info[3])
18571868
self.assertNotIn('patches', exts_file_info[3])
18581869

1870+
self.assertEqual(exts_file_info[4]['name'], 'barbar')
1871+
self.assertEqual(exts_file_info[4]['sources'], ['barbar-0.0.tar.gz'])
1872+
self.assertEqual(exts_file_info[4]['src'], os.path.join(toy_ext_sources, 'barbar-0.0.tar.gz'))
1873+
self.assertNotIn('patches', exts_file_info[4])
1874+
1875+
self.assertEqual(exts_file_info[5]['name'], 'toy')
1876+
self.assertEqual(exts_file_info[5]['sources'], ['toy-0.0.tar.gz'])
1877+
self.assertEqual(exts_file_info[5]['src'], os.path.join(toy_sources, 'toy-0.0.tar.gz'))
1878+
self.assertNotIn('patches', exts_file_info[5])
1879+
18591880
# location of files is missing when fetch_files is set to False
18601881
exts_file_info = toy_eb.collect_exts_file_info(fetch_files=False, verify_checksums=False)
18611882

18621883
self.assertIsInstance(exts_file_info, list)
1863-
self.assertEqual(len(exts_file_info), 4)
1884+
self.assertEqual(len(exts_file_info), 6)
18641885

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

18671888
self.assertEqual(exts_file_info[1]['name'], 'bar')
1889+
self.assertEqual(exts_file_info[1]['sources'], ['bar-0.0.tar.gz'])
18681890
self.assertNotIn('src', exts_file_info[1])
18691891
self.assertEqual(exts_file_info[1]['patches'][0]['name'], bar_patch1)
18701892
self.assertNotIn('path', exts_file_info[1]['patches'][0])
18711893
self.assertEqual(exts_file_info[1]['patches'][1]['name'], bar_patch2)
18721894
self.assertNotIn('path', exts_file_info[1]['patches'][1])
18731895

18741896
self.assertEqual(exts_file_info[2]['name'], 'barbar')
1897+
self.assertEqual(exts_file_info[2]['sources'], ['barbar-1.2.tar.gz'])
18751898
self.assertNotIn('src', exts_file_info[2])
18761899
self.assertNotIn('patches', exts_file_info[2])
18771900

1878-
self.assertEqual(exts_file_info[3]['name'], 'toy')
1901+
self.assertEqual(exts_file_info[3]['name'], 'baz')
1902+
self.assertNotIn('sources', exts_file_info[3])
1903+
self.assertNotIn('sources', exts_file_info[3]['options'])
18791904
self.assertNotIn('src', exts_file_info[3])
18801905
self.assertNotIn('patches', exts_file_info[3])
18811906

1907+
self.assertEqual(exts_file_info[4]['name'], 'barbar')
1908+
self.assertEqual(exts_file_info[4]['sources'], ['barbar-0.0.tar.gz'])
1909+
self.assertNotIn('src', exts_file_info[4])
1910+
self.assertNotIn('patches', exts_file_info[4])
1911+
1912+
self.assertEqual(exts_file_info[5]['name'], 'toy')
1913+
self.assertEqual(exts_file_info[5]['sources'], ['toy-0.0.tar.gz'])
1914+
self.assertNotIn('src', exts_file_info[5])
1915+
self.assertNotIn('patches', exts_file_info[5])
1916+
18821917
error_msg = "Can't verify checksums for extension files if they are not being fetched"
18831918
self.assertErrorRegex(EasyBuildError, error_msg, toy_eb.collect_exts_file_info, fetch_files=False)
18841919

@@ -2569,14 +2604,11 @@ def run_checks():
25692604

25702605
# full check also catches checksum issues with extensions
25712606
res = eb.check_checksums()
2572-
self.assertEqual(len(res), 4)
2607+
self.assertEqual(len(res), 3)
25732608
run_checks()
25742609

2575-
idx = 2
2576-
for ext in ['bar', 'barbar']:
2577-
expected = "Checksums missing for one or more sources/patches of extension %s in " % ext
2578-
self.assertTrue(res[idx].startswith(expected))
2579-
idx += 1
2610+
expected = "Checksums missing for one or more sources/patches of extension bar in "
2611+
self.assertTrue(res[2].startswith(expected))
25802612

25812613
# check whether tuple of alternative SHA256 checksums is correctly recognized
25822614
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
@@ -5819,6 +5819,7 @@ def test_inject_checksums(self):
58195819
}))
58205820
self.assertEqual(ec['exts_list'][2], ('barbar', '1.2', {
58215821
'checksums': ['d5bd9908cdefbe2d29c6f8d5b45b2aaed9fd904b5e6397418bb5094fbdb3d838'],
5822+
'sources': {'filename': '%(name)s-%(version)s.tar.gz'},
58225823
'start_dir': 'src',
58235824
}))
58245825

0 commit comments

Comments
 (0)