mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-28 22:14:52 -07:00
support giving a github repo URL with a trailing slash (#10360)
This commit is contained in:
@@ -292,13 +292,20 @@ describe('git extension helpers', () => {
|
|||||||
expect(repo).toBe('repo');
|
expect(repo).toBe('repo');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should parse owner and repo from a full GitHub UR without .git', () => {
|
it('should parse owner and repo from a full GitHub URL without .git', () => {
|
||||||
const source = 'https://github.com/owner/repo';
|
const source = 'https://github.com/owner/repo';
|
||||||
const { owner, repo } = parseGitHubRepoForReleases(source);
|
const { owner, repo } = parseGitHubRepoForReleases(source);
|
||||||
expect(owner).toBe('owner');
|
expect(owner).toBe('owner');
|
||||||
expect(repo).toBe('repo');
|
expect(repo).toBe('repo');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should parse owner and repo from a full GitHub URL with a trailing slash', () => {
|
||||||
|
const source = 'https://github.com/owner/repo/';
|
||||||
|
const { owner, repo } = parseGitHubRepoForReleases(source);
|
||||||
|
expect(owner).toBe('owner');
|
||||||
|
expect(repo).toBe('repo');
|
||||||
|
});
|
||||||
|
|
||||||
it('should fail on a GitHub SSH URL', () => {
|
it('should fail on a GitHub SSH URL', () => {
|
||||||
const source = 'git@github.com:owner/repo.git';
|
const source = 'git@github.com:owner/repo.git';
|
||||||
expect(() => parseGitHubRepoForReleases(source)).toThrow(
|
expect(() => parseGitHubRepoForReleases(source)).toThrow(
|
||||||
|
|||||||
@@ -85,7 +85,11 @@ export function parseGitHubRepoForReleases(source: string): {
|
|||||||
// Default to a github repo path, so `source` can be just an org/repo
|
// Default to a github repo path, so `source` can be just an org/repo
|
||||||
const parsedUrl = URL.parse(source, 'https://github.com');
|
const parsedUrl = URL.parse(source, 'https://github.com');
|
||||||
// The pathname should be "/owner/repo".
|
// The pathname should be "/owner/repo".
|
||||||
const parts = parsedUrl?.pathname.substring(1).split('/');
|
const parts = parsedUrl?.pathname
|
||||||
|
.substring(1)
|
||||||
|
.split('/')
|
||||||
|
// Remove the empty segments, fixes trailing slashes
|
||||||
|
.filter((part) => part !== '');
|
||||||
if (parts?.length !== 2 || parsedUrl?.host !== 'github.com') {
|
if (parts?.length !== 2 || parsedUrl?.host !== 'github.com') {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Invalid GitHub repository source: ${source}. Expected "owner/repo" or a github repo uri.`,
|
`Invalid GitHub repository source: ${source}. Expected "owner/repo" or a github repo uri.`,
|
||||||
|
|||||||
Reference in New Issue
Block a user