Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 29 additions & 6 deletions src/code/PSResourceInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -622,6 +622,8 @@ public static bool TryConvertFromJson(
string versionValue = versionElement.ToString();
metadata["Version"] = ParseHttpVersion(versionValue, out string prereleaseLabel);
metadata["Prerelease"] = prereleaseLabel;
// ADO server response does not contain "isPrerelease" element, so we set it here.
metadata["IsPrerelease"] = !String.IsNullOrEmpty(prereleaseLabel);

if (!NuGetVersion.TryParse(versionValue, out NuGetVersion parsedNormalizedVersion))
{
Expand All @@ -631,6 +633,7 @@ public static bool TryConvertFromJson(

parsedNormalizedVersion = new NuGetVersion("1.0.0.0");
}

metadata["NormalizedVersion"] = parsedNormalizedVersion;
}

Expand All @@ -646,15 +649,34 @@ public static bool TryConvertFromJson(
metadata["ProjectUrl"] = ParseHttpUrl(projectUrlElement.ToString()) as Uri;
}

// Icon Url
if (rootDom.TryGetProperty("iconUrl", out JsonElement iconUrlElement))
{
metadata["IconUrl"] = ParseHttpUrl(iconUrlElement.ToString()) as Uri;
}

// Tags
if (rootDom.TryGetProperty("tags", out JsonElement tagsElement))
{
List<string> tags = new List<string>();
foreach (var tag in tagsElement.EnumerateArray())
string[] pkgTags = Utils.EmptyStrArray;
if (tagsElement.ValueKind == JsonValueKind.Array)
{
var arrayLength = tagsElement.GetArrayLength();
List<string> tags = new List<string>(arrayLength);
foreach (var tag in tagsElement.EnumerateArray())
{
tags.Add(tag.ToString());
}

pkgTags = tags.ToArray();
}
else if (tagsElement.ValueKind == JsonValueKind.String)
{
tags.Add(tag.ToString());
string tagStr = tagsElement.ToString();
pkgTags = tagStr.Split(Utils.WhitespaceSeparator, StringSplitOptions.RemoveEmptyEntries);
}
metadata["Tags"] = tags.ToArray();

metadata["Tags"] = pkgTags;
}

// PublishedDate
Expand All @@ -663,10 +685,11 @@ public static bool TryConvertFromJson(
metadata["PublishedDate"] = ParseHttpDateTime(publishedElement.ToString());
}

// Dependencies
// TODO 3.0.0-beta21, a little complicated
// Dependencies
// TODO, tracked via: https://github.com/PowerShell/PSResourceGet/issues/1169

// IsPrerelease
// NuGet.org repository's response does contain 'isPrerelease' element so it can be accquired and set here.
if (rootDom.TryGetProperty("isPrerelease", out JsonElement isPrereleaseElement))
{
metadata["IsPrerelease"] = isPrereleaseElement.GetBoolean();
Expand Down
6 changes: 3 additions & 3 deletions src/code/RepositorySettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -803,13 +803,13 @@ private static XDocument LoadXDocument(string filePath)
return XDocument.Load(xmlReader);
}

private static PSRepositoryInfo.APIVersion GetRepoAPIVersion(Uri repoUri) {

private static PSRepositoryInfo.APIVersion GetRepoAPIVersion(Uri repoUri)
{
if (repoUri.AbsoluteUri.EndsWith("api/v2", StringComparison.OrdinalIgnoreCase))
{
return PSRepositoryInfo.APIVersion.v2;
}
else if (repoUri.AbsoluteUri.EndsWith("v3/index.json", StringComparison.OrdinalIgnoreCase))
else if (repoUri.AbsoluteUri.EndsWith("/index.json", StringComparison.OrdinalIgnoreCase))
{
return PSRepositoryInfo.APIVersion.v3;
}
Expand Down
1 change: 1 addition & 0 deletions src/code/ResponseUtilFactory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public static ResponseUtil GetResponseUtil(PSRepositoryInfo repository)
case PSRepositoryInfo.APIVersion.v3:
currentResponseUtil = new V3ResponseUtil(repository);
break;

case PSRepositoryInfo.APIVersion.local:
currentResponseUtil = new LocalResponseUtil(repository);
break;
Expand Down
1 change: 1 addition & 0 deletions src/code/Utils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ public enum MetadataFileType
#region String fields

public static readonly string[] EmptyStrArray = Array.Empty<string>();
public static readonly char[] WhitespaceSeparator = new char[]{' '};
public const string PSDataFileExt = ".psd1";
private const string ConvertJsonToHashtableScript = @"
param (
Expand Down
23 changes: 11 additions & 12 deletions src/code/V3ResponseUtil.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,28 +38,27 @@ public override IEnumerable<PSResourceResult> ConvertToPSResourceResult(FindResu
string[] responses = responseResults.StringResponse;
foreach (string response in responses)
{
string parseError = String.Empty;
JsonDocument pkgVersionEntry = null;
string responseConversionError = String.Empty;
PSResourceInfo pkg = null;

try
{
pkgVersionEntry = JsonDocument.Parse(response);
using (JsonDocument pkgVersionEntry = JsonDocument.Parse(response))
{
PSResourceInfo.TryConvertFromJson(pkgVersionEntry, out pkg, Repository, out responseConversionError);
}
}
catch (Exception e)
{
parseError = e.Message;
}

if (!String.IsNullOrEmpty(parseError))
{
yield return new PSResourceResult(returnedObject: null, errorMsg: parseError, isTerminatingError: false);
responseConversionError = e.Message;
}

if (!PSResourceInfo.TryConvertFromJson(pkgVersionEntry, out PSResourceInfo psGetInfo, Repository, out string errorMsg))
if (!String.IsNullOrEmpty(responseConversionError))
{
yield return new PSResourceResult(returnedObject: null, errorMsg: errorMsg, isTerminatingError: false);
yield return new PSResourceResult(returnedObject: null, errorMsg: responseConversionError, isTerminatingError: false);
}

yield return new PSResourceResult(returnedObject: psGetInfo, errorMsg: String.Empty, isTerminatingError: false);
yield return new PSResourceResult(returnedObject: pkg, errorMsg: String.Empty, isTerminatingError: false);
}
}

Expand Down
Loading