From 34471a1d0dc06ca5590f5e6303f474e7f7059e85 Mon Sep 17 00:00:00 2001
From: Karl-Hermann Wieners <karl-hermann.wieners@mpimet.mpg.de>
Date: Thu, 9 Jun 2022 18:00:20 +0200
Subject: [PATCH] Config: fix missing [jobs] level variables in extended jobs

---
 CHANGES.txt |  1 +
 mkexp       |  2 +-
 test.py     | 28 ++++++++++++++++++++++++++++
 3 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index bd1ef16..89b0edd 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -14,6 +14,7 @@ Config
 
 * Fixed error due to variables at namelist level
 * Fixed recognition of native variables to ignore invalid variable names
+* Fixed missing [jobs] level variables in extended jobs
 
 Tools
 -----
diff --git a/mkexp b/mkexp
index d6146cf..652a902 100755
--- a/mkexp
+++ b/mkexp
@@ -489,7 +489,7 @@ def extend(subjob, jobs_config, extended_jobs, job_dict=None):
         elif subjob_base != subjob and subjob_base in jobs_config:
             extended_job = subjob_base
         if extended_job:
-            extend(extended_job, jobs_config, extended_jobs)
+            extend(extended_job, jobs_config, extended_jobs, job_dict)
 
         # Add global job settings
         pre_config = ConfigObj(interpolation=False)
diff --git a/test.py b/test.py
index cb4206f..e0c7259 100644
--- a/test.py
+++ b/test.py
@@ -1328,6 +1328,34 @@ class InheritanceTestCase(MkexpSimpleTestCase):
             result = align(result)
             self.assertMultiLineEqual(expecteds[i], result)
 
+    def test_job_dict_in_extend(self):
+        writeconfig(self.exp_id, u"""
+            EXP_TYPE =
+            [jobs]
+              var = 42
+              [[job1]]
+                .extends = job
+              [[job]]
+        """)
+        writetemplate(self.exp_id, 'job', u"""
+            %{JOB.var} # %{JOB.id}
+        """)
+        expecteds = {
+            'job':  align(u"""
+                        42 # job
+                    """),
+            'job1': align(u"""
+                        42 # job1
+                    """),
+        }
+        ignore = output(script("mkexp "+self.exp_id+".config"))
+        for i in ('job', 'job1'):
+            result = readfile(join("test", "experiments", self.exp_id,
+                                   self.exp_id+"."+i))
+            result = align(result)
+            self.assertMultiLineEqual(expecteds[i], result)
+
+
 class JobSiblingsTestCase(MkexpSimpleTestCase):
 
     def test_sibling_lookup(self):
-- 
GitLab