Skip to content

Commit fcd6f08

Browse files
committed
try/catchon empty commits
1 parent 3a17f7a commit fcd6f08

File tree

2 files changed

+37
-9
lines changed

2 files changed

+37
-9
lines changed

src/codegen/git/repo_operator/repo_operator.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,14 @@ def git_cli(self) -> GitCLI:
166166
return git_cli
167167

168168
@property
169-
def head_commit(self) -> GitCommit:
170-
return self.git_cli.head.commit
169+
def head_commit(self) -> GitCommit | None:
170+
try:
171+
return self.git_cli.head.commit
172+
except ValueError as e:
173+
if "Reference at 'refs/heads/main' does not exist" in str(e):
174+
logger.info("No commit exists in the repository yet")
175+
return None
176+
raise
171177

172178
@property
173179
def git_diff(self) -> str:

src/codegen/sdk/core/codebase.py

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -898,6 +898,10 @@ def checkout(
898898
result = self._op.checkout_commit(commit_hash=commit)
899899
if result == CheckoutResult.SUCCESS:
900900
logger.info(f"Checked out {branch or commit}")
901+
if self._op.head_commit is None:
902+
logger.info("No commit exists in the repository yet")
903+
return CheckoutResult.SUCCESS
904+
901905
self.sync_to_commit(self._op.head_commit)
902906
elif result == CheckoutResult.NOT_FOUND:
903907
logger.info(f"Could not find branch {branch or commit}")
@@ -1382,13 +1386,25 @@ def from_repo(
13821386

13831387
# Initialize and return codebase with proper context
13841388
logger.info("Initializing Codebase...")
1385-
project = ProjectConfig.from_repo_operator(
1386-
repo_operator=repo_operator,
1387-
programming_language=ProgrammingLanguage(language.upper()) if language else None,
1388-
)
1389-
codebase = Codebase(projects=[project], config=config, secrets=secrets)
1390-
logger.info("Codebase initialization complete")
1391-
return codebase
1389+
try:
1390+
project = ProjectConfig.from_repo_operator(
1391+
repo_operator=repo_operator,
1392+
programming_language=ProgrammingLanguage(language.upper()) if language else None,
1393+
)
1394+
codebase = Codebase(projects=[project], config=config, secrets=secrets)
1395+
logger.info("Codebase initialization complete")
1396+
return codebase
1397+
except ValueError as e:
1398+
if "Reference at 'refs/heads/main' does not exist" in str(e):
1399+
logger.warning("Repository appears to be empty (no main branch). Creating empty codebase.")
1400+
project = ProjectConfig(
1401+
repo_operator=repo_operator,
1402+
programming_language=ProgrammingLanguage(language.upper()) if language else None,
1403+
)
1404+
codebase = Codebase(projects=[project], config=config, secrets=secrets)
1405+
logger.info("Empty codebase initialization complete")
1406+
return codebase
1407+
raise
13921408
except Exception as e:
13931409
logger.exception(f"Failed to initialize codebase: {e}")
13941410
raise
@@ -1435,6 +1451,12 @@ def from_string(
14351451

14361452
with tempfile.TemporaryDirectory(prefix="codegen_") as tmp_dir:
14371453
logger.info(f"Using directory: {tmp_dir}")
1454+
1455+
# Initialize git repo to avoid "not in a git repository" error
1456+
import subprocess
1457+
1458+
subprocess.run(["git", "init"], cwd=tmp_dir, check=True, capture_output=True)
1459+
14381460
codebase = CodebaseFactory.get_codebase_from_files(repo_path=tmp_dir, files=files, programming_language=prog_lang)
14391461
logger.info("Codebase initialization complete")
14401462
return codebase

0 commit comments

Comments
 (0)