Skip to content

Commit b51aceb

Browse files
authored
Merge pull request #3332 from ocaisa/dump_tweaked_easyconfigs
allow copying of tweaked easyconfigs when using --try-* with --copy-ec
2 parents 2ca3cf4 + f149b98 commit b51aceb

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

easybuild/main.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747

4848
from easybuild.framework.easyblock import build_and_install_one, inject_checksums
4949
from easybuild.framework.easyconfig import EASYCONFIGS_PKG_SUBDIR
50+
from easybuild.framework.easyconfig.easyconfig import clean_up_easyconfigs
5051
from easybuild.framework.easyconfig.easyconfig import fix_deprecated_easyconfigs, verify_easyconfig_filename
5152
from easybuild.framework.easyconfig.style import cmdline_easyconfigs_style_check
5253
from easybuild.framework.easyconfig.tools import categorize_files_by_type, dep_graph
@@ -320,7 +321,7 @@ def main(args=None, logfile=None, do_build=None, testing=False, modtool=None):
320321
# determine paths to easyconfigs
321322
determined_paths = det_easyconfig_paths(categorized_paths['easyconfigs'])
322323

323-
if options.copy_ec or options.fix_deprecated_easyconfigs or options.show_ec:
324+
if (options.copy_ec and not tweaked_ecs_paths) or options.fix_deprecated_easyconfigs or options.show_ec:
324325

325326
if options.copy_ec:
326327
if len(determined_paths) == 1:
@@ -420,6 +421,17 @@ def main(args=None, logfile=None, do_build=None, testing=False, modtool=None):
420421
print_msg("No easyconfigs left to be built.", log=_log, silent=testing)
421422
ordered_ecs = []
422423

424+
if options.copy_ec and tweaked_ecs_paths:
425+
all_specs = [spec['spec'] for spec in
426+
resolve_dependencies(easyconfigs, modtool, retain_all_deps=True, raise_error_missing_ecs=False)]
427+
tweaked_ecs_in_all_ecs = [path for path in all_specs if
428+
any(tweaked_ecs_path in path for tweaked_ecs_path in tweaked_ecs_paths)]
429+
if tweaked_ecs_in_all_ecs:
430+
# Clean them, then copy them
431+
clean_up_easyconfigs(tweaked_ecs_in_all_ecs)
432+
copy_files(tweaked_ecs_in_all_ecs, target_path)
433+
print_msg("%d file(s) copied to %s" % (len(tweaked_ecs_in_all_ecs), target_path), prefix=False)
434+
423435
# creating/updating PRs
424436
if pr_options:
425437
if options.new_pr:

test/framework/options.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1946,6 +1946,51 @@ def test_try(self):
19461946
allargs = args + ['--software-version=1.2.3', '--toolchain=gompi,2018a']
19471947
self.assertErrorRegex(EasyBuildError, "version .* not available", self.eb_main, allargs, raise_error=True)
19481948

1949+
def test_try_with_copy(self):
1950+
"""Test whether --try options are taken into account."""
1951+
ecs_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'easyconfigs', 'test_ecs')
1952+
tweaked_toy_ec = os.path.join(self.test_buildpath, 'toy-0.0-tweaked.eb')
1953+
copy_file(os.path.join(ecs_path, 't', 'toy', 'toy-0.0.eb'), tweaked_toy_ec)
1954+
f = open(tweaked_toy_ec, 'a')
1955+
f.write("easyblock = 'ConfigureMake'")
1956+
f.close()
1957+
1958+
args = [
1959+
tweaked_toy_ec,
1960+
'--sourcepath=%s' % self.test_sourcepath,
1961+
'--buildpath=%s' % self.test_buildpath,
1962+
'--installpath=%s' % self.test_installpath,
1963+
'--dry-run',
1964+
'--robot=%s' % ecs_path,
1965+
'--copy-ec',
1966+
]
1967+
self.mock_stdout(True)
1968+
self.mock_stderr(True)
1969+
copied_ec = os.path.join(self.test_buildpath, 'my_eb.eb')
1970+
self.eb_main(args + [copied_ec], verbose=True, raise_error=True)
1971+
outtxt = self.get_stdout()
1972+
errtxt = self.get_stderr()
1973+
self.assertTrue(r'toy-0.0-tweaked.eb copied to ' + copied_ec in outtxt)
1974+
self.assertFalse(errtxt)
1975+
self.mock_stdout(False)
1976+
self.mock_stderr(False)
1977+
self.assertTrue(os.path.exists(copied_ec))
1978+
1979+
self.mock_stdout(True)
1980+
self.mock_stderr(True)
1981+
tweaked_ecs_dir = os.path.join(self.test_buildpath, 'my_tweaked_ecs')
1982+
self.eb_main(args + ['--try-software=foo,1.2.3', '--try-toolchain=gompi,2018a', tweaked_ecs_dir],
1983+
verbose=True, raise_error=True)
1984+
outtxt = self.get_stdout()
1985+
errtxt = self.get_stderr()
1986+
self.assertTrue(r'1 file(s) copied to ' + tweaked_ecs_dir in outtxt)
1987+
self.assertFalse(errtxt)
1988+
self.mock_stdout(False)
1989+
self.mock_stderr(False)
1990+
self.assertTrue(
1991+
os.path.exists(os.path.join(self.test_buildpath, tweaked_ecs_dir, 'foo-1.2.3-GCC-6.4.0-2.28.eb'))
1992+
)
1993+
19491994
def test_software_version_ordering(self):
19501995
"""Test whether software versions are correctly ordered when using --software."""
19511996
ecs_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'easyconfigs', 'test_ecs')

0 commit comments

Comments
 (0)