@@ -143,18 +143,38 @@ private static async Task<ExitCode> UpdateNanoCLRAsync(
143143 _httpClient . DefaultRequestHeaders . Add ( "Accept" , "*/*" ) ;
144144
145145 string repoName = usePreview ? _refTargetsDevRepo : _refTargetsStableRepo ;
146+ List < CloudsmithPackageInfo > packageInfo ;
147+ string responseBody ;
146148
147- // get latest version available for download
148- HttpResponseMessage response = await _httpClient . GetAsync ( $ "{ repoName } /?query=name:^WIN_DLL_nanoCLR version:^latest$") ;
149- string responseBody = await response . Content . ReadAsStringAsync ( ) ;
149+ if ( string . IsNullOrEmpty ( targetVersion ) )
150+ {
151+ // no specific version requested, get latest version available for download
152+ HttpResponseMessage response = await _httpClient . GetAsync ( $ "{ repoName } /?query=name:^WIN_DLL_nanoCLR version:^latest$") ;
153+
154+ responseBody = await response . Content . ReadAsStringAsync ( ) ;
150155
151- if ( responseBody == "[]" )
156+ if ( responseBody == "[]" )
157+ {
158+ Console . WriteLine ( $ "Error getting latest available nanoCLR package.") ;
159+ return ExitCode . E9005 ;
160+ }
161+ }
162+ else
152163 {
153- Console . WriteLine ( $ "Error getting latest available nanoCLR package.") ;
154- return ExitCode . E9005 ;
164+ // specific version requested, get details for that version
165+ HttpResponseMessage response = await _httpClient . GetAsync ( $ "{ repoName } /?query=name:^WIN_DLL_nanoCLR version:{ targetVersion } ") ;
166+
167+ responseBody = await response . Content . ReadAsStringAsync ( ) ;
168+
169+ if ( responseBody == "[]" )
170+ {
171+ Console . WriteLine ( $ "Error getting package details for v{ targetVersion } .") ;
172+ return ExitCode . E9005 ;
173+ }
155174 }
156175
157- var packageInfo = JsonSerializer . Deserialize < List < CloudsmithPackageInfo > > ( responseBody ) ;
176+ // parse the response
177+ packageInfo = JsonSerializer . Deserialize < List < CloudsmithPackageInfo > > ( responseBody ) ;
158178
159179 if ( packageInfo . Count != 1 )
160180 {
@@ -165,18 +185,12 @@ private static async Task<ExitCode> UpdateNanoCLRAsync(
165185 {
166186 Version availableFwVersion = Version . Parse ( packageInfo [ 0 ] . Version ) ;
167187
168- // only perform version check if preview wasn't requested
169- if ( ! usePreview && ( availableFwVersion < installedVersion ) )
170- {
171- Console . WriteLine ( $ "Current version { installedVersion } higher than available version { packageInfo [ 0 ] . Version } ") ;
172- }
173-
174- if ( usePreview
175- || ( availableFwVersion > installedVersion )
176- || ( ! string . IsNullOrEmpty ( targetVersion )
177- && ( Version . Parse ( targetVersion ) > Version . Parse ( currentVersion ) ) ) )
188+ // update if the version is different from the installed one (either the requested target version or the latest available in the repo)
189+ if ( ( ! string . IsNullOrEmpty ( targetVersion )
190+ && ( Version . Parse ( targetVersion ) != installedVersion ) )
191+ || ( availableFwVersion > installedVersion ) )
178192 {
179- response = await _httpClient . GetAsync ( packageInfo [ 0 ] . DownloadUrl ) ;
193+ HttpResponseMessage response = await _httpClient . GetAsync ( packageInfo [ 0 ] . DownloadUrl ) ;
180194 response . EnsureSuccessStatusCode ( ) ;
181195
182196 // need to unload the DLL before updating it
@@ -194,7 +208,7 @@ private static async Task<ExitCode> UpdateNanoCLRAsync(
194208 }
195209 else
196210 {
197- Console . WriteLine ( $ "Already at v{ packageInfo [ 0 ] . Version } ") ;
211+ Console . WriteLine ( $ "At v{ packageInfo [ 0 ] . Version } , skipping update ") ;
198212 }
199213
200214 return ExitCode . OK ;
0 commit comments