3232import os
3333import re
3434import shutil # noqa: F401
35+ import subprocess
3536import sys
3637import time # noqa: F401
3738from html .parser import HTMLParser
@@ -250,6 +251,7 @@ def setup():
250251 global BASEPATH
251252 BASEPATH = os .getcwd ()
252253 check_temp_folders ()
254+ os .chdir (BASEPATH ) # Need to call git command correctly
253255 except Exception as e :
254256 error (f"ArduPilot Repo folder not found (cd { args .gitFolder } failed)" )
255257 error (e )
@@ -499,11 +501,28 @@ def replace_anchors(source_file, dest_file, version_tag):
499501
500502 # Run param_parse.py tool from Autotest set in the desired commit id
501503 try :
502- os .chdir (f"{ BASEPATH } /Tools/autotest/param_metadata" )
503- if ('rover' in vehicle .lower ()) and ('v3.' not in version .lower ()) and ('v4.0' not in version .lower ()): # Workaround the vehicle renaming (Rover, APMRover2 ArduRover...) # noqa: E501
504- os .system ("python3 ./param_parse.py --vehicle Rover" )
505- else : # regular case
506- os .system (f"python3 ./param_parse.py --vehicle { vehicle_new_to_old_name [vehicle ]} " ) # option "param_parse.py --format rst" is not available in all commits where param_parse.py is found # noqa: E501
504+ param_metadata_dir = os .path .join (BASEPATH , "Tools" , "autotest" , "param_metadata" )
505+ # Workaround the vehicle renaming (Rover, APMRover2 ArduRover...)
506+ if ('rover' in vehicle .lower ()) and ('v3.' not in version .lower ()) and ('v4.0' not in version .lower ()):
507+ vehicle_name = 'Rover'
508+ else :
509+ vehicle_name = vehicle_new_to_old_name [vehicle ]
510+
511+ cmd = ["python3" , "./param_parse.py" , "--vehicle" , vehicle_name ]
512+
513+ # Run with subprocess - use cwd parameter instead of os.chdir()
514+ result = subprocess .run (cmd , cwd = param_metadata_dir ,
515+ capture_output = True , text = True , timeout = 300 )
516+
517+ if result .returncode != 0 :
518+ error (f"param_parse.py failed for { vehicle } { version } : { result .stderr } " )
519+ return None
520+
521+ # Log param_parse.py output for debugging
522+ if result .stdout :
523+ debug (f"param_parse.py stdout for { vehicle } { version } : { result .stdout [:500 ]} " )
524+ if result .stderr :
525+ debug (f"param_parse.py stderr for { vehicle } { version } : { result .stderr [:500 ]} " )
507526
508527 # create a filename for new parameters file
509528 filename = f"parameters-{ vehicle } "
@@ -514,24 +533,25 @@ def replace_anchors(source_file, dest_file, version_tag):
514533 else :
515534 filename += f"-stable-{ version } .rst"
516535
536+ # Use absolute paths for file operations
537+ parameters_rst_path = os .path .join (param_metadata_dir , "Parameters.rst" )
538+ output_file_path = os .path .join (param_metadata_dir , filename )
517539 # Generate new anchors names in files to avoid toctree problems and links in sphinx.
518- if os .path .exists ("Parameters.rst" ):
519- replace_anchors ("Parameters.rst" , filename , filename [10 :- 4 ])
520- os .remove ("Parameters.rst" )
521- debug (f"File { filename } generated. " )
540+ if os .path .exists (parameters_rst_path ):
541+ replace_anchors (parameters_rst_path , output_file_path , filename [10 :- 4 ])
542+ os .remove (parameters_rst_path )
543+ debug (f"File { filename } generated." )
522544 # Remove duplicate RNGFNDx_ Parameters sections before checking labels.
523545 dedupe_rngfnd_parameters_sections (filename )
524546 # Check for duplicate RST labels in the generated file
525547 if rst_has_duplicate_labels (filename ):
526548 debug (f"RST duplicate labels detected in { filename } " )
527-
528549 else :
529550 # this was an error, but turns out we are missing a
530551 # bunch of these, eg.
531552 # [build_parameters.py][error]: Parameters.rst not found to rename to parameters-Copter-stable-V4.0.0.rst
532- progress (f"Parameters.rst not found to rename to { filename } " )
553+ error (f"Parameters.rst not found for { vehicle } { version } " )
533554
534- os .chdir (BASEPATH )
535555 except Exception as e :
536556 error (f'Error while parsing "Parameters.rst" | details:\t { vehicle } \t { version } \t { commit_id } ' )
537557 error (e )
0 commit comments