1+ import os
2+ import sys
3+ import shutil
4+ import yaml
5+
6+ from SCons .Script import *
7+
8+ # SCons AttachConfig Command Function
9+ def GenAttachConfigProject (program = None ):
10+ Rtt_Root = os .getcwd ()
11+ config_file = os .path .join (os .getcwd (), 'rtt_root' , Rtt_Root , '.config' )
12+ config_bacakup = config_file + '.origin'
13+ rtconfig_file = os .path .join (os .getcwd (), 'rtt_root' , Rtt_Root , 'rtconfig.h' )
14+ rtconfig__bacakup = rtconfig_file + '.origin'
15+ if GetOption ('attach' ) == '?' :
16+ attachconfig = []
17+ GetAttachConfig ("get" ,attachconfig ,0 )
18+ print ("\033 [32m✅ AttachConfig has: \033 [0m" )
19+ prefix = attachconfig [0 ]
20+ for line in attachconfig :
21+ temp_prefix = line .split ("." , 1 )
22+ if prefix != temp_prefix [0 ]:
23+ print ("\033 [42m \033 [30m------" + temp_prefix [0 ]+ "------\033 [0m" )
24+ prefix = temp_prefix [0 ]
25+ print (line )
26+
27+
28+ elif GetOption ('attach' ) == 'default' :
29+ if os .path .exists (config_bacakup ):
30+ shutil .copyfile (config_bacakup , config_file )
31+ os .remove (config_bacakup )
32+ if os .path .exists (rtconfig__bacakup ):
33+ shutil .copyfile (rtconfig__bacakup , rtconfig_file )
34+ os .remove (rtconfig__bacakup )
35+ print ("\033 [32m✅ Default .config and rtconfig.h recovery success!\033 [0m" )
36+ else :
37+ attachconfig = GetOption ('attach' )
38+ attachconfig_result = []
39+ GetAttachConfig ("search" ,attachconfig ,attachconfig_result )
40+ if attachconfig_result == []:
41+ print ("❌\033 [31m Without this AttachConfig:" + attachconfig + "\033 [0m" )
42+ return
43+ if os .path .exists (config_bacakup )== False :
44+ shutil .copyfile (config_file , config_bacakup )
45+ if os .path .exists (rtconfig__bacakup )== False :
46+ shutil .copyfile (rtconfig_file , rtconfig__bacakup )
47+ with open (config_file , 'a' ) as destination :
48+ for line in attachconfig_result :
49+ destination .write (line + '\n ' )
50+ from env_utility import defconfig
51+ defconfig (Rtt_Root )
52+ print ("\033 [32m✅ AttachConfig add success!\033 [0m" )
53+
54+ def GetAttachConfig (action ,attachconfig ,attachconfig_result ):
55+ rtt_root = os .getcwd ()
56+ yml_files_content = []
57+ directory = os .path .join (rtt_root , 'rtt_root' , rtt_root , '.ci/attachconfig' )
58+ if os .path .exists (directory ):
59+ for root , dirs , files in os .walk (directory ):
60+ for filename in files :
61+ if filename .endswith ('attachconfig.yml' ):
62+ file_path = os .path .join (root , filename )
63+ if os .path .exists (file_path ):
64+ try :
65+ with open (file_path , 'r' ) as file :
66+ content = yaml .safe_load (file )
67+ if content is None :
68+ continue
69+ yml_files_content .append (content )
70+ except yaml .YAMLError as e :
71+ print (f"::error::Error parsing YAML file: { e } " )
72+ continue
73+ except Exception as e :
74+ print (f"::error::Error reading file: { e } " )
75+ continue
76+ for projects in yml_files_content :
77+ for name , details in projects .items ():
78+ if details .get ("kconfig" ) is None :
79+ continue
80+ if (projects .get (name ) is not None ):
81+ if action == "get" :
82+ attachconfig .append (name )
83+ if action == "search" and name == attachconfig :
84+ from ci .bsp_buildings import get_details_and_dependencies
85+ detail_list = get_details_and_dependencies ([name ],projects )
86+ for line in detail_list :
87+ attachconfig_result .append (line )
0 commit comments