From 2c306c53ce3e563d9efca252938f7e705aa1fef1 Mon Sep 17 00:00:00 2001 From: Khairul Azhar Kasmiran Date: Tue, 24 Mar 2026 13:45:14 +0800 Subject: [PATCH] vs2017: Patch retry mechanism into meson git calls (#6078) --- .appveyor.yml | 7 ++++--- REUSE.toml | 6 ++++++ librz/core/cmd_descs/cmd_descs.h | 2 +- patches/meson-git-retry.patch | 27 +++++++++++++++++++++++++++ 4 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 patches/meson-git-retry.patch diff --git a/.appveyor.yml b/.appveyor.yml index b3acbe1139..6429573b42 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -74,17 +74,18 @@ install: # Download required packages - cmd: if defined BUILD_DIR ( %PYTHON%\python.exe -m pip install --upgrade pip) - cmd: if defined BUILD_DIR ( %PYTHON%\python.exe -m pip install --upgrade certifi pip-system-certs) - - cmd: if defined BUILD_DIR ( %PYTHON%\python.exe -m pip install meson ninja PyYAML tomli) + - cmd: if defined BUILD_DIR ( %PYTHON%\python.exe -m pip install meson==1.10.2 ninja PyYAML tomli) # Build scripts +# Meson patched on vs2017-based images to work around git network issues build_script: - appveyor AddMessage "Compiling rizin %RZ_VERSION% (%builder%)" - - cmd: if %builder% == vs2017_64 ( set "PATH=C:\mingw\bin;C:\mingw\msys\1.0\bin;%PYTHON%;%PATH%" && call "%VSVARSALLPATH2017%" x64 && %PYTHON%\Scripts\meson setup --buildtype=release --prefix="%CD%\%DIST_FOLDER%" --default-library=static -Db_vscrt=static_from_buildtype build && %PYTHON%\Scripts\ninja -C build install && 7z a %ARTIFACT_ZIP% %DIST_FOLDER% ) + - cmd: if %builder% == vs2017_64 ( patch %PYTHON%\Lib\site-packages\mesonbuild\utils\universal.py patches\meson-git-retry.patch && set "PATH=C:\mingw\bin;C:\mingw\msys\1.0\bin;%PYTHON%;%PATH%" && call "%VSVARSALLPATH2017%" x64 && %PYTHON%\Scripts\meson setup --buildtype=release --prefix="%CD%\%DIST_FOLDER%" --default-library=static -Db_vscrt=static_from_buildtype build && %PYTHON%\Scripts\ninja -C build install && 7z a %ARTIFACT_ZIP% %DIST_FOLDER% ) - cmd: if %builder% == vs2022_64 ( choco install mingw && refreshenv && set "PATH=C:\mingw\bin;C:\mingw\msys\1.0\bin;%PYTHON%;%PATH%" && call "%VSVARSALLPATH2022%" x64 && %PYTHON%\Scripts\meson setup --buildtype=release --prefix="%CD%\%DIST_FOLDER%" --default-library=static -Db_vscrt=static_from_buildtype build && %PYTHON%\Scripts\ninja -C build install && 7z a %ARTIFACT_ZIP% %DIST_FOLDER% ) - - cmd: if %builder% == vs2017_64_dyn ( set "PATH=C:\mingw\bin;C:\mingw\msys\1.0\bin;%PYTHON%;%PATH%" && call "%VSVARSALLPATH2017%" x64 && %PYTHON%\Scripts\meson setup --buildtype=release --prefix="%CD%\%DIST_FOLDER%" build && %PYTHON%\Scripts\ninja -C build install && 7z a %ARTIFACT_ZIP% %DIST_FOLDER% ) + - cmd: if %builder% == vs2017_64_dyn ( patch %PYTHON%\Lib\site-packages\mesonbuild\utils\universal.py patches\meson-git-retry.patch && set "PATH=C:\mingw\bin;C:\mingw\msys\1.0\bin;%PYTHON%;%PATH%" && call "%VSVARSALLPATH2017%" x64 && %PYTHON%\Scripts\meson setup --buildtype=release --prefix="%CD%\%DIST_FOLDER%" build && %PYTHON%\Scripts\ninja -C build install && 7z a %ARTIFACT_ZIP% %DIST_FOLDER% ) - cmd: if %builder% == clang_cl_64_dyn ( set "PATH=C:\mingw\bin;C:\mingw\msys\1.0\bin;%PYTHON%;%PATH%" && call "%VSVARSALLPATH2019%" x64 && set CC=clang-cl && %PYTHON%\Scripts\meson setup --buildtype=release --prefix="%CD%\%DIST_FOLDER%" build && %PYTHON%\Scripts\ninja -C build install && 7z a %ARTIFACT_ZIP% %DIST_FOLDER% ) diff --git a/REUSE.toml b/REUSE.toml index b8217f9052..1f345a73ac 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -332,3 +332,9 @@ path = ["test/prj/**.rzdb", "test/prj/**.rzdb.gz"] precedence = "aggregate" SPDX-FileCopyrightText = "2020 RizinOrg " SPDX-License-Identifier = "LGPL-3.0-only" + +[[annotations]] +path = "patches/**" +precedence = "aggregate" +SPDX-FileCopyrightText = "2026 RizinOrg " +SPDX-License-Identifier = "LGPL-3.0-only" diff --git a/librz/core/cmd_descs/cmd_descs.h b/librz/core/cmd_descs/cmd_descs.h index 6fa54c034b..22122ce9ca 100644 --- a/librz/core/cmd_descs/cmd_descs.h +++ b/librz/core/cmd_descs/cmd_descs.h @@ -1509,7 +1509,7 @@ RZ_IPI RzCmdStatus rz_cmd_eval_color_set_random_palette_handler(RzCore *core, in RZ_IPI RzCmdStatus rz_cmd_eval_color_set_colorful_palette_handler(RzCore *core, int argc, const char **argv); // "eco" RZ_IPI RzCmdStatus rz_cmd_eval_color_load_theme_handler(RzCore *core, int argc, const char **argv, RzCmdStateOutput *state); -RZ_IPI RZ_OWN char **rz_core_autocomplete_rotate_theme(RzCore *core); +RZ_IPI char **rz_core_autocomplete_rotate_theme(RzCore *core); // "eco." RZ_IPI RzCmdStatus rz_cmd_eval_color_list_current_theme_handler(RzCore *core, int argc, const char **argv); // "ecoo" diff --git a/patches/meson-git-retry.patch b/patches/meson-git-retry.patch new file mode 100644 index 0000000000..39373ff567 --- /dev/null +++ b/patches/meson-git-retry.patch @@ -0,0 +1,27 @@ +diff --git a/mesonbuild/utils/universal.py b/mesonbuild/utils/universal.py +index e251695dd..0507066f3 100644 +--- a/mesonbuild/utils/universal.py ++++ b/mesonbuild/utils/universal.py +@@ -205,9 +205,19 @@ GIT = shutil.which('git') + def git(cmd: T.List[str], workingdir: StrOrBytesPath, check: bool = False, **kwargs: T.Any) -> T.Tuple[subprocess.Popen[str], str, str]: + assert GIT is not None, 'Callers should make sure it exists' + cmd = [GIT, *cmd] +- p, o, e = Popen_safe(cmd, cwd=workingdir, **kwargs) +- if check and p.returncode != 0: +- raise GitException('Git command failed: ' + str(cmd), e) ++ retries = 0 ++ while True: ++ try: ++ p, o, e = Popen_safe(cmd, cwd=workingdir, **kwargs) ++ if check and p.returncode != 0: ++ raise GitException('Git command failed: ' + str(cmd), e) ++ break ++ except GitException: ++ if retries == 5: ++ raise ++ else: ++ retries += 1 ++ mlog.warning(f'Retry {retries} for {str(cmd)}') + return p, o, e + + def quiet_git(cmd: T.List[str], workingdir: StrOrBytesPath, check: bool = False) -> T.Tuple[bool, str]: