@@ -162,7 +162,7 @@ def update_assert_version(
162162 """
163163 # 验证新版本格式
164164 try :
165- Semver (new_version )
165+ new_semver = Semver (new_version )
166166 except Exception :
167167 print (f"Error: Invalid version format: { new_version } " )
168168 return 0 , 0
@@ -172,6 +172,10 @@ def update_assert_version(
172172 print (f"Scanning Lua files in: { current_dir } " )
173173 print (f"Target version: { new_version } " )
174174
175+ # 检测是否为大版本升级
176+ is_major_upgrade = False
177+ previous_version = ""
178+
175179 # 如果指定了 diff 参数或 force_changed,使用 git.get_version_info 获取版本信息
176180 if diff_ver is not None or force_changed :
177181 print ("Getting version information..." )
@@ -181,11 +185,33 @@ def update_assert_version(
181185
182186 base_hash = version_info .get ("previous_hash" , "" )
183187 changed_folders = version_info .get ("changed_addon_folders" , [])
188+ previous_version = version_info .get ("previous" , "" )
184189
185190 if base_hash :
186- print (f"Base version: { version_info .get ('previous' , '' )} ({ base_hash } )" )
187-
188- if changed_folders :
191+ print (f"Base version: { previous_version } ({ base_hash } )" )
192+
193+ # 检测大版本升级
194+ if previous_version :
195+ try :
196+ prev_semver = Semver (previous_version )
197+ is_major_upgrade = new_semver .major > prev_semver .major
198+ if is_major_upgrade :
199+ print (
200+ f"⚠️ Major version upgrade detected ({ previous_version } -> { new_version } )"
201+ )
202+ print (
203+ "Scanning ALL Lua files to update incompatible version constraints..."
204+ )
205+ except Exception :
206+ pass
207+
208+ # 大版本升级时,扫描所有文件(让 satisfies 逻辑判断是否需要更新)
209+ if is_major_upgrade :
210+ lua_files = find_lua_files (current_dir )
211+ # 大版本升级时不强制更新,让 semver_satisfies 自然判断
212+ # ^28.x.x 不满足 29.0.0,会自动更新
213+ force_update = False
214+ elif changed_folders :
189215 print (f"Changed addon folders: { ', ' .join (changed_folders )} " )
190216 # 只处理变更的子插件文件夹中的 Lua 文件
191217 lua_files = []
0 commit comments