for projects in gitlab subgroup (#3075) (#3247)

* for projects in gitlab subgroup (#3075)

* fix: false condition

* refactor pattern matching logic

---------

Co-authored-by: t2 <>
Co-authored-by: shatfield4 <seanhatfield5@gmail.com>
Co-authored-by: Timothy Carambat <rambat1010@gmail.com>
This commit is contained in:
t2 2025-02-18 05:25:11 +09:00 committed by GitHub
parent e978c90ea0
commit 0eb86e2c12
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -45,30 +45,20 @@ class GitLabRepoLoader {
}
#validGitlabUrl() {
const UrlPattern = require("url-pattern");
const validPatterns = [
new UrlPattern("https\\://gitlab.com/(:author*)/(:project(*))", {
segmentValueCharset: "a-zA-Z0-9-._~%+",
}),
/https:\/\/gitlab\.com\/(?<author>[^\/]+)\/(?<project>.*)/,
// This should even match the regular hosted URL, but we may want to know
// if this was a hosted GitLab (above) or a self-hosted (below) instance
// since the API interface could be different.
new UrlPattern(
"(:protocol(http|https))\\://(:hostname*)/(:author*)/(:project(*))",
{
segmentValueCharset: "a-zA-Z0-9-._~%+",
}
),
/(http|https):\/\/[^\/]+\/(?<author>[^\/]+)\/(?<project>.*)/,
];
let match = null;
for (const pattern of validPatterns) {
if (match !== null) continue;
match = pattern.match(this.repo);
}
if (!match) return false;
const { author, project } = match;
const match = validPatterns
.find((pattern) => this.repo.match(pattern)?.groups)
?.exec(this.repo);
if (!match?.groups) return false;
const { author, project } = match.groups;
this.projectId = encodeURIComponent(`${author}/${project}`);
this.apiBase = new URL(this.repo).origin;
this.author = author;