Merge pull request #3809 from lisiur/master

fix: Update cleanUrl method to handle ssh URLs
This commit is contained in:
Caleb Owens 2024-05-22 09:52:13 +01:00 committed by GitHub
commit 0ab611fe7b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 43 additions and 11 deletions

View File

@ -0,0 +1,24 @@
import { cleanUrl } from '$lib/utils/url';
import { describe, expect, test } from 'vitest';
describe.concurrent('cleanUrl', () => {
test('it should handle url starts with http(s)?', () => {
expect(cleanUrl('https://github.com/user/repo.git')).toEqual('https://github.com/user/repo');
});
test('it should handle complete ssh url with domain name', () => {
expect(cleanUrl('ssh://git@github.com:22/user/repo.git')).toEqual(
'https://github.com/user/repo'
);
});
test('it should handle complete ssh url with ip', () => {
expect(cleanUrl('ssh://git@192.168.1.1:22/user/repo.git')).toEqual(
'http://192.168.1.1/user/repo'
);
});
test('it should handle SCP-like url', () => {
expect(cleanUrl('git@github.com:user/repo.git')).toEqual('https://github.com/user/repo');
});
});

View File

@ -22,3 +22,19 @@ export function openExternalUrl(href: string) {
throw e;
}
}
// turn a git remote url into a web url (github, gitlab, bitbucket, etc)
export function cleanUrl(url: string): string {
if (url.startsWith('http')) {
return url.replace('.git', '').trim();
} else if (url.startsWith('ssh')) {
url = url.replace('ssh://git@', '');
const [host, ...paths] = url.split('/');
const path = paths.join('/').replace('.git', '');
const protocol = /\d+\.\d+\.\d+\.\d+/.test(host) ? 'http' : 'https';
const [hostname, _port] = host.split(':');
return `${protocol}://${hostname}/${path}`;
} else {
return url.replace(':', '/').replace('git@', 'https://').replace('.git', '').trim();
}
}

View File

@ -2,6 +2,7 @@ import 'reflect-metadata';
import { splitMessage } from '$lib/utils/commitMessage';
import { hashCode } from '$lib/utils/string';
import { isDefined, notNull } from '$lib/utils/typeguards';
import { cleanUrl } from '$lib/utils/url';
import { Type, Transform } from 'class-transformer';
export type ChangeType =
@ -370,20 +371,11 @@ export class BaseBranch {
}
get pushRepoBaseUrl(): string {
return this.cleanUrl(this.pushRemoteUrl);
return cleanUrl(this.pushRemoteUrl);
}
get repoBaseUrl(): string {
return this.cleanUrl(this.remoteUrl);
}
// turn a git remote url into a web url (github, gitlab, bitbucket, etc)
private cleanUrl(url: string): string {
if (url.startsWith('http')) {
return url.replace('.git', '').trim();
} else {
return url.replace(':', '/').replace('git@', 'https://').replace('.git', '').trim();
}
return cleanUrl(this.remoteUrl);
}
commitUrl(commitId: string): string | undefined {