@@ -13,24 +13,41 @@ import { EventStream } from '../EventStream';
1313import { NetworkSettingsProvider } from "../NetworkSettings" ;
1414import { filterPackages } from "./PackageFilterer" ;
1515import { AbsolutePathPackage } from "./AbsolutePathPackage" ;
16+ import { touchInstallFile , InstallFileType , deleteInstallFile } from "../common" ;
17+ import { InstallationFailure } from "../omnisharp/loggingEvents" ;
18+ import { mkdirpSync } from "fs-extra" ;
1619
17- export async function DownloadAndInstallPackages ( packages : Package [ ] , provider : NetworkSettingsProvider , platformInfo : PlatformInformation , eventStream : EventStream , extensionPath : string ) {
20+ export async function DownloadAndInstallPackages ( packages : Package [ ] , provider : NetworkSettingsProvider , platformInfo : PlatformInformation , eventStream : EventStream , extensionPath : string ) : Promise < void > {
1821 let absolutePathPackages = packages . map ( pkg => AbsolutePathPackage . getAbsolutePathPackage ( pkg , extensionPath ) ) ;
1922 let filteredPackages = await filterPackages ( absolutePathPackages , platformInfo ) ;
23+
2024 if ( filteredPackages ) {
2125 for ( let pkg of filteredPackages ) {
26+ let installationStage = "touchBeginFile" ;
2227 try {
28+ mkdirpSync ( pkg . installPath . value ) ;
29+ await touchInstallFile ( pkg . installPath , InstallFileType . Begin ) ;
30+ installationStage = 'downloadAndInstallPackages' ;
2331 let buffer = await DownloadFile ( pkg . description , eventStream , provider , pkg . url , pkg . fallbackUrl ) ;
2432 await InstallZip ( buffer , pkg . description , pkg . installPath , pkg . binaries , eventStream ) ;
33+ installationStage = 'touchLockFile' ;
34+ await touchInstallFile ( pkg . installPath , InstallFileType . Lock ) ;
2535 }
2636 catch ( error ) {
37+ eventStream . post ( new InstallationFailure ( installationStage , error ) ) ;
2738 if ( error instanceof NestedError ) {
28- throw new PackageError ( error . message , pkg , error . err ) ;
39+ let packageError = new PackageError ( error . message , pkg , error . err ) ;
40+ eventStream . post ( new InstallationFailure ( installationStage , packageError ) ) ;
41+ throw packageError ;
2942 }
3043 else {
44+ eventStream . post ( new InstallationFailure ( installationStage , error ) ) ;
3145 throw error ;
3246 }
3347 }
48+ finally {
49+ await deleteInstallFile ( pkg . installPath , InstallFileType . Begin ) ;
50+ }
3451 }
3552 }
3653}
0 commit comments