@@ -10,6 +10,7 @@ import type { OpenWorkspaceLocation } from '../../system/-webview/vscode';
10
10
import { openWorkspace } from '../../system/-webview/vscode' ;
11
11
import { log } from '../../system/decorators/log' ;
12
12
import { normalizePath } from '../../system/path' ;
13
+ import { getSettledValue } from '../../system/promise' ;
13
14
import type { SubscriptionChangeEvent } from '../gk/subscriptionService' ;
14
15
import { isSubscriptionStatePaidOrTrial } from '../gk/utils/subscription.utils' ;
15
16
import type { CloudWorkspaceData , CloudWorkspaceRepositoryDescriptor } from './models/cloudWorkspace' ;
@@ -473,13 +474,12 @@ export class WorkspacesService implements Disposable {
473
474
const repoPath = repo . uri . fsPath ;
474
475
475
476
const remotes = await repo . git . remotes ( ) . getRemotes ( ) ;
476
- const remoteUrls : string [ ] = [ ] ;
477
- for ( const remote of remotes ) {
478
- const remoteUrl = remote . provider ?. url ( { type : RemoteResourceType . Repo } ) ;
479
- if ( remoteUrl != null ) {
480
- remoteUrls . push ( remoteUrl ) ;
481
- }
482
- }
477
+ const remoteUrlPromises : Promise < string | undefined > [ ] = remotes . map ( async remote => {
478
+ return remote . provider ?. url ( { type : RemoteResourceType . Repo } ) ;
479
+ } ) ;
480
+ const remoteUrls : string [ ] = ( await Promise . allSettled ( remoteUrlPromises ) )
481
+ . map ( r => getSettledValue ( r ) )
482
+ . filter ( r => r != null ) ;
483
483
484
484
for ( const remoteUrl of remoteUrls ) {
485
485
await this . _repositoryLocator ?. storeLocation ( repoPath , remoteUrl ) ;
@@ -906,7 +906,7 @@ export class WorkspacesService implements Disposable {
906
906
if ( repo == null ) continue ;
907
907
const remote =
908
908
( await repo . git . remotes ( ) . getRemote ( 'origin' ) ) || ( await repo . git . remotes ( ) . getRemotes ( ) ) ?. [ 0 ] ;
909
- const remoteDescriptor = getRemoteDescriptor ( remote ) ;
909
+ const remoteDescriptor = await getRemoteDescriptor ( remote ) ;
910
910
if ( remoteDescriptor == null ) continue ;
911
911
repoInputs . push ( {
912
912
owner : remoteDescriptor . owner ,
@@ -1042,7 +1042,7 @@ export class WorkspacesService implements Disposable {
1042
1042
if ( workspace instanceof CloudWorkspace ) {
1043
1043
const remotes = await repo . git . remotes ( ) . getRemotes ( ) ;
1044
1044
for ( const remote of remotes ) {
1045
- const remoteDescriptor = getRemoteDescriptor ( remote ) ;
1045
+ const remoteDescriptor = await getRemoteDescriptor ( remote ) ;
1046
1046
if ( remoteDescriptor == null ) continue ;
1047
1047
reposProviderMap . set (
1048
1048
`${ remoteDescriptor . provider } /${ remoteDescriptor . owner } /${ remoteDescriptor . repoName } ` ,
@@ -1324,15 +1324,15 @@ export class WorkspacesService implements Disposable {
1324
1324
}
1325
1325
}
1326
1326
1327
- function getRemoteDescriptor ( remote : GitRemote ) : RemoteDescriptor | undefined {
1327
+ async function getRemoteDescriptor ( remote : GitRemote ) : Promise < RemoteDescriptor | undefined > {
1328
1328
if ( remote . provider ?. owner == null ) return undefined ;
1329
1329
const remoteRepoName = remote . provider . path . split ( '/' ) . pop ( ) ;
1330
1330
if ( remoteRepoName == null ) return undefined ;
1331
1331
return {
1332
1332
provider : remote . provider . id . toLowerCase ( ) ,
1333
1333
owner : remote . provider . owner . toLowerCase ( ) ,
1334
1334
repoName : remoteRepoName . toLowerCase ( ) ,
1335
- url : remote . provider . url ( { type : RemoteResourceType . Repo } ) ,
1335
+ url : await remote . provider . url ( { type : RemoteResourceType . Repo } ) ,
1336
1336
} ;
1337
1337
}
1338
1338
0 commit comments