Skip to content

Commit 2e0f6ff

Browse files
authored
Merge pull request #3022 from athenianco/fix-unicode-release-settings
[DEV-5350] Fix unicode matches in the release settings
2 parents a1dcb36 + 223d1e3 commit 2e0f6ff

File tree

2 files changed

+70
-1
lines changed

2 files changed

+70
-1
lines changed

server/athenian/api/internal/miners/github/release_load.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1110,7 +1110,11 @@ def set_matched_by_from_release_match(
11101110
"tag_or_branch" precomputed releases.
11111111
:param repo_column: Required if `remove_ambiguous_tag_or_branch` is True.
11121112
"""
1113-
release_matches = df[PrecomputedRelease.release_match.name].values.astype("S")
1113+
release_matches = df[PrecomputedRelease.release_match.name].values
1114+
try:
1115+
release_matches = release_matches.astype("S")
1116+
except UnicodeEncodeError:
1117+
release_matches = np.char.encode(release_matches.astype("U", copy=False), "UTF-8")
11141118
matched_by_tag_mask = np.char.startswith(
11151119
release_matches, compose_release_match(ReleaseMatch.tag, "").encode(),
11161120
)

server/tests/controllers/miners/github/test_release.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2257,6 +2257,71 @@ async def test_mine_releases_twins(
22572257
await mdb_rw.execute(delete(Release).where(Release.node_id == 100500))
22582258

22592259

2260+
@with_defer
2261+
async def test_mine_releases_unicode_match(
2262+
mdb_rw,
2263+
pdb,
2264+
rdb,
2265+
prefixer,
2266+
):
2267+
release_match_setting_tag = ReleaseSettings(
2268+
{
2269+
"github.com/src-d/go-git": ReleaseMatchSetting(
2270+
branches="", tags=r".*\+Юникод", events=".*", match=ReleaseMatch.tag,
2271+
),
2272+
},
2273+
)
2274+
time_from = datetime(year=2017, month=6, day=1, tzinfo=timezone.utc)
2275+
time_to = datetime(year=2018, month=2, day=1, tzinfo=timezone.utc)
2276+
await mdb_rw.execute(
2277+
insert(Release).values(
2278+
{
2279+
Release.node_id: 100501,
2280+
Release.acc_id: 6366825,
2281+
Release.repository_full_name: "src-d/go-git",
2282+
Release.repository_node_id: 40550,
2283+
Release.author: "mcuadros",
2284+
Release.author_node_id: 39789,
2285+
Release.name: "v4.0.0+Юникод",
2286+
Release.published_at: datetime(2018, 1, 12, tzinfo=timezone.utc),
2287+
Release.tag: "v4.0.0+Юникод",
2288+
Release.url: "https://github.com/src-d/go-git/commit/tag/v4.0.0+Юникод",
2289+
Release.sha: "71e438ee1c3bdca714f138fcc6bb8c084989a521",
2290+
Release.commit_id: 2756486,
2291+
Release.type: "Tag",
2292+
},
2293+
),
2294+
)
2295+
try:
2296+
for _ in range(2):
2297+
releases, _, _, _ = await mine_releases(
2298+
["src-d/go-git"],
2299+
{},
2300+
None,
2301+
{},
2302+
time_from,
2303+
time_to,
2304+
LabelFilter.empty(),
2305+
JIRAFilter.empty(),
2306+
release_match_setting_tag,
2307+
LogicalRepositorySettings.empty(),
2308+
prefixer,
2309+
1,
2310+
(6366825,),
2311+
mdb_rw,
2312+
pdb,
2313+
rdb,
2314+
None,
2315+
with_deployments=False,
2316+
)
2317+
assert len(releases) == 1
2318+
assert releases.iloc[0][Release.node_id.name] == 100501
2319+
assert releases.iloc[0][Release.name.name] == "v4.0.0+Юникод"
2320+
await wait_deferred()
2321+
finally:
2322+
await mdb_rw.execute(delete(Release).where(Release.node_id == 100501))
2323+
2324+
22602325
@with_defer
22612326
async def test_override_first_releases_smoke(
22622327
mdb,

0 commit comments

Comments
 (0)