Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion bin/compile_target
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,5 @@ compile

# Submit build outputs
libCRS submit-build-output "$OUT" build
libCRS submit-build-output "$SRC" src

log "Build completed successfully."
1 change: 0 additions & 1 deletion oss-crs/crs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ target_build_phase:
dockerfile: oss-crs/builder.Dockerfile
outputs:
- build
- src
- name: inc-builder # sanitizer-neutral; actual sanitizer is overridable via compose additional_env
snapshot: true
dockerfile: oss-crs-infra:default-builder
Expand Down
3 changes: 2 additions & 1 deletion patcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -282,7 +282,8 @@ def setup_source() -> Path | None:
download_root.mkdir(parents=True, exist_ok=True)

try:
worktree_dir = Path(crs.download_source(SourceType.REPO, download_root))
crs.download_source(SourceType.TARGET_SOURCE, download_root)
worktree_dir = download_root
except Exception as repo_error:
logger.error("Failed to download repo source via libCRS: %s", repo_error)
return None
Expand Down
17 changes: 17 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
"""Stub libCRS so patcher can be imported outside Docker."""
import sys
from types import ModuleType, SimpleNamespace

# Create minimal libCRS stub before patcher is imported.
libCRS = ModuleType("libCRS")
libCRS.base = ModuleType("libCRS.base")
libCRS.base.DataType = SimpleNamespace(PATCH="patch", POV="pov", DIFF="diff", SEED="seed", BUG_CANDIDATE="bug_candidate")
libCRS.base.SourceType = SimpleNamespace(REPO="repo", TARGET_SOURCE="target_source")
libCRS.cli = ModuleType("libCRS.cli")
libCRS.cli.main = ModuleType("libCRS.cli.main")
libCRS.cli.main.init_crs_utils = lambda: None

sys.modules["libCRS"] = libCRS
sys.modules["libCRS.base"] = libCRS.base
sys.modules["libCRS.cli"] = libCRS.cli
sys.modules["libCRS.cli.main"] = libCRS.cli.main
25 changes: 11 additions & 14 deletions tests/test_setup_source.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,19 @@
import patcher


def test_setup_source_uses_repo_hint_instead_of_scanning_nested_git_repos(
def test_setup_source_returns_download_root(
monkeypatch, tmp_path: Path
) -> None:
"""After the mount-based API change, worktree_dir is always download_root."""
work_dir = tmp_path / "work"
source_dir = work_dir / "src"
project_dir = source_dir / "mock-c"
other_repo_dir = source_dir / "vendored"
(project_dir / ".git").mkdir(parents=True)
(other_repo_dir / ".git").mkdir(parents=True)
(source_dir / ".git").mkdir(parents=True)

monkeypatch.setattr(patcher, "WORK_DIR", work_dir)
monkeypatch.setattr(
patcher,
"crs",
SimpleNamespace(download_source=lambda source_type, dst: project_dir),
SimpleNamespace(download_source=lambda source_type, dst: None),
)

calls: list[tuple[list[str], Path | None]] = []
Expand All @@ -31,23 +29,23 @@ def fake_run(cmd, cwd=None, capture_output=None, timeout=None):

resolved = patcher.setup_source()

assert resolved == project_dir
assert resolved == source_dir.resolve()
# .git already exists, so git init should NOT be called
assert ["git", "init"] not in [cmd for cmd, _ in calls]


def test_setup_source_initializes_git_only_in_returned_project_dir(
def test_setup_source_initializes_git_when_no_dotgit(
monkeypatch, tmp_path: Path
) -> None:
work_dir = tmp_path / "work"
source_dir = work_dir / "src"
project_dir = source_dir / "mock-c"
project_dir.mkdir(parents=True)
source_dir.mkdir(parents=True)

monkeypatch.setattr(patcher, "WORK_DIR", work_dir)
monkeypatch.setattr(
patcher,
"crs",
SimpleNamespace(download_source=lambda source_type, dst: project_dir),
SimpleNamespace(download_source=lambda source_type, dst: None),
)

calls: list[tuple[list[str], Path | None]] = []
Expand All @@ -60,6 +58,5 @@ def fake_run(cmd, cwd=None, capture_output=None, timeout=None):

resolved = patcher.setup_source()

assert resolved == project_dir
assert (["git", "init"], project_dir) in calls
assert (["git", "init"], source_dir) not in calls
assert resolved == source_dir.resolve()
assert (["git", "init"], source_dir.resolve()) in calls