@@ -168,42 +168,59 @@ def _archive_rpointer_files(
168168 datename_is_last ,
169169):
170170 ###############################################################################
171- if datename_is_last :
172- rpointers = glob .glob (
173- os .path .join (rundir , "rpointer.*" + _datetime_str (datename ))
174- )
175- # Copy of all rpointer files for latest restart date
176- rpointers = glob .glob (os .path .join (rundir , "rpointer.*" ))
177- for rpointer in rpointers :
178- safe_copy (
179- rpointer , os .path .join (archive_restdir , os .path .basename (rpointer ))
180- )
181- else :
182- # Generate rpointer file(s) for interim restarts for the one datename and each
183- # possible value of ninst_strings
184- if save_interim_restart_files :
185- rpointers = glob .glob (
186- os .path .join (rundir , "rpointer.*" + _datetime_str (datename ))
187- )
188- # If timestamped rpointers exist use them
189- if rpointers :
190- for rpointer in rpointers :
191- safe_copy (
192- rpointer ,
193- os .path .join (archive_restdir , os .path .basename (rpointer )),
194- )
195- else :
196- # parse env_archive.xml to determine the rpointer files
197- # and contents for the given archive_entry tag
198- rpointer_items = archive .get_rpointer_contents (archive_entry )
199171
200- # loop through the possible rpointer files and contents
201- for rpointer_file , rpointer_content in rpointer_items :
202- temp_rpointer_file = rpointer_file
203- temp_rpointer_content = rpointer_content
172+ # parse env_archive.xml to determine the rpointer files
173+ # and contents for the given archive_entry tag
174+ # loop through the possible rpointer files and contents
175+ rpointer_nodes = archive .get_children ("rpointer" , root = archive_entry )
176+ for rpointer in rpointer_nodes :
177+ file_node = archive .get_child ("rpointer_file" , root = rpointer )
178+ temp_rpointer_file = archive .text (file_node )
179+ content_node = archive .get_child ("rpointer_content" , root = rpointer )
180+ temp_rpointer_content = archive .text (content_node )
181+ rpointer_file = temp_rpointer_file .replace ("$NINST_STRING" , "*" )
182+ if rpointer_file == "unset" :
183+ continue
184+ if "$DATENAME" in rpointer_file :
185+ rpointer_file = rpointer_file .replace ("$DATENAME" , _datetime_str (datename ))
186+
187+ expect (
188+ not "$" in rpointer_file ,
189+ "Unrecognized expression in name {}" .format (rpointer_file ),
190+ )
191+ rpointers = glob .glob (rundir + "/" + rpointer_file )
192+ if datename_is_last :
193+ for rpfile in rpointers :
194+ safe_copy (
195+ rpfile , os .path .join (archive_restdir , os .path .basename (rpfile ))
196+ )
197+ else :
198+ # Generate rpointer file(s) for interim restarts for the one datename and each
199+ # possible value of ninst_strings
200+ if save_interim_restart_files :
201+ # If timestamped rpointers exist use them
202+ if rpointers :
203+ for rpfile in rpointers :
204+ logger .info ("moving interim rpointer_file {}" .format (rpfile ))
205+ shutil .move (
206+ rpfile ,
207+ os .path .join (archive_restdir , os .path .basename (rpfile )),
208+ )
209+ else :
204210
205211 # put in a temporary setting for ninst_strings if they are empty
206212 # in order to have just one loop over ninst_strings below
213+ if ninst_strings :
214+ rpointer_content = temp_rpointer_content .replace (
215+ "$NINST_STRING" , ninst_strings [0 ]
216+ )
217+ else :
218+ rpointer_content = temp_rpointer_content .replace (
219+ "$NINST_STRING" , ""
220+ )
221+ rpointer_content = rpointer_content .replace (
222+ "$DATENAME" , _datetime_str (datename )
223+ )
207224 if rpointer_content != "unset" :
208225 if not ninst_strings :
209226 ninst_strings = ["empty" ]
0 commit comments