From 7974bec7ff05e485833d902b212eae13e2e82db7 Mon Sep 17 00:00:00 2001 From: Wang Qiang Date: Wed, 29 Apr 2026 17:18:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20Git=20=E5=8C=85=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E6=97=B6=E6=B5=85=E5=85=8B=E9=9A=86=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E9=9D=9E=E9=BB=98=E8=AE=A4=E5=88=86=E6=94=AF=20checkout=20?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题:install_git_package 函数使用 --depth=1 浅克隆但未指定分支, 导致 VER_SHA 为分支名或非 HEAD SHA 时 checkout 失败。 修复:根据 VER_SHA 类型选择正确的克隆方式: - 分支名/标签名:使用 --branch 参数克隆指定分支 - commit SHA:先克隆后 fetch 指定 SHA 再 checkout Co-Authored-By: Claude Opus 4.7 --- cmds/cmd_package/cmd_package_update.py | 32 ++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/cmds/cmd_package/cmd_package_update.py b/cmds/cmd_package/cmd_package_update.py index 4fd9c773..ae8786f3 100644 --- a/cmds/cmd_package/cmd_package_update.py +++ b/cmds/cmd_package/cmd_package_update.py @@ -28,6 +28,7 @@ import logging import os import platform +import re import shutil import time @@ -42,6 +43,13 @@ find_bool_macro_in_config +def is_commit_sha(ver_sha): + """检测 VER_SHA 是否为 commit SHA(40位十六进制)""" + if ver_sha and re.match(r'^[0-9a-f]{40}$', ver_sha): + return True + return False + + def determine_support_chinese(env_root): get_flag_file_path = os.path.join(env_root, 'tools', 'bin', 'env_above_ver_1_1') if os.path.isfile(get_flag_file_path): @@ -216,12 +224,26 @@ def install_git_package(bsp_package_path, package_name, package_info, package_ur repo_path = repo_path + '-' + package_info['ver'] repo_name_with_version = '"' + repo_path + '"' - clone_cmd = 'git clone ' + package_url + ' ' + repo_name_with_version + ' --depth=1' - logging.info(clone_cmd) - execute_command(clone_cmd, cwd=bsp_package_path) + # 修复:根据 VER_SHA 类型选择正确的克隆方式 + if ver_sha and not is_commit_sha(ver_sha): + # VER_SHA 是分支名/标签名,使用 --branch 参数 + clone_cmd = 'git clone ' + package_url + ' ' + repo_name_with_version + ' --depth=1 --branch ' + ver_sha + logging.info(clone_cmd) + execute_command(clone_cmd, cwd=bsp_package_path) + # 分支名已在克隆时切换,无需额外 checkout + else: + # VER_SHA 是 SHA 或为空,使用原来的方式 + clone_cmd = 'git clone ' + package_url + ' ' + repo_name_with_version + ' --depth=1' + logging.info(clone_cmd) + execute_command(clone_cmd, cwd=bsp_package_path) + + # 如果是 SHA,需要 fetch 后 checkout + if ver_sha and is_commit_sha(ver_sha): + fetch_cmd = 'git fetch origin ' + ver_sha + execute_command(fetch_cmd, cwd=repo_path) + git_check_cmd = 'git checkout -q ' + ver_sha + execute_command(git_check_cmd, cwd=repo_path) - git_check_cmd = 'git checkout -q ' + ver_sha - execute_command(git_check_cmd, cwd=repo_path) except Exception as e: print('Error message:%s' % e) print("\nFailed to download software package with git. Please check the network connection.")