From 74c5b55c1983ee4faf0e82339cf83307cf39e4cd Mon Sep 17 00:00:00 2001
From: Karl-Hermann Wieners <karl-hermann.wieners@mpimet.mpg.de>
Date: Wed, 13 Jan 2016 09:33:47 +0000
Subject: [PATCH] Changed 'extended' jobs to allow their own templates override
 the parent's

---
 CHANGES.txt |  1 +
 mkexp       | 28 +++++++++++++++++-----------
 2 files changed, 18 insertions(+), 11 deletions(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index 62c4edc..9f1e5c4 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -20,6 +20,7 @@ Templates
 ---------
 
 * Added 'match' filter, allowing to use regular expression matches
+* Changed 'extended' jobs to allow their own templates override the parent's
 * Added missing tests for 'wordwrap' filter
 * Re-wrote documentation on additional Jinja filters
 
diff --git a/mkexp b/mkexp
index 200388a..cf1000a 100755
--- a/mkexp
+++ b/mkexp
@@ -410,14 +410,14 @@ for subjob, subconfig in jobs_config.iteritems():
 
         # Allow simple inheritance
         # Support deprecated keyword 'extends' but warn user
-        template_job = subjob
+        extended_job = None
         if 'extends' in subconfig or '.extends' in subconfig:
             if 'extends' in subconfig:
                 keyword_warning('extends')
-                template_job = subconfig['extends']
+                extended_job = subconfig['extends']
             else:
-                template_job = subconfig['.extends']
-            pre_config.merge(jobs_config[template_job])
+                extended_job = subconfig['.extends']
+            pre_config.merge(jobs_config[extended_job])
 
         # Add actual subjob config
         pre_config.merge(subconfig)
@@ -471,13 +471,19 @@ for subjob, subconfig in jobs_config.iteritems():
                         format_namelist(groups)
 
         # Generate job script
-        expand_template_file(job_config,
-                             ( get_exp_template_name(config.experiment_id,
-                                                     template_job, ''),
-                               get_exp_template_name(config.experiment_kind,
-                                                     template_job),
-                               get_exp_template_name(ExpConfig.default_name,
-                                                     template_job) ),
+        template_search_list = (
+            get_exp_template_name(config.experiment_id, subjob, ''),
+            get_exp_template_name(config.experiment_kind, subjob),
+            get_exp_template_name(ExpConfig.default_name, subjob)
+        )
+        if extended_job:
+            template_search_list += (
+                get_exp_template_name(config.experiment_id, extended_job, ''),
+                get_exp_template_name(config.experiment_kind, extended_job),
+                get_exp_template_name(ExpConfig.default_name, extended_job)
+            )
+            
+        expand_template_file(job_config, template_search_list,
                              get_exp_script_name(config.experiment_id, subjob),
                              os.path.join(backup_dir,
                                           config.experiment_id+'.'+subjob))
-- 
GitLab