From 70f54129edb6cfe8cfefb1b3814d3eeac5140ca9 Mon Sep 17 00:00:00 2001 From: bagel897 Date: Mon, 17 Mar 2025 14:52:47 -0700 Subject: [PATCH 1/5] Add coauthor from user config --- src/codegen/git/repo_operator/repo_operator.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/codegen/git/repo_operator/repo_operator.py b/src/codegen/git/repo_operator/repo_operator.py index c68ce1157..1f7b0c13d 100644 --- a/src/codegen/git/repo_operator/repo_operator.py +++ b/src/codegen/git/repo_operator/repo_operator.py @@ -471,6 +471,13 @@ def stage_and_commit_all_changes(self, message: str, verify: bool = False, exclu logger.warning(f"Failed to exclude path {path}: {e}") return self.commit_changes(message, verify) + def _get_username_email(self) -> tuple[str, str] | None: + with self.git_cli.config_reader("user") as reader: + user, email = reader.get_value("user", "name"), reader.get_value("user", "email") + if isinstance(user, str) and isinstance(email, str) and user != CODEGEN_BOT_NAME and email != CODEGEN_BOT_EMAIL: + return user, email + return None + def commit_changes(self, message: str, verify: bool = False) -> bool: """Returns True if a commit was made and False otherwise.""" staged_changes = self.git_cli.git.diff("--staged") @@ -478,6 +485,9 @@ def commit_changes(self, message: str, verify: bool = False) -> bool: commit_args = ["-m", message] if self.bot_commit: commit_args.append(f"--author='{CODEGEN_BOT_NAME} <{CODEGEN_BOT_EMAIL}>'") + if info := self._get_username_email(): + user, email = info + message += f"\n\n Co-authored-by: {user} <{email}>" if not verify: commit_args.append("--no-verify") self.git_cli.git.commit(*commit_args) From ade45675a4970270c6b08c2c1814dbe554e75ff4 Mon Sep 17 00:00:00 2001 From: bagel897 Date: Mon, 17 Mar 2025 15:00:00 -0700 Subject: [PATCH 2/5] Add co-author support to repo operator --- src/codegen/git/repo_operator/repo_operator.py | 16 +++++++++------- .../sdk/python/codebase/test_codebase_git.py | 3 +++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/codegen/git/repo_operator/repo_operator.py b/src/codegen/git/repo_operator/repo_operator.py index 1f7b0c13d..07f59b742 100644 --- a/src/codegen/git/repo_operator/repo_operator.py +++ b/src/codegen/git/repo_operator/repo_operator.py @@ -472,22 +472,24 @@ def stage_and_commit_all_changes(self, message: str, verify: bool = False, exclu return self.commit_changes(message, verify) def _get_username_email(self) -> tuple[str, str] | None: - with self.git_cli.config_reader("user") as reader: - user, email = reader.get_value("user", "name"), reader.get_value("user", "email") - if isinstance(user, str) and isinstance(email, str) and user != CODEGEN_BOT_NAME and email != CODEGEN_BOT_EMAIL: - return user, email + for level in ["user", "global", "system"]: + with self.git_cli.config_reader(level) as reader: + if reader.has_section("user"): + user, email = reader.get_value("user", "name"), reader.get_value("user", "email") + if isinstance(user, str) and isinstance(email, str) and user != CODEGEN_BOT_NAME and email != CODEGEN_BOT_EMAIL: + return user, email return None def commit_changes(self, message: str, verify: bool = False) -> bool: """Returns True if a commit was made and False otherwise.""" staged_changes = self.git_cli.git.diff("--staged") if staged_changes: + if self.bot_commit and (info := self._get_username_email()): + user, email = info + message += f"\n\n Co-authored-by: {user} <{email}>" commit_args = ["-m", message] if self.bot_commit: commit_args.append(f"--author='{CODEGEN_BOT_NAME} <{CODEGEN_BOT_EMAIL}>'") - if info := self._get_username_email(): - user, email = info - message += f"\n\n Co-authored-by: {user} <{email}>" if not verify: commit_args.append("--no-verify") self.git_cli.git.commit(*commit_args) diff --git a/tests/unit/codegen/sdk/python/codebase/test_codebase_git.py b/tests/unit/codegen/sdk/python/codebase/test_codebase_git.py index 70b908e08..b7e2f3b88 100644 --- a/tests/unit/codegen/sdk/python/codebase/test_codebase_git.py +++ b/tests/unit/codegen/sdk/python/codebase/test_codebase_git.py @@ -22,6 +22,9 @@ def test_codebase_git(tmpdir, commit: bool, sync: bool) -> None: codebase.get_file("dir/file0.py").insert_after("a = 1") c2 = codebase.git_commit("boop") commit = codebase.op.head_commit + message = commit.message + assert "Co-authored-by:" in message + assert f"Co-authored-by: {commit.author.name} <{commit.author.email}>" not in message codebase.sync_to_commit(commit) assert c1 != c2 assert codebase.get_symbol("a", optional=True) is not None From f3ef497463d3f3e34562e6029ed0678595477e4f Mon Sep 17 00:00:00 2001 From: bagel897 Date: Mon, 17 Mar 2025 15:08:26 -0700 Subject: [PATCH 3/5] set git user --- .github/workflows/test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9b923bf53..10b4fb238 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -28,6 +28,7 @@ jobs: with: fetch-depth: 0 ref: ${{ github.event.pull_request.head.sha }} + - uses: fregante/setup-git-user@v2 - name: Setup environment uses: ./.github/actions/setup-environment From 853b7588ca053e3259cc7c833aab7ea3fe2f2f58 Mon Sep 17 00:00:00 2001 From: bagel897 Date: Mon, 17 Mar 2025 15:16:56 -0700 Subject: [PATCH 4/5] Revert "set git user" This reverts commit f3ef497463d3f3e34562e6029ed0678595477e4f. --- .github/workflows/test.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 10b4fb238..9b923bf53 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -28,7 +28,6 @@ jobs: with: fetch-depth: 0 ref: ${{ github.event.pull_request.head.sha }} - - uses: fregante/setup-git-user@v2 - name: Setup environment uses: ./.github/actions/setup-environment From cffd9c7a6bc3061426bf83c80569f59e26b3e8af Mon Sep 17 00:00:00 2001 From: bagel897 Date: Mon, 17 Mar 2025 15:18:13 -0700 Subject: [PATCH 5/5] Disable check in CI --- .../unit/codegen/sdk/python/codebase/test_codebase_git.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/unit/codegen/sdk/python/codebase/test_codebase_git.py b/tests/unit/codegen/sdk/python/codebase/test_codebase_git.py index b7e2f3b88..5ff3da6b0 100644 --- a/tests/unit/codegen/sdk/python/codebase/test_codebase_git.py +++ b/tests/unit/codegen/sdk/python/codebase/test_codebase_git.py @@ -1,3 +1,5 @@ +import os + import pytest from codegen.sdk.codebase.factory.get_session import get_codebase_session @@ -23,8 +25,9 @@ def test_codebase_git(tmpdir, commit: bool, sync: bool) -> None: c2 = codebase.git_commit("boop") commit = codebase.op.head_commit message = commit.message - assert "Co-authored-by:" in message - assert f"Co-authored-by: {commit.author.name} <{commit.author.email}>" not in message + if not os.environ.get("CI"): + assert "Co-authored-by:" in message + assert f"Co-authored-by: {commit.author.name} <{commit.author.email}>" not in message codebase.sync_to_commit(commit) assert c1 != c2 assert codebase.get_symbol("a", optional=True) is not None