@@ -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' ;
@@ -471,13 +472,12 @@ export class WorkspacesService implements Disposable {
471
472
const repoPath = repo . uri . fsPath ;
472
473
473
474
const remotes = await repo . git . remotes ( ) . getRemotes ( ) ;
474
- const remoteUrls : string [ ] = [ ] ;
475
- for ( const remote of remotes ) {
476
- const remoteUrl = remote . provider ?. url ( { type : RemoteResourceType . Repo } ) ;
477
- if ( remoteUrl != null ) {
478
- remoteUrls . push ( remoteUrl ) ;
479
- }
480
- }
475
+ const remoteUrlPromises : Promise < string | undefined > [ ] = remotes . map ( async remote => {
476
+ return remote . provider ?. url ( { type : RemoteResourceType . Repo } ) ;
477
+ } ) ;
478
+ const remoteUrls : string [ ] = ( await Promise . allSettled ( remoteUrlPromises ) )
479
+ . map ( r => getSettledValue ( r ) )
480
+ . filter ( r => r != null ) ;
481
481
482
482
for ( const remoteUrl of remoteUrls ) {
483
483
await this . _repositoryLocator ?. storeLocation ( repoPath , remoteUrl ) ;
@@ -904,7 +904,7 @@ export class WorkspacesService implements Disposable {
904
904
if ( repo == null ) continue ;
905
905
const remote =
906
906
( await repo . git . remotes ( ) . getRemote ( 'origin' ) ) || ( await repo . git . remotes ( ) . getRemotes ( ) ) ?. [ 0 ] ;
907
- const remoteDescriptor = getRemoteDescriptor ( remote ) ;
907
+ const remoteDescriptor = await getRemoteDescriptor ( remote ) ;
908
908
if ( remoteDescriptor == null ) continue ;
909
909
repoInputs . push ( {
910
910
owner : remoteDescriptor . owner ,
@@ -1040,7 +1040,7 @@ export class WorkspacesService implements Disposable {
1040
1040
if ( workspace instanceof CloudWorkspace ) {
1041
1041
const remotes = await repo . git . remotes ( ) . getRemotes ( ) ;
1042
1042
for ( const remote of remotes ) {
1043
- const remoteDescriptor = getRemoteDescriptor ( remote ) ;
1043
+ const remoteDescriptor = await getRemoteDescriptor ( remote ) ;
1044
1044
if ( remoteDescriptor == null ) continue ;
1045
1045
reposProviderMap . set (
1046
1046
`${ remoteDescriptor . provider } /${ remoteDescriptor . owner } /${ remoteDescriptor . repoName } ` ,
@@ -1322,15 +1322,15 @@ export class WorkspacesService implements Disposable {
1322
1322
}
1323
1323
}
1324
1324
1325
- function getRemoteDescriptor ( remote : GitRemote ) : RemoteDescriptor | undefined {
1325
+ async function getRemoteDescriptor ( remote : GitRemote ) : Promise < RemoteDescriptor | undefined > {
1326
1326
if ( remote . provider ?. owner == null ) return undefined ;
1327
1327
const remoteRepoName = remote . provider . path . split ( '/' ) . pop ( ) ;
1328
1328
if ( remoteRepoName == null ) return undefined ;
1329
1329
return {
1330
1330
provider : remote . provider . id . toLowerCase ( ) ,
1331
1331
owner : remote . provider . owner . toLowerCase ( ) ,
1332
1332
repoName : remoteRepoName . toLowerCase ( ) ,
1333
- url : remote . provider . url ( { type : RemoteResourceType . Repo } ) ,
1333
+ url : await remote . provider . url ( { type : RemoteResourceType . Repo } ) ,
1334
1334
} ;
1335
1335
}
1336
1336
0 commit comments