Skip to content

Commit f2d672c

Browse files
Revert "ref(derived_code_mappings): Make code clearer (#86597)"
This reverts commit cc85c73. Co-authored-by: armenzg <44410+armenzg@users.noreply.github.com>
1 parent 813f8e5 commit f2d672c

File tree

1 file changed

+52
-56
lines changed
  • src/sentry/issues/auto_source_code_config

1 file changed

+52
-56
lines changed

src/sentry/issues/auto_source_code_config/task.py

Lines changed: 52 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
from __future__ import annotations
22

33
import logging
4-
from collections.abc import Mapping
54
from enum import StrEnum
65
from typing import Any
76

@@ -10,7 +9,6 @@
109
from sentry import eventstore
1110
from sentry.integrations.base import IntegrationInstallation
1211
from sentry.integrations.models.repository_project_path_config import RepositoryProjectPathConfig
13-
from sentry.integrations.services.integration import RpcOrganizationIntegration
1412
from sentry.integrations.source_code_management.metrics import (
1513
SCMIntegrationInteractionEvent,
1614
SCMIntegrationInteractionType,
@@ -85,7 +83,7 @@ def process_event(project_id: int, group_id: int, event_id: str) -> list[CodeMap
8583
trees_helper = CodeMappingTreesHelper(trees)
8684
code_mappings = trees_helper.generate_code_mappings(frames_to_process, platform)
8785
dry_run = platform_config.is_dry_run_platform()
88-
create_configurations(code_mappings, installation, project, platform, dry_run)
86+
create_repos_and_code_mappings(code_mappings, installation, project, platform, dry_run)
8987
except (InstallationNotFoundError, InstallationCannotGetTreesError):
9088
pass
9189

@@ -162,7 +160,7 @@ def get_trees_for_org(
162160
return trees
163161

164162

165-
def create_configurations(
163+
def create_repos_and_code_mappings(
166164
code_mappings: list[CodeMapping],
167165
installation: IntegrationInstallation,
168166
project: Project,
@@ -179,59 +177,57 @@ def create_configurations(
179177

180178
organization_id = organization_integration.organization_id
181179
for code_mapping in code_mappings:
182-
process_code_mapping(
183-
organization_id,
184-
organization_integration,
185-
project,
186-
code_mapping,
187-
platform,
188-
dry_run,
180+
repository = (
181+
Repository.objects.filter(name=code_mapping.repo.name, organization_id=organization_id)
182+
.order_by("-date_added")
183+
.first()
189184
)
190185

191-
192-
def process_code_mapping(
193-
organization_id: int,
194-
organization_integration: RpcOrganizationIntegration,
195-
project: Project,
196-
code_mapping: CodeMapping,
197-
platform: str,
198-
dry_run: bool,
199-
) -> None:
200-
repository = (
201-
Repository.objects.filter(name=code_mapping.repo.name, organization_id=organization_id)
202-
.order_by("-date_added")
203-
.first()
204-
)
205-
206-
if not repository and not dry_run:
207-
repository = Repository.objects.create(
208-
name=code_mapping.repo.name,
209-
organization_id=organization_id,
210-
integration_id=organization_integration.integration_id,
186+
if not repository:
187+
if not dry_run:
188+
repository = Repository.objects.create(
189+
name=code_mapping.repo.name,
190+
organization_id=organization_id,
191+
integration_id=organization_integration.integration_id,
192+
)
193+
metrics.incr(
194+
key=f"{METRIC_PREFIX}.repository.created",
195+
tags={"platform": platform, "dry_run": dry_run},
196+
sample_rate=1.0,
197+
)
198+
199+
extra = {
200+
"project_id": project.id,
201+
"stack_root": code_mapping.stacktrace_root,
202+
"repository_name": code_mapping.repo.name,
203+
}
204+
# The project and stack_root are unique together
205+
existing_code_mappings = RepositoryProjectPathConfig.objects.filter(
206+
project=project, stack_root=code_mapping.stacktrace_root
211207
)
212-
213-
create_code_mapping(code_mapping, project, repository, organization_integration, dry_run)
214-
tags: Mapping[str, str | bool] = {"platform": platform, "dry_run": dry_run}
215-
metrics.incr(key=f"{METRIC_PREFIX}.code_mapping.created", tags=tags, sample_rate=1.0)
216-
metrics.incr(key=f"{METRIC_PREFIX}.repository.created", tags=tags, sample_rate=1.0)
217-
218-
219-
def create_code_mapping(
220-
code_mapping: CodeMapping,
221-
project: Project,
222-
repository: Repository | None,
223-
organization_integration: RpcOrganizationIntegration,
224-
dry_run: bool,
225-
) -> None:
226-
if not dry_run and repository:
227-
RepositoryProjectPathConfig.objects.create(
228-
project=project,
229-
stack_root=code_mapping.stacktrace_root,
230-
repository=repository,
231-
organization_integration_id=organization_integration.id,
232-
integration_id=organization_integration.integration_id,
233-
organization_id=organization_integration.organization_id,
234-
source_root=code_mapping.source_path,
235-
default_branch=code_mapping.repo.branch,
236-
automatically_generated=True,
208+
if existing_code_mappings.exists():
209+
logger.warning("Investigate.", extra=extra)
210+
continue
211+
212+
if not dry_run:
213+
if repository is None: # This is mostly to appease the type checker
214+
logger.warning("Investigate.", extra=extra)
215+
continue
216+
217+
RepositoryProjectPathConfig.objects.create(
218+
project=project,
219+
stack_root=code_mapping.stacktrace_root,
220+
repository=repository,
221+
organization_integration_id=organization_integration.id,
222+
integration_id=organization_integration.integration_id,
223+
organization_id=organization_integration.organization_id,
224+
source_root=code_mapping.source_path,
225+
default_branch=code_mapping.repo.branch,
226+
automatically_generated=True,
227+
)
228+
229+
metrics.incr(
230+
key=f"{METRIC_PREFIX}.code_mapping.created",
231+
tags={"platform": platform, "dry_run": dry_run},
232+
sample_rate=1.0,
237233
)

0 commit comments

Comments
 (0)