Loading pkgs/by-name/ma/mangayomi/cargokit.patchdeleted 100644 → 0 +0 −90 Original line number Diff line number Diff line --- old/rust_builder/cargokit/cmake/cargokit.cmake 2024-11-08 13:36:13.345889693 +0000 +++ new/rust_builder/cargokit/cmake/cargokit.cmake 2024-11-08 13:45:26.019632176 +0000 @@ -17,83 +17,22 @@ function(apply_cargokit target manifest_dir lib_name any_symbol_name) set(CARGOKIT_LIB_NAME "${lib_name}") - set(CARGOKIT_LIB_FULL_NAME "${CMAKE_SHARED_MODULE_PREFIX}${CARGOKIT_LIB_NAME}${CMAKE_SHARED_MODULE_SUFFIX}") - if (CMAKE_CONFIGURATION_TYPES) - set(CARGOKIT_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>") - set(OUTPUT_LIB "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/${CARGOKIT_LIB_FULL_NAME}") - else() - set(CARGOKIT_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}") - set(OUTPUT_LIB "${CMAKE_CURRENT_BINARY_DIR}/${CARGOKIT_LIB_FULL_NAME}") - endif() - set(CARGOKIT_TEMP_DIR "${CMAKE_CURRENT_BINARY_DIR}/cargokit_build") - - if (FLUTTER_TARGET_PLATFORM) - set(CARGOKIT_TARGET_PLATFORM "${FLUTTER_TARGET_PLATFORM}") - else() - set(CARGOKIT_TARGET_PLATFORM "windows-x64") - endif() - - set(CARGOKIT_ENV - "CARGOKIT_CMAKE=${CMAKE_COMMAND}" - "CARGOKIT_CONFIGURATION=$<CONFIG>" - "CARGOKIT_MANIFEST_DIR=${CMAKE_CURRENT_SOURCE_DIR}/${manifest_dir}" - "CARGOKIT_TARGET_TEMP_DIR=${CARGOKIT_TEMP_DIR}" - "CARGOKIT_OUTPUT_DIR=${CARGOKIT_OUTPUT_DIR}" - "CARGOKIT_TARGET_PLATFORM=${CARGOKIT_TARGET_PLATFORM}" - "CARGOKIT_TOOL_TEMP_DIR=${CARGOKIT_TEMP_DIR}/tool" - "CARGOKIT_ROOT_PROJECT_DIR=${CMAKE_SOURCE_DIR}" - ) - - if (WIN32) - set(SCRIPT_EXTENSION ".cmd") - set(IMPORT_LIB_EXTENSION ".lib") - else() - set(SCRIPT_EXTENSION ".sh") - set(IMPORT_LIB_EXTENSION "") - execute_process(COMMAND chmod +x "${cargokit_cmake_root}/run_build_tool${SCRIPT_EXTENSION}") - endif() - - # Using generators in custom command is only supported in CMake 3.20+ - if (CMAKE_CONFIGURATION_TYPES AND ${CMAKE_VERSION} VERSION_LESS "3.20.0") - foreach(CONFIG IN LISTS CMAKE_CONFIGURATION_TYPES) - add_custom_command( - OUTPUT - "${CMAKE_CURRENT_BINARY_DIR}/${CONFIG}/${CARGOKIT_LIB_FULL_NAME}" - "${CMAKE_CURRENT_BINARY_DIR}/_phony_" - COMMAND ${CMAKE_COMMAND} -E env ${CARGOKIT_ENV} - "${cargokit_cmake_root}/run_build_tool${SCRIPT_EXTENSION}" build-cmake - VERBATIM - ) - endforeach() - else() - add_custom_command( - OUTPUT - ${OUTPUT_LIB} - "${CMAKE_CURRENT_BINARY_DIR}/_phony_" - COMMAND ${CMAKE_COMMAND} -E env ${CARGOKIT_ENV} - "${cargokit_cmake_root}/run_build_tool${SCRIPT_EXTENSION}" build-cmake - VERBATIM - ) - endif() - - - set_source_files_properties("${CMAKE_CURRENT_BINARY_DIR}/_phony_" PROPERTIES SYMBOLIC TRUE) if (TARGET ${target}) # If we have actual cmake target provided create target and make existing # target depend on it - add_custom_target("${target}_cargokit" DEPENDS ${OUTPUT_LIB}) + add_custom_target("${target}_cargokit" DEPENDS @output_lib@) add_dependencies("${target}" "${target}_cargokit") - target_link_libraries("${target}" PRIVATE "${OUTPUT_LIB}${IMPORT_LIB_EXTENSION}") + target_link_libraries("${target}" PRIVATE @output_lib@) if(WIN32) target_link_options(${target} PRIVATE "/INCLUDE:${any_symbol_name}") endif() else() # Otherwise (FFI) just use ALL to force building always - add_custom_target("${target}_cargokit" ALL DEPENDS ${OUTPUT_LIB}) + add_custom_target("${target}_cargokit" ALL DEPENDS @output_lib@) endif() # Allow adding the output library to plugin bundled libraries - set("${target}_cargokit_lib" ${OUTPUT_LIB} PARENT_SCOPE) + set("${target}_cargokit_lib" @output_lib@ PARENT_SCOPE) endfunction() pkgs/by-name/ma/mangayomi/gitHashes.json 0 → 100644 +8 −0 Original line number Diff line number Diff line { "desktop_webview_window": "sha256-wRxQPlJZZe4t2C6+G5dMx3+w8scxWENLwII08dlZ4IA=", "epubx": "sha256-Rf9zaabPvP7D4NgyJ+LpSB8zHjBvhq2wE0p9Sy7uOXM=", "flutter_qjs": "sha256-uF3+lQyc6oXWjg9xm8PVXRNZ3AXrw7+FH/lPIQPzaJY=", "flutter_web_auth_2": "sha256-3aci73SP8eXg6++IQTQoyS+erUUuSiuXymvR32sxHFw=", "media_kit_video": "sha256-t8lqS44lylLhMyvlY5G1k7EXfpDq8WshBVg8D/z0Hbc=", "re_editor": "sha256-alfzTs9lUHTsaZgXADb1X3T4ZB6KrhIEeGY0wuvZJtU=" } pkgs/by-name/ma/mangayomi/package.nix +21 −24 Original line number Diff line number Diff line { lib, fetchFromGitHub, stdenv, flutter332, webkitgtk_4_1, mpv, rustPlatform, stdenv, fetchFromGitHub, copyDesktopItems, mpv-unwrapped, webkitgtk_4_1, makeDesktopItem, replaceVars, writeText, }: let pname = "mangayomi"; version = "0.6.25"; version = "0.6.3"; src = fetchFromGitHub { owner = "kodjodevf"; repo = "mangayomi"; tag = "v${version}"; hash = "sha256-vuikoTyvUESz9ZESo4gy76syLYVO1WZdvoJf6NsyW4Y="; hash = "sha256-nlA5DLYSj9VVpDo7o5Umccoz8RAF+ac3LWV7108t2Ds="; }; metaCommon = { Loading @@ -36,8 +36,6 @@ let sourceRoot = "${src.name}/rust"; useFetchCargoVendor = true; cargoHash = "sha256-DDHBLQWscORg4+0CX5c2wmrhm2t7wOpotZFB+85w+EA="; passthru.libraryPath = "lib/librust_lib_mangayomi.so"; Loading @@ -58,36 +56,35 @@ flutter332.buildFlutterApplication { inherit version src; inherit (src) passthru; patches = [ (replaceVars ./cargokit.patch { output_lib = "${rustDep}/${rustDep.passthru.libraryPath}"; }) ]; postPatch = let fakeCargokitCmake = writeText "FakeCargokit.cmake" '' function(apply_cargokit target manifest_dir lib_name any_symbol_name) set("''${target}_cargokit_lib" ${rustDep}/${rustDep.passthru.libraryPath} PARENT_SCOPE) endfunction() ''; in '' cp ${fakeCargokitCmake} rust_builder/cargokit/cmake/cargokit.cmake ''; installPhase = '' runHook preInstall cp -r . $out cp -r . "$out" runHook postInstall ''; }; }; gitHashes = { desktop_webview_window = "sha256-wRxQPlJZZe4t2C6+G5dMx3+w8scxWENLwII08dlZ4IA="; flutter_qjs = "sha256-uF3+lQyc6oXWjg9xm8PVXRNZ3AXrw7+FH/lPIQPzaJY="; flutter_web_auth_2 = "sha256-3aci73SP8eXg6++IQTQoyS+erUUuSiuXymvR32sxHFw="; epubx = "sha256-Rf9zaabPvP7D4NgyJ+LpSB8zHjBvhq2wE0p9Sy7uOXM="; media_kit_video = "sha256-t8lqS44lylLhMyvlY5G1k7EXfpDq8WshBVg8D/z0Hbc="; re_editor = "sha256-alfzTs9lUHTsaZgXADb1X3T4ZB6KrhIEeGY0wuvZJtU="; }; gitHashes = lib.importJSON ./gitHashes.json; nativeBuildInputs = [ copyDesktopItems ]; buildInputs = [ mpv-unwrapped webkitgtk_4_1 mpv ]; desktopItems = [ Loading pkgs/by-name/ma/mangayomi/pubspec.lock.json +43 −3 Original line number Diff line number Diff line Loading @@ -440,11 +440,11 @@ "dependency": "direct main", "description": { "name": "d4rt", "sha256": "d38cde299f9e434b3c2bd0c07a7f3743e2853dfed60a3ed1f97685c34d922062", "sha256": "40ecf0b73603a8268050e890eb4d037b5bdf4184f439cc18d593e83b100a19e7", "url": "https://pub.dev" }, "source": "hosted", "version": "0.0.7" "version": "0.0.9" }, "dart_style": { "dependency": "transitive", Loading Loading @@ -1054,6 +1054,36 @@ "source": "hosted", "version": "2.1.0" }, "hive": { "dependency": "direct main", "description": { "name": "hive", "sha256": "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941", "url": "https://pub.dev" }, "source": "hosted", "version": "2.2.3" }, "hive_flutter": { "dependency": "direct main", "description": { "name": "hive_flutter", "sha256": "dca1da446b1d808a51689fb5d0c6c9510c0a2ba01e22805d492c73b68e33eecc", "url": "https://pub.dev" }, "source": "hosted", "version": "1.1.0" }, "hive_generator": { "dependency": "direct dev", "description": { "name": "hive_generator", "sha256": "06cb8f58ace74de61f63500564931f9505368f45f98958bd7a6c35ba24159db4", "url": "https://pub.dev" }, "source": "hosted", "version": "2.0.1" }, "html": { "dependency": "direct main", "description": { Loading Loading @@ -2141,6 +2171,16 @@ "source": "hosted", "version": "1.5.0" }, "source_helper": { "dependency": "transitive", "description": { "name": "source_helper", "sha256": "86d247119aedce8e63f4751bd9626fc9613255935558447569ad42f9f5b48b3c", "url": "https://pub.dev" }, "source": "hosted", "version": "1.3.5" }, "source_span": { "dependency": "transitive", "description": { Loading Loading @@ -2763,7 +2803,7 @@ } }, "sdks": { "dart": ">=3.8.0 <4.0.0", "dart": ">=3.8.1 <4.0.0", "flutter": ">=3.29.0" } } pkgs/by-name/ma/mangayomi/update-gitHashes.py 0 → 100755 +51 −0 Original line number Diff line number Diff line #! /usr/bin/env nix-shell #! nix-shell -i python3 -p python3 nix-prefetch-git import json import subprocess import sys from pathlib import Path THIS_FOLDER = Path(__file__).parent.resolve() PUBSPEC_LOCK = THIS_FOLDER / "pubspec.lock.json" GIT_HASHES = THIS_FOLDER / "gitHashes.json" def fetch_git_hash(url: str, rev: str) -> str: result = subprocess.run( ["nix-prefetch-git", "--url", url, "--rev", rev], capture_output=True, text=True, check=True, ) return json.loads(result.stdout)["hash"] def main() -> None: if not PUBSPEC_LOCK.exists(): sys.exit(1) try: data = json.loads(PUBSPEC_LOCK.read_text()) except json.JSONDecodeError: sys.exit(1) output: dict[str, str] = {} for name, info in data.get("packages", {}).items(): if info.get("source") != "git": continue desc = info.get("description") if not isinstance(desc, dict): continue url = desc.get("url") rev = desc.get("resolved-ref") if not (isinstance(url, str) and isinstance(rev, str)): continue try: package_hash = fetch_git_hash(url, rev) except subprocess.CalledProcessError: continue output[name] = package_hash GIT_HASHES.write_text(json.dumps(output, indent=2) + "\n") if __name__ == "__main__": main() Loading
pkgs/by-name/ma/mangayomi/cargokit.patchdeleted 100644 → 0 +0 −90 Original line number Diff line number Diff line --- old/rust_builder/cargokit/cmake/cargokit.cmake 2024-11-08 13:36:13.345889693 +0000 +++ new/rust_builder/cargokit/cmake/cargokit.cmake 2024-11-08 13:45:26.019632176 +0000 @@ -17,83 +17,22 @@ function(apply_cargokit target manifest_dir lib_name any_symbol_name) set(CARGOKIT_LIB_NAME "${lib_name}") - set(CARGOKIT_LIB_FULL_NAME "${CMAKE_SHARED_MODULE_PREFIX}${CARGOKIT_LIB_NAME}${CMAKE_SHARED_MODULE_SUFFIX}") - if (CMAKE_CONFIGURATION_TYPES) - set(CARGOKIT_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>") - set(OUTPUT_LIB "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/${CARGOKIT_LIB_FULL_NAME}") - else() - set(CARGOKIT_OUTPUT_DIR "${CMAKE_CURRENT_BINARY_DIR}") - set(OUTPUT_LIB "${CMAKE_CURRENT_BINARY_DIR}/${CARGOKIT_LIB_FULL_NAME}") - endif() - set(CARGOKIT_TEMP_DIR "${CMAKE_CURRENT_BINARY_DIR}/cargokit_build") - - if (FLUTTER_TARGET_PLATFORM) - set(CARGOKIT_TARGET_PLATFORM "${FLUTTER_TARGET_PLATFORM}") - else() - set(CARGOKIT_TARGET_PLATFORM "windows-x64") - endif() - - set(CARGOKIT_ENV - "CARGOKIT_CMAKE=${CMAKE_COMMAND}" - "CARGOKIT_CONFIGURATION=$<CONFIG>" - "CARGOKIT_MANIFEST_DIR=${CMAKE_CURRENT_SOURCE_DIR}/${manifest_dir}" - "CARGOKIT_TARGET_TEMP_DIR=${CARGOKIT_TEMP_DIR}" - "CARGOKIT_OUTPUT_DIR=${CARGOKIT_OUTPUT_DIR}" - "CARGOKIT_TARGET_PLATFORM=${CARGOKIT_TARGET_PLATFORM}" - "CARGOKIT_TOOL_TEMP_DIR=${CARGOKIT_TEMP_DIR}/tool" - "CARGOKIT_ROOT_PROJECT_DIR=${CMAKE_SOURCE_DIR}" - ) - - if (WIN32) - set(SCRIPT_EXTENSION ".cmd") - set(IMPORT_LIB_EXTENSION ".lib") - else() - set(SCRIPT_EXTENSION ".sh") - set(IMPORT_LIB_EXTENSION "") - execute_process(COMMAND chmod +x "${cargokit_cmake_root}/run_build_tool${SCRIPT_EXTENSION}") - endif() - - # Using generators in custom command is only supported in CMake 3.20+ - if (CMAKE_CONFIGURATION_TYPES AND ${CMAKE_VERSION} VERSION_LESS "3.20.0") - foreach(CONFIG IN LISTS CMAKE_CONFIGURATION_TYPES) - add_custom_command( - OUTPUT - "${CMAKE_CURRENT_BINARY_DIR}/${CONFIG}/${CARGOKIT_LIB_FULL_NAME}" - "${CMAKE_CURRENT_BINARY_DIR}/_phony_" - COMMAND ${CMAKE_COMMAND} -E env ${CARGOKIT_ENV} - "${cargokit_cmake_root}/run_build_tool${SCRIPT_EXTENSION}" build-cmake - VERBATIM - ) - endforeach() - else() - add_custom_command( - OUTPUT - ${OUTPUT_LIB} - "${CMAKE_CURRENT_BINARY_DIR}/_phony_" - COMMAND ${CMAKE_COMMAND} -E env ${CARGOKIT_ENV} - "${cargokit_cmake_root}/run_build_tool${SCRIPT_EXTENSION}" build-cmake - VERBATIM - ) - endif() - - - set_source_files_properties("${CMAKE_CURRENT_BINARY_DIR}/_phony_" PROPERTIES SYMBOLIC TRUE) if (TARGET ${target}) # If we have actual cmake target provided create target and make existing # target depend on it - add_custom_target("${target}_cargokit" DEPENDS ${OUTPUT_LIB}) + add_custom_target("${target}_cargokit" DEPENDS @output_lib@) add_dependencies("${target}" "${target}_cargokit") - target_link_libraries("${target}" PRIVATE "${OUTPUT_LIB}${IMPORT_LIB_EXTENSION}") + target_link_libraries("${target}" PRIVATE @output_lib@) if(WIN32) target_link_options(${target} PRIVATE "/INCLUDE:${any_symbol_name}") endif() else() # Otherwise (FFI) just use ALL to force building always - add_custom_target("${target}_cargokit" ALL DEPENDS ${OUTPUT_LIB}) + add_custom_target("${target}_cargokit" ALL DEPENDS @output_lib@) endif() # Allow adding the output library to plugin bundled libraries - set("${target}_cargokit_lib" ${OUTPUT_LIB} PARENT_SCOPE) + set("${target}_cargokit_lib" @output_lib@ PARENT_SCOPE) endfunction()
pkgs/by-name/ma/mangayomi/gitHashes.json 0 → 100644 +8 −0 Original line number Diff line number Diff line { "desktop_webview_window": "sha256-wRxQPlJZZe4t2C6+G5dMx3+w8scxWENLwII08dlZ4IA=", "epubx": "sha256-Rf9zaabPvP7D4NgyJ+LpSB8zHjBvhq2wE0p9Sy7uOXM=", "flutter_qjs": "sha256-uF3+lQyc6oXWjg9xm8PVXRNZ3AXrw7+FH/lPIQPzaJY=", "flutter_web_auth_2": "sha256-3aci73SP8eXg6++IQTQoyS+erUUuSiuXymvR32sxHFw=", "media_kit_video": "sha256-t8lqS44lylLhMyvlY5G1k7EXfpDq8WshBVg8D/z0Hbc=", "re_editor": "sha256-alfzTs9lUHTsaZgXADb1X3T4ZB6KrhIEeGY0wuvZJtU=" }
pkgs/by-name/ma/mangayomi/package.nix +21 −24 Original line number Diff line number Diff line { lib, fetchFromGitHub, stdenv, flutter332, webkitgtk_4_1, mpv, rustPlatform, stdenv, fetchFromGitHub, copyDesktopItems, mpv-unwrapped, webkitgtk_4_1, makeDesktopItem, replaceVars, writeText, }: let pname = "mangayomi"; version = "0.6.25"; version = "0.6.3"; src = fetchFromGitHub { owner = "kodjodevf"; repo = "mangayomi"; tag = "v${version}"; hash = "sha256-vuikoTyvUESz9ZESo4gy76syLYVO1WZdvoJf6NsyW4Y="; hash = "sha256-nlA5DLYSj9VVpDo7o5Umccoz8RAF+ac3LWV7108t2Ds="; }; metaCommon = { Loading @@ -36,8 +36,6 @@ let sourceRoot = "${src.name}/rust"; useFetchCargoVendor = true; cargoHash = "sha256-DDHBLQWscORg4+0CX5c2wmrhm2t7wOpotZFB+85w+EA="; passthru.libraryPath = "lib/librust_lib_mangayomi.so"; Loading @@ -58,36 +56,35 @@ flutter332.buildFlutterApplication { inherit version src; inherit (src) passthru; patches = [ (replaceVars ./cargokit.patch { output_lib = "${rustDep}/${rustDep.passthru.libraryPath}"; }) ]; postPatch = let fakeCargokitCmake = writeText "FakeCargokit.cmake" '' function(apply_cargokit target manifest_dir lib_name any_symbol_name) set("''${target}_cargokit_lib" ${rustDep}/${rustDep.passthru.libraryPath} PARENT_SCOPE) endfunction() ''; in '' cp ${fakeCargokitCmake} rust_builder/cargokit/cmake/cargokit.cmake ''; installPhase = '' runHook preInstall cp -r . $out cp -r . "$out" runHook postInstall ''; }; }; gitHashes = { desktop_webview_window = "sha256-wRxQPlJZZe4t2C6+G5dMx3+w8scxWENLwII08dlZ4IA="; flutter_qjs = "sha256-uF3+lQyc6oXWjg9xm8PVXRNZ3AXrw7+FH/lPIQPzaJY="; flutter_web_auth_2 = "sha256-3aci73SP8eXg6++IQTQoyS+erUUuSiuXymvR32sxHFw="; epubx = "sha256-Rf9zaabPvP7D4NgyJ+LpSB8zHjBvhq2wE0p9Sy7uOXM="; media_kit_video = "sha256-t8lqS44lylLhMyvlY5G1k7EXfpDq8WshBVg8D/z0Hbc="; re_editor = "sha256-alfzTs9lUHTsaZgXADb1X3T4ZB6KrhIEeGY0wuvZJtU="; }; gitHashes = lib.importJSON ./gitHashes.json; nativeBuildInputs = [ copyDesktopItems ]; buildInputs = [ mpv-unwrapped webkitgtk_4_1 mpv ]; desktopItems = [ Loading
pkgs/by-name/ma/mangayomi/pubspec.lock.json +43 −3 Original line number Diff line number Diff line Loading @@ -440,11 +440,11 @@ "dependency": "direct main", "description": { "name": "d4rt", "sha256": "d38cde299f9e434b3c2bd0c07a7f3743e2853dfed60a3ed1f97685c34d922062", "sha256": "40ecf0b73603a8268050e890eb4d037b5bdf4184f439cc18d593e83b100a19e7", "url": "https://pub.dev" }, "source": "hosted", "version": "0.0.7" "version": "0.0.9" }, "dart_style": { "dependency": "transitive", Loading Loading @@ -1054,6 +1054,36 @@ "source": "hosted", "version": "2.1.0" }, "hive": { "dependency": "direct main", "description": { "name": "hive", "sha256": "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941", "url": "https://pub.dev" }, "source": "hosted", "version": "2.2.3" }, "hive_flutter": { "dependency": "direct main", "description": { "name": "hive_flutter", "sha256": "dca1da446b1d808a51689fb5d0c6c9510c0a2ba01e22805d492c73b68e33eecc", "url": "https://pub.dev" }, "source": "hosted", "version": "1.1.0" }, "hive_generator": { "dependency": "direct dev", "description": { "name": "hive_generator", "sha256": "06cb8f58ace74de61f63500564931f9505368f45f98958bd7a6c35ba24159db4", "url": "https://pub.dev" }, "source": "hosted", "version": "2.0.1" }, "html": { "dependency": "direct main", "description": { Loading Loading @@ -2141,6 +2171,16 @@ "source": "hosted", "version": "1.5.0" }, "source_helper": { "dependency": "transitive", "description": { "name": "source_helper", "sha256": "86d247119aedce8e63f4751bd9626fc9613255935558447569ad42f9f5b48b3c", "url": "https://pub.dev" }, "source": "hosted", "version": "1.3.5" }, "source_span": { "dependency": "transitive", "description": { Loading Loading @@ -2763,7 +2803,7 @@ } }, "sdks": { "dart": ">=3.8.0 <4.0.0", "dart": ">=3.8.1 <4.0.0", "flutter": ">=3.29.0" } }
pkgs/by-name/ma/mangayomi/update-gitHashes.py 0 → 100755 +51 −0 Original line number Diff line number Diff line #! /usr/bin/env nix-shell #! nix-shell -i python3 -p python3 nix-prefetch-git import json import subprocess import sys from pathlib import Path THIS_FOLDER = Path(__file__).parent.resolve() PUBSPEC_LOCK = THIS_FOLDER / "pubspec.lock.json" GIT_HASHES = THIS_FOLDER / "gitHashes.json" def fetch_git_hash(url: str, rev: str) -> str: result = subprocess.run( ["nix-prefetch-git", "--url", url, "--rev", rev], capture_output=True, text=True, check=True, ) return json.loads(result.stdout)["hash"] def main() -> None: if not PUBSPEC_LOCK.exists(): sys.exit(1) try: data = json.loads(PUBSPEC_LOCK.read_text()) except json.JSONDecodeError: sys.exit(1) output: dict[str, str] = {} for name, info in data.get("packages", {}).items(): if info.get("source") != "git": continue desc = info.get("description") if not isinstance(desc, dict): continue url = desc.get("url") rev = desc.get("resolved-ref") if not (isinstance(url, str) and isinstance(rev, str)): continue try: package_hash = fetch_git_hash(url, rev) except subprocess.CalledProcessError: continue output[name] = package_hash GIT_HASHES.write_text(json.dumps(output, indent=2) + "\n") if __name__ == "__main__": main()