Skip to content

Commit 0dbf372

Browse files
authored
fix(auto_source): Prevent creating duplicate rules (#89850)
This prevents creating in-app rules that the developer has already defined.
1 parent 7fc18b5 commit 0dbf372

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

src/sentry/issues/auto_source_code_config/in_app_stack_trace_rules.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,12 @@ def save_in_app_stack_trace_rules(
2525
current_enhancements = project.get_option(DERIVED_ENHANCEMENTS_OPTION_KEY)
2626
current_rules = set(current_enhancements.split("\n")) if current_enhancements else set()
2727

28-
united_rules = rules_from_code_mappings.union(current_rules)
28+
developer_enhancements = project.get_option("sentry:grouping_enhancements")
29+
developer_rules = set(developer_enhancements.split("\n")) if developer_enhancements else set()
30+
31+
# We do not want to duplicate rules from the developer enhancements
32+
united_rules = rules_from_code_mappings.union(current_rules).difference(developer_rules)
33+
2934
dry_run = platform_config.is_dry_run_platform(project.organization)
3035
if not dry_run and united_rules != current_rules:
3136
project.update_option(DERIVED_ENHANCEMENTS_OPTION_KEY, "\n".join(sorted(united_rules)))

tests/sentry/issues/auto_source_code_config/test_process_event.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -833,6 +833,19 @@ def test_do_not_clobber_rules(self) -> None:
833833
expected_new_in_app_stack_trace_rules=["stack.module:x.y.** +app"],
834834
)
835835

836+
def test_prevent_creating_duplicate_rules(self) -> None:
837+
# Rules set by the customer prevent configuration changes
838+
self.project.update_option("sentry:grouping_enhancements", "stack.module:foo.bar.** +app")
839+
# Manually created code mapping
840+
self.create_repo_and_code_mapping(REPO1, "foo/bar/", "src/foo/")
841+
# We do not expect code mappings or in-app rules to be created since
842+
# the developer already created the code mapping and in-app rule
843+
self._process_and_assert_configuration_changes(
844+
repo_trees={REPO1: ["src/foo/bar/Baz.java"]},
845+
frames=[self.frame_from_module("foo.bar.Baz", "Baz.java")],
846+
platform=self.platform,
847+
)
848+
836849
def test_basic_case(self) -> None:
837850
repo_trees = {REPO1: ["src/com/example/foo/Bar.kt"]}
838851
frames = [

0 commit comments

Comments
 (0)