33using Rocket . Core . Logging ;
44using System ;
55using System . IO ;
6+ using System . Linq ;
67using System . Threading . Tasks ;
78
89namespace OpenMod . Installer . RocketMod . Jobs
@@ -17,29 +18,35 @@ protected NuGetInstallJob(string packageId)
1718 m_PackageId = packageId ;
1819 }
1920
20- public void ExecuteMigration ( )
21+ public void ExecuteMigration ( string [ ] args )
2122 {
22- AsyncHelperEx . RunSync ( DownloadPackage ) ;
23+ AsyncHelperEx . RunSync ( ( ) => DownloadPackage ( args . Contains ( "--force" ) || args . Contains ( "-f" ) ) ) ;
2324 }
2425
25- private async Task DownloadPackage ( )
26+ private async Task DownloadPackage ( bool force )
2627 {
2728 Logger . Log ( $ "Installing package \" { m_PackageId } \" ...") ;
2829 var nuGetPackageManager = NuGetHelper . GetNuGetPackageManager ( ) ;
2930
3031 const bool c_AllowPreReleaseVersion = false ;
3132
3233 var oldIdentity = await nuGetPackageManager . GetLatestPackageIdentityAsync ( m_PackageId ) ;
33- if ( oldIdentity != null )
34+ if ( ! force && oldIdentity != null )
3435 {
35- Logger . Log ( $ "Package \" { m_PackageId } \" is already installed.") ;
36+ Logger . LogWarning ( $ "Package \" { m_PackageId } \" is already installed, skipping. Use \" openmod install -f \" to install anyway .") ;
3637 return ;
3738 }
3839
3940 var package = await nuGetPackageManager . QueryPackageExactAsync ( m_PackageId , null , c_AllowPreReleaseVersion ) ;
4041 if ( package ? . Identity == null )
4142 {
42- Logger . Log ( $ "Downloading has failed for { m_PackageId } : { NuGetInstallCode . PackageOrVersionNotFound } ") ;
43+ Logger . LogError ( $ "Downloading has failed for { m_PackageId } : { NuGetInstallCode . PackageOrVersionNotFound } ") ;
44+ return ;
45+ }
46+
47+ if ( oldIdentity ? . Version == package . Identity . Version && package . Identity . HasVersion )
48+ {
49+ Logger . LogError ( $ "Latest version of { package . Identity . Id } is already installed.") ;
4350 return ;
4451 }
4552
0 commit comments