From 2ea9954c511785aacaf5c90814ffd4f7b86c9784 Mon Sep 17 00:00:00 2001 From: Carol Jung Date: Tue, 1 Apr 2025 10:47:07 -0700 Subject: [PATCH 1/2] fix: CG-17050: skip codebase init if repo operator is none --- src/codegen/sdk/core/codebase.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/codegen/sdk/core/codebase.py b/src/codegen/sdk/core/codebase.py index 01950a7a2..add9f87f2 100644 --- a/src/codegen/sdk/core/codebase.py +++ b/src/codegen/sdk/core/codebase.py @@ -1382,6 +1382,11 @@ def from_repo( else: # Ensure the operator can handle remote operations repo_operator = RepoOperator.create_from_commit(repo_path=repo_path, commit=commit, url=repo_url, full_name=repo_full_name, access_token=access_token) + + if repo_operator is None: + logger.error("Failed to clone repository") + return None + logger.info("Clone completed successfully") # Initialize and return codebase with proper context From 6a5038e9fc29fadb65a3643f4ee082ceaf1218e4 Mon Sep 17 00:00:00 2001 From: Carol Jung Date: Tue, 1 Apr 2025 10:54:09 -0700 Subject: [PATCH 2/2] . --- src/codegen/sdk/core/codebase.py | 3 +-- tests/integration/codegen/git/codebase/conftest.py | 3 +-- tests/unit/codegen/sdk/core/test_codebase.py | 8 ++++++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/codegen/sdk/core/codebase.py b/src/codegen/sdk/core/codebase.py index add9f87f2..fc3e0557e 100644 --- a/src/codegen/sdk/core/codebase.py +++ b/src/codegen/sdk/core/codebase.py @@ -25,7 +25,7 @@ from codegen.configs.models.codebase import CodebaseConfig, PinkMode from codegen.configs.models.secrets import SecretsConfig from codegen.git.repo_operator.repo_operator import RepoOperator -from codegen.git.schemas.enums import CheckoutResult, SetupOption +from codegen.git.schemas.enums import CheckoutResult from codegen.git.schemas.repo_config import RepoConfig from codegen.git.utils.pr_review import CodegenPR from codegen.sdk._proxy import proxy_property @@ -1337,7 +1337,6 @@ def from_repo( language: Literal["python", "typescript"] | ProgrammingLanguage | None = None, config: CodebaseConfig | None = None, secrets: SecretsConfig | None = None, - setup_option: SetupOption | None = None, full_history: bool = False, ) -> "Codebase": """Fetches a codebase from GitHub and returns a Codebase instance. diff --git a/tests/integration/codegen/git/codebase/conftest.py b/tests/integration/codegen/git/codebase/conftest.py index 4e163c87d..a8ab00e4f 100644 --- a/tests/integration/codegen/git/codebase/conftest.py +++ b/tests/integration/codegen/git/codebase/conftest.py @@ -2,12 +2,11 @@ import pytest -from codegen.git.schemas.enums import SetupOption from codegen.sdk.core.codebase import Codebase @pytest.fixture def codebase(tmpdir): os.chdir(tmpdir) - codebase = Codebase.from_repo(repo_full_name="codegen-sh/Kevin-s-Adventure-Game", tmp_dir=tmpdir, language="python", setup_option=SetupOption.PULL_OR_CLONE) + codebase = Codebase.from_repo(repo_full_name="codegen-sh/Kevin-s-Adventure-Game", tmp_dir=tmpdir, language="python") yield codebase diff --git a/tests/unit/codegen/sdk/core/test_codebase.py b/tests/unit/codegen/sdk/core/test_codebase.py index d8369f4c5..ee0cabcae 100644 --- a/tests/unit/codegen/sdk/core/test_codebase.py +++ b/tests/unit/codegen/sdk/core/test_codebase.py @@ -2,8 +2,10 @@ import pytest +from codegen.configs.models.secrets import SecretsConfig from codegen.sdk.codebase.codebase_context import CodebaseContext from codegen.sdk.codebase.factory.get_session import get_codebase_session +from codegen.sdk.core.codebase import Codebase @pytest.fixture(autouse=True) @@ -39,3 +41,9 @@ def test_codeowners_property(context_mock, codebase): assert len(codebase.codeowners) == 1 assert callable(codebase.codeowners[0].files_source) assert codebase.codeowners[0].files_source() == codebase.files.return_value + + +def test_from_codebase_non_existent_repo(context_mock, tmpdir): + with get_codebase_session(tmpdir=tmpdir, files={"src/main.py": "print('Hello, world!')"}, verify_output=False) as codebase: + codebase = Codebase.from_repo("some-org/non-existent-repo", tmp_dir=tmpdir, secrets=SecretsConfig(github_token="some-token")) + assert codebase is None