From 40676b6530236ec74bf98ac7070ac368df59211e Mon Sep 17 00:00:00 2001 From: wdfk-prog <1425075683@qq.com> Date: Wed, 8 Apr 2026 10:29:30 +0800 Subject: [PATCH] fix[tools][eclipse]: avoid unnecessary project file rewrites during eclipse target generation --- tools/targets/eclipse.py | 48 ++++++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/tools/targets/eclipse.py b/tools/targets/eclipse.py index 050d8a184f3..0cd41925679 100644 --- a/tools/targets/eclipse.py +++ b/tools/targets/eclipse.py @@ -29,6 +29,26 @@ source_pattern = ['*.c', '*.cpp', '*.cxx', '*.cc', '*.s', '*.S', '*.asm','*.cmd'] +def _write_text_if_changed(path, content, encoding='utf-8'): + old_content = None + if os.path.exists(path): + with open(path, 'r', encoding=encoding, errors='ignore') as f: + old_content = f.read() + + if old_content == content: + return False + + with open(path, 'w', encoding=encoding, newline='\n') as f: + f.write(content) + + return True + + +def _serialize_xml(root, xml_decl): + xml_indent(root) + return xml_decl + etree.tostring(root, encoding='utf-8').decode('utf-8') + + def OSPath(path): import platform @@ -257,11 +277,11 @@ def HandleToolOption(tools, env, project, reset): file_tail = '\n#endif /*RTCONFIG_PREINC_H__*/\n' rtt_pre_inc_item = '"${workspace_loc:/${ProjName}/rtconfig_preinc.h}"' # save the CPPDEFINES in to rtconfig_preinc.h - with open('rtconfig_preinc.h', mode = 'w+') as f: - f.write(file_header) - for cppdef in CPPDEFINES: - f.write("#define " + cppdef.replace('=', ' ') + '\n') - f.write(file_tail) + preinc_content = file_header + for cppdef in CPPDEFINES: + preinc_content += "#define " + cppdef.replace('=', ' ') + '\n' + preinc_content += file_tail + _write_text_if_changed('rtconfig_preinc.h', preinc_content) # change the c.compiler.include.files files = option.findall('listOptionValue') find_ok = False @@ -380,11 +400,8 @@ def UpdateProjectStructure(env, prj_name): name = SubElement(root, 'name') name.text = prj_name - out = open('.project', 'w') - out.write('\n') - xml_indent(root) - out.write(etree.tostring(root, encoding='utf-8').decode('utf-8')) - out.close() + project_content = _serialize_xml(root, '\n') + _write_text_if_changed('.project', project_content) return @@ -518,12 +535,11 @@ def UpdateCproject(env, project, excluding, reset, prj_name): SubElement(configuration, 'resource', {'resourceType': "PROJECT", 'workspacePath': prj_name}) # write back to .cproject - out = open('.cproject', 'w') - out.write('\n') - out.write('') - xml_indent(root) - out.write(etree.tostring(root, encoding='utf-8').decode('utf-8')) - out.close() + cproject_content = _serialize_xml( + root, + '\n' + ) + _write_text_if_changed('.cproject', cproject_content) def TargetEclipse(env, reset=False, prj_name=None):