Skip to content

Commit 59f330b

Browse files
committed
address pr comments
1 parent 5a69ed2 commit 59f330b

File tree

3 files changed

+46
-13
lines changed

3 files changed

+46
-13
lines changed

src/sentry/integrations/github/tasks/sync_repos.py

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from sentry.constants import ObjectStatus
1717
from sentry.integrations.models.organization_integration import OrganizationIntegration
1818
from sentry.integrations.services.integration import integration_service
19+
from sentry.integrations.services.repository.model import RpcRepository
1920
from sentry.integrations.services.repository.service import repository_service
2021
from sentry.integrations.source_code_management.metrics import (
2122
SCMIntegrationInteractionEvent,
@@ -182,10 +183,13 @@ def sync_repos_for_org(organization_integration_id: int) -> None:
182183
if str(repo["id"]) in new_ids
183184
]
184185
if repo_configs:
185-
created_repos = []
186+
created_repos: list[RpcRepository] = []
187+
reactivated_repos: list[RpcRepository] = []
186188
try:
187-
created_repos = integration_repo_provider.create_repositories(
188-
configs=repo_configs, organization=rpc_org
189+
created_repos, reactivated_repos = (
190+
integration_repo_provider.create_repositories(
191+
configs=repo_configs, organization=rpc_org
192+
)
189193
)
190194
except RepoExistsError:
191195
pass
@@ -199,6 +203,15 @@ def sync_repos_for_org(organization_integration_id: int) -> None:
199203
provider=integration.provider,
200204
)
201205

206+
for repo in reactivated_repos:
207+
log_repo_change(
208+
event_name="REPO_ENABLED",
209+
organization_id=organization_id,
210+
repo=repo,
211+
source="repository sync",
212+
provider=integration.provider,
213+
)
214+
202215
if removed_ids:
203216
repository_service.disable_repositories_by_external_ids(
204217
organization_id=organization_id,
@@ -208,13 +221,13 @@ def sync_repos_for_org(organization_integration_id: int) -> None:
208221
)
209222

210223
for eid in removed_ids:
211-
repo = repo_by_external_id.get(eid)
212-
if repo:
224+
removed_repo = repo_by_external_id.get(eid)
225+
if removed_repo:
213226
log_repo_change(
214227
event_name="REPO_DISABLED",
215228
organization_id=organization_id,
216-
repo=repo,
217-
source="repository sync",
229+
repo=removed_repo,
230+
source="automatic SCM syncing",
218231
provider=integration.provider,
219232
)
220233

@@ -229,7 +242,7 @@ def sync_repos_for_org(organization_integration_id: int) -> None:
229242
event_name="REPO_ENABLED",
230243
organization_id=organization_id,
231244
repo=repo,
232-
source="repository sync",
245+
source="automatic SCM syncing",
233246
provider=integration.provider,
234247
)
235248

src/sentry/integrations/github/tasks/sync_repos_on_install_change.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from sentry.integrations.github.webhook_types import GitHubInstallationRepo
99
from sentry.integrations.services.integration import integration_service
1010
from sentry.integrations.services.integration.model import RpcIntegration
11+
from sentry.integrations.services.repository.model import RpcRepository
1112
from sentry.integrations.services.repository.service import repository_service
1213
from sentry.integrations.source_code_management.metrics import (
1314
SCMIntegrationInteractionEvent,
@@ -120,9 +121,10 @@ def _sync_repos_for_org(
120121
continue
121122

122123
if repo_configs:
123-
created_repos = []
124+
created_repos: list[RpcRepository] = []
125+
reactivated_repos: list[RpcRepository] = []
124126
try:
125-
created_repos = integration_repo_provider.create_repositories(
127+
created_repos, reactivated_repos = integration_repo_provider.create_repositories(
126128
configs=repo_configs, organization=rpc_org
127129
)
128130
except RepoExistsError:
@@ -137,6 +139,15 @@ def _sync_repos_for_org(
137139
provider=integration.provider,
138140
)
139141

142+
for reactivated_repo in reactivated_repos:
143+
log_repo_change(
144+
event_name="REPO_ENABLED",
145+
organization_id=rpc_org.id,
146+
repo=reactivated_repo,
147+
source="GitHub webhook",
148+
provider=integration.provider,
149+
)
150+
140151
if repos_removed:
141152
# Look up repos before disabling to get their IDs and names
142153
external_ids = [str(repo["id"]) for repo in repos_removed]
@@ -145,7 +156,11 @@ def _sync_repos_for_org(
145156
integration_id=integration.id,
146157
providers=[provider],
147158
)
148-
repo_by_eid = {r.external_id: r for r in existing_repos if r.external_id}
159+
repo_by_eid = {
160+
r.external_id: r
161+
for r in existing_repos
162+
if r.external_id and r.status == ObjectStatus.ACTIVE
163+
}
149164

150165
repository_service.disable_repositories_by_external_ids(
151166
organization_id=rpc_org.id,

src/sentry/plugins/providers/integration_repository.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,12 @@ def create_repositories(
240240
self,
241241
configs: list[RepositoryInputConfig],
242242
organization: RpcOrganization,
243-
) -> list[RpcRepository]:
243+
) -> tuple[list[RpcRepository], list[RpcRepository]]:
244+
"""
245+
Create or update repositories from configs.
246+
Returns (created, reactivated) — newly created repos and repos that
247+
were reactivated or updated from a hidden/unlinked state.
248+
"""
244249
external_id_to_repo_config: dict[str, RepositoryConfig] = {}
245250
for config in configs:
246251
result = self.build_repository_config(organization=organization, data=config)
@@ -304,7 +309,7 @@ def create_repositories(
304309
if missing_repos:
305310
raise RepoExistsError(repos=missing_repos)
306311

307-
return created_repos + repos_to_update
312+
return created_repos, repos_to_update
308313

309314
def dispatch(self, request: Request, organization, **kwargs):
310315
try:

0 commit comments

Comments
 (0)