diff --git a/apps/server/src/sourceControl/giteaRepository.test.ts b/apps/server/src/sourceControl/giteaRepository.test.ts index 48412b6c1cc8..5015416281e6 100644 --- a/apps/server/src/sourceControl/giteaRepository.test.ts +++ b/apps/server/src/sourceControl/giteaRepository.test.ts @@ -49,6 +49,10 @@ it("accepts PR numbers and URLs only from the selected repository", () => { giteaPullRequestNumber(`${base}/TEAM/REPO/pulls/42/files`, "team/repo", base), 42, ); + assert.strictEqual( + giteaPullRequestNumber(`${base}/%C3%A9quipe/r%C3%A9po/pulls/43/files`, "équipe/répo", base), + 43, + ); for (const ref of [ "0", "-1", diff --git a/apps/server/src/sourceControl/giteaRepository.ts b/apps/server/src/sourceControl/giteaRepository.ts index 12596e76689b..0d449e76f4a3 100644 --- a/apps/server/src/sourceControl/giteaRepository.ts +++ b/apps/server/src/sourceControl/giteaRepository.ts @@ -59,7 +59,8 @@ export function giteaPullRequestNumber( try { const url = new URL(reference); const base = new URL(baseUrl); - const expected = `${base.pathname.replace(/\/+$/u, "")}/${repository}/pulls/`; + const encodedRepository = repository.split("/").map(encodeURIComponent).join("/"); + const expected = `${base.pathname.replace(/\/+$/u, "")}/${encodedRepository}/pulls/`; if ( url.origin !== base.origin || !url.pathname.toLowerCase().startsWith(expected.toLowerCase())