diff --git a/scripts/create_test b/scripts/create_test index de6eebcd28e..a5c5130e7e5 100755 --- a/scripts/create_test +++ b/scripts/create_test @@ -320,6 +320,9 @@ OR logger.info("Testnames: %s" % test_names) else: + if args.machine is None: + args.machine = update_acme_tests.infer_machine_name_from_tests(args.testargs) + mach_obj = Machines(machine=args.machine) args.compiler = mach_obj.get_default_compiler() if args.compiler is None else args.compiler diff --git a/scripts/lib/update_acme_tests.py b/scripts/lib/update_acme_tests.py index e9ff9f4e583..67d0604585c 100644 --- a/scripts/lib/update_acme_tests.py +++ b/scripts/lib/update_acme_tests.py @@ -1,5 +1,5 @@ import CIME.utils -from CIME.utils import expect, convert_to_seconds +from CIME.utils import expect, convert_to_seconds, parse_test_name from CIME.XML.machines import Machines # Here are the tests belonging to acme suites. Format is @@ -210,6 +210,36 @@ def get_test_suites(): ############################################################################### return _TEST_SUITES.keys() +############################################################################### +def infer_machine_name_from_tests(testargs): +############################################################################### + """ + >>> infer_machine_name_from_tests(["NCK.f19_g16_rx1.A.melvin_gnu"]) + 'melvin' + >>> infer_machine_name_from_tests(["NCK.f19_g16_rx1.A"]) + >>> infer_machine_name_from_tests(["NCK.f19_g16_rx1.A", "NCK.f19_g16_rx1.A.melvin_gnu"]) + 'melvin' + >>> infer_machine_name_from_tests(["NCK.f19_g16_rx1.A.melvin_gnu", "NCK.f19_g16_rx1.A.melvin_gnu"]) + 'melvin' + """ + acme_test_suites = get_test_suites() + + machine = None + for testarg in testargs: + testarg = testarg.strip() + if testarg.startswith("^"): + testarg = testarg[1:] + + if testarg not in acme_test_suites: + machine_for_this_test = parse_test_name(testarg)[4] + if machine_for_this_test is not None: + if machine is None: + machine = machine_for_this_test + else: + expect(machine == machine_for_this_test, "Must have consistent machine '%s' != '%s'" % (machine, machine_for_this_test)) + + return machine + ############################################################################### def get_full_test_names(testargs, machine, compiler): ###############################################################################