Skip to content

Commit 93f7093

Browse files
fix: allow long remote URLs to be parsed
1 parent 626464c commit 93f7093

File tree

4 files changed

+40
-28
lines changed

4 files changed

+40
-28
lines changed

package-lock.json

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -683,7 +683,7 @@
683683
"when": "atlascode:isBitbucketCloudRepo && config.atlascode.bitbucket.enabled",
684684
"group": "navigation"
685685
}
686-
],
686+
],
687687
"view/title": [
688688
{
689689
"command": "atlascode.rovodev.newChatSession",
@@ -1700,6 +1700,7 @@
17001700
"p-queue": "^6.3.0",
17011701
"p-settle": "^3.1.0",
17021702
"p-timeout": "^3.2.0",
1703+
"parse-url": "^8.1.0",
17031704
"prosemirror-commands": "^1.7.1",
17041705
"prosemirror-dropcursor": "^1.8.2",
17051706
"prosemirror-example-setup": "^1.2.3",

src/bitbucket/bbContext.ts

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -93,37 +93,42 @@ export class BitbucketContext extends Disposable {
9393
this._pullRequestCache.clear();
9494
this._repoMap.clear();
9595

96-
await Promise.all(
97-
Container.siteManager.getSitesAvailable(ProductBitbucket).map(async (site) => {
98-
try {
99-
const bbApi = await Container.clientManager.bbClient(site);
100-
const mirrorHosts = await bbApi.repositories.getMirrorHosts();
101-
this._mirrorsCache.setItem(site.host, mirrorHosts);
102-
} catch {
103-
// log and ignore error
104-
Logger.debug('Failed to fetch mirror sites');
105-
}
106-
}),
107-
);
96+
try {
97+
await Promise.all(
98+
Container.siteManager.getSitesAvailable(ProductBitbucket).map(async (site) => {
99+
try {
100+
const bbApi = await Container.clientManager.bbClient(site);
101+
const mirrorHosts = await bbApi.repositories.getMirrorHosts();
102+
this._mirrorsCache.setItem(site.host, mirrorHosts);
103+
} catch {
104+
// log and ignore error
105+
Logger.debug('Failed to fetch mirror sites');
106+
}
107+
}),
108+
);
108109

109-
const repos = this.getAllRepositoriesRaw();
110-
for (let i = 0; i < repos.length; i++) {
111-
const repo: Repository = repos[i];
112-
if (!repo.state.HEAD) {
113-
Logger.debug(`JS-1324 Forcing updateModelState on ${repo.rootUri}`);
114-
await repo.status();
115-
}
116-
if (repo.state.remotes.length > 0) {
117-
this._repoMap.set(repo.rootUri.toString(), workspaceRepoFor(repo));
118-
} else {
119-
Logger.warn(`JS-1324 no remotes found for ${repo.rootUri}`);
110+
const repos = this.getAllRepositoriesRaw();
111+
for (let i = 0; i < repos.length; i++) {
112+
const repo: Repository = repos[i];
113+
if (!repo.state.HEAD) {
114+
Logger.debug(`JS-1324 Forcing updateModelState on ${repo.rootUri}`);
115+
await repo.status();
116+
}
117+
if (repo.state.remotes.length > 0) {
118+
this._repoMap.set(repo.rootUri.toString(), workspaceRepoFor(repo));
119+
} else {
120+
Logger.warn(`JS-1324 no remotes found for ${repo.rootUri}`);
121+
}
120122
}
121-
}
122123

123-
const isBitbucketCloudRepo = this.getBitbucketCloudRepositories().length > 0;
124-
this.setIsBitbucketCloudRepo(isBitbucketCloudRepo);
124+
const isBitbucketCloudRepo = this.getBitbucketCloudRepositories().length > 0;
125+
this.setIsBitbucketCloudRepo(isBitbucketCloudRepo);
125126

126-
this._onDidChangeBitbucketContext.fire();
127+
this._onDidChangeBitbucketContext.fire();
128+
} catch (err) {
129+
err.subject_url = undefined; // remove potentially sensitive info
130+
Logger.error(err, 'Error refreshing Bitbucket repositories');
131+
}
127132
}
128133

129134
private updateUsers(sites: DetailedSiteInfo[]) {

src/bitbucket/bbUtils.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ import { BitbucketApi, BitbucketSite, WorkspaceRepo } from './model';
88

99
const bbServerRepoRegEx = new RegExp(/(?<type>users|projects)\/(?<owner>.*)\/repos/);
1010

11+
// Override the max input length to support long Bitbucket Server URLs
12+
// The error is thrown in `parse-url` <- `git-up` <- `git-url-parse`, hence the odd modification here
13+
const parseUrl = require('parse-url');
14+
parseUrl.MAX_INPUT_LENGTH = 3000;
15+
1116
export function parseGitUrl(url: string): gitUrlParse.GitUrl {
1217
const parsed = gitUrlParse(url);
1318
parsed.owner = parsed.owner.slice(parsed.owner.lastIndexOf('/') + 1);

0 commit comments

Comments
 (0)