77
88import json
99import os
10+ import sys
1011import tempfile
1112from pathlib import Path
1213
2223# --------------------------------------------------------------------------
2324
2425
26+ uses_git_repo = pytest .mark .skipif (
27+ sys .platform == "win32" ,
28+ reason = "GitPython keeps repository handles open on Windows, so the temporary build folder cannot be removed; native Windows runs via WSL." ,
29+ )
30+
31+
2532@pytest .fixture
2633def fixtures_dir (get_test_data_path ):
2734 return get_test_data_path ("data/partial_rendering" )
@@ -247,6 +254,7 @@ def test_get_module_render_status_no_rendering(root_module):
247254 assert root_module .get_module_render_status () == (None , None )
248255
249256
257+ @uses_git_repo
250258def test_get_module_render_status_returns_from_leaf_when_only_leaf_rendered (root_module ):
251259 leaf = root_module .get_required_module_by_name ("pr_leaf" )
252260 _init_build_repo_with_finished_frid (leaf , "1" )
@@ -256,6 +264,7 @@ def test_get_module_render_status_returns_from_leaf_when_only_leaf_rendered(root
256264 assert frid == "1"
257265
258266
267+ @uses_git_repo
259268def test_get_module_render_status_prefers_most_progressed_module (root_module ):
260269 """The scan walks required_modules in reverse order — the right-most
261270 rendered module wins."""
@@ -269,6 +278,7 @@ def test_get_module_render_status_prefers_most_progressed_module(root_module):
269278 assert frid == "1"
270279
271280
281+ @uses_git_repo
272282def test_get_module_render_status_returns_root_when_root_has_checkpoint (root_module ):
273283 """A checkpoint in the root's own build folder takes precedence over
274284 required-module checkpoints."""
@@ -290,11 +300,13 @@ def test_is_module_fully_rendered_false_when_nothing_rendered(solo_module):
290300 assert solo_module .is_module_fully_rendered () is False
291301
292302
303+ @uses_git_repo
293304def test_is_module_fully_rendered_false_when_only_first_frid_rendered (solo_module ):
294305 _init_build_repo_with_finished_frid (solo_module , "1" )
295306 assert solo_module .is_module_fully_rendered () is False
296307
297308
309+ @uses_git_repo
298310def test_is_module_fully_rendered_true_when_last_frid_rendered (solo_module ):
299311 # solo module has FRIDs ["1", "2", "3"]; "3" is the last.
300312 _init_build_repo_with_finished_frid (solo_module , "3" )
@@ -425,6 +437,7 @@ def _commit_finished_frid(module: PlainModule, frid: str) -> None:
425437 )
426438
427439
440+ @uses_git_repo
428441def test_revert_code_to_frid_reverts_repo_and_trims_metadata (solo_module ):
429442 os .makedirs (solo_module .module_build_folder )
430443 init_git_repo (solo_module .module_build_folder , module_name = solo_module .module_name )
@@ -443,6 +456,7 @@ def test_revert_code_to_frid_reverts_repo_and_trims_metadata(solo_module):
443456 assert os .path .exists (solo_module .get_codeplain_folder ())
444457
445458
459+ @uses_git_repo
446460def test_revert_code_to_frid_none_reverts_to_initial_state (solo_module ):
447461 os .makedirs (solo_module .module_build_folder )
448462 init_git_repo (solo_module .module_build_folder , module_name = solo_module .module_name )
@@ -460,6 +474,7 @@ def test_revert_code_to_frid_none_reverts_to_initial_state(solo_module):
460474# --------------------------------------------------------------------------
461475
462476
477+ @uses_git_repo
463478def test_reconcile_metadata_with_git_trims_metadata_ahead_of_git (solo_module ):
464479 # Simulates the crash window: metadata records FR 2 but git only committed FR 1.
465480 os .makedirs (solo_module .module_build_folder )
@@ -475,6 +490,7 @@ def test_reconcile_metadata_with_git_trims_metadata_ahead_of_git(solo_module):
475490 assert metadata ["source_hash" ] == "abc"
476491
477492
493+ @uses_git_repo
478494def test_reconcile_metadata_with_git_in_sync_is_noop (solo_module ):
479495 os .makedirs (solo_module .module_build_folder )
480496 init_git_repo (solo_module .module_build_folder , module_name = solo_module .module_name )
@@ -487,6 +503,7 @@ def test_reconcile_metadata_with_git_in_sync_is_noop(solo_module):
487503 assert solo_module .load_module_metadata ()["functionalities" ] == ["fr1" , "fr2" ]
488504
489505
506+ @uses_git_repo
490507def test_reconcile_metadata_with_git_no_finished_frid_empties_list (solo_module ):
491508 # Only the initial commit exists (no finished FRID), so the baseline must be emptied.
492509 os .makedirs (solo_module .module_build_folder )
@@ -498,6 +515,7 @@ def test_reconcile_metadata_with_git_no_finished_frid_empties_list(solo_module):
498515 assert solo_module .load_module_metadata ()["functionalities" ] == []
499516
500517
518+ @uses_git_repo
501519def test_reconcile_metadata_with_git_ignores_foreign_module_frid (solo_module ):
502520 # A repo cloned from a required module carries that module's finished FRID; this
503521 # module has rendered none of its own, so its baseline must be emptied.
@@ -518,6 +536,7 @@ def test_reconcile_metadata_with_git_ignores_foreign_module_frid(solo_module):
518536 assert solo_module .load_module_metadata ()["functionalities" ] == []
519537
520538
539+ @uses_git_repo
521540def test_reconcile_metadata_with_git_no_metadata_is_noop (solo_module ):
522541 os .makedirs (solo_module .module_build_folder )
523542 init_git_repo (solo_module .module_build_folder , module_name = solo_module .module_name )
0 commit comments