|
15 | 15 | from codeflash.code_utils import env_utils |
16 | 16 | from codeflash.code_utils.code_utils import cleanup_paths, get_run_tmp_file |
17 | 17 | from codeflash.code_utils.env_utils import get_pr_number, is_pr_draft |
18 | | -from codeflash.code_utils.git_utils import check_running_in_git_repo |
| 18 | +from codeflash.code_utils.git_utils import check_running_in_git_repo, git_root_dir |
19 | 19 | from codeflash.code_utils.git_worktree_utils import ( |
20 | 20 | create_detached_worktree, |
21 | 21 | create_diff_patch_from_worktree, |
@@ -442,39 +442,50 @@ def worktree_mode(self) -> None: |
442 | 442 | logger.warning("Failed to create worktree. Skipping optimization.") |
443 | 443 | return |
444 | 444 | self.current_worktree = worktree_dir |
445 | | - self.mutate_args_for_worktree_mode(worktree_dir) |
| 445 | + self.mirror_paths_for_worktree_mode(worktree_dir) |
446 | 446 | # make sure the tests dir is created in the worktree, this can happen if the original tests dir is empty |
447 | 447 | Path(self.args.tests_root).mkdir(parents=True, exist_ok=True) |
448 | 448 |
|
449 | | - def mutate_args_for_worktree_mode(self, worktree_dir: Path) -> None: |
450 | | - saved_args = copy.deepcopy(self.args) |
451 | | - saved_test_cfg = copy.deepcopy(self.test_cfg) |
452 | | - self.original_args_and_test_cfg = (saved_args, saved_test_cfg) |
453 | | - |
454 | | - project_root = self.args.project_root |
455 | | - module_root = self.args.module_root |
456 | | - relative_module_root = module_root.relative_to(project_root) |
457 | | - relative_optimized_file = self.args.file.relative_to(project_root) if self.args.file else None |
458 | | - relative_tests_root = self.test_cfg.tests_root.relative_to(project_root) |
459 | | - relative_benchmarks_root = ( |
460 | | - self.args.benchmarks_root.relative_to(project_root) if self.args.benchmarks_root else None |
| 449 | + def mirror_paths_for_worktree_mode(self, worktree_dir: Path) -> None: |
| 450 | + original_args = copy.deepcopy(self.args) |
| 451 | + original_test_cfg = copy.deepcopy(self.test_cfg) |
| 452 | + self.original_args_and_test_cfg = (original_args, original_test_cfg) |
| 453 | + |
| 454 | + original_git_root = git_root_dir() |
| 455 | + |
| 456 | + # mirror project_root |
| 457 | + self.args.project_root = mirror_path(self.args.project_root, original_git_root, worktree_dir) |
| 458 | + self.test_cfg.project_root_path = mirror_path(self.test_cfg.project_root_path, original_git_root, worktree_dir) |
| 459 | + |
| 460 | + # mirror module_root |
| 461 | + self.args.module_root = mirror_path(self.args.module_root, original_git_root, worktree_dir) |
| 462 | + |
| 463 | + # mirror target file |
| 464 | + if self.args.file: |
| 465 | + self.args.file = mirror_path(self.args.file, original_git_root, worktree_dir) |
| 466 | + |
| 467 | + # mirror tests root |
| 468 | + self.args.tests_root = mirror_path(self.args.tests_root, original_git_root, worktree_dir) |
| 469 | + self.test_cfg.tests_root = mirror_path(self.test_cfg.tests_root, original_git_root, worktree_dir) |
| 470 | + |
| 471 | + # mirror tests project root |
| 472 | + self.args.test_project_root = mirror_path(self.args.test_project_root, original_git_root, worktree_dir) |
| 473 | + self.test_cfg.tests_project_rootdir = mirror_path( |
| 474 | + self.test_cfg.tests_project_rootdir, original_git_root, worktree_dir |
461 | 475 | ) |
462 | 476 |
|
463 | | - self.args.module_root = worktree_dir / relative_module_root |
464 | | - self.args.project_root = worktree_dir |
465 | | - self.args.test_project_root = worktree_dir |
466 | | - self.args.tests_root = worktree_dir / relative_tests_root |
467 | | - if relative_benchmarks_root: |
468 | | - self.args.benchmarks_root = worktree_dir / relative_benchmarks_root |
469 | | - |
470 | | - self.test_cfg.project_root_path = worktree_dir |
471 | | - self.test_cfg.tests_project_rootdir = worktree_dir |
472 | | - self.test_cfg.tests_root = worktree_dir / relative_tests_root |
473 | | - if relative_benchmarks_root: |
474 | | - self.test_cfg.benchmark_tests_root = worktree_dir / relative_benchmarks_root |
475 | | - |
476 | | - if relative_optimized_file is not None: |
477 | | - self.args.file = worktree_dir / relative_optimized_file |
| 477 | + # mirror benchmarks root paths |
| 478 | + if self.args.benchmarks_root: |
| 479 | + self.args.benchmarks_root = mirror_path(self.args.benchmarks_root, original_git_root, worktree_dir) |
| 480 | + if self.test_cfg.benchmark_tests_root: |
| 481 | + self.test_cfg.benchmark_tests_root = mirror_path( |
| 482 | + self.test_cfg.benchmark_tests_root, original_git_root, worktree_dir |
| 483 | + ) |
| 484 | + |
| 485 | + |
| 486 | +def mirror_path(path: Path, src_root: Path, dest_root: Path) -> Path: |
| 487 | + relative_path = path.relative_to(src_root) |
| 488 | + return dest_root / relative_path |
478 | 489 |
|
479 | 490 |
|
480 | 491 | def run_with_args(args: Namespace) -> None: |
|
0 commit comments