Skip to content

Commit d90b430

Browse files
authored
Fix update of nanoCLR (#3166)
***NO_CI***
1 parent 4f15929 commit d90b430

File tree

1 file changed

+33
-19
lines changed

1 file changed

+33
-19
lines changed

targets/netcore/nanoFramework.nanoCLR.CLI/ClrInstanceOperationsProcessor.cs

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)