Skip to content

Commit f2c3890

Browse files
committed
Add threedigit normalized method
1 parent f8afc0d commit f2c3890

4 files changed

Lines changed: 64 additions & 5 deletions

File tree

src/code/InstallHelper.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,18 @@ private List<PSResourceInfo> InstallPackages(
599599

600600
// Add each pkg to _packagesOnMachine (ie pkgs fully installed on the machine).
601601
_packagesOnMachine.Add($"{pkgName}{pkgInfo["pkgVersion"]}");
602+
603+
// PSResourceInfo psResourceInfoPkg = pkgInfo["psResourceInfoPkg"] as PSResourceInfo;
604+
// psResourceInfoPkg.AdditionalMetadata.TryGetValue("NormalizedVersion", out string pkgVersion);
605+
// if (pkgVersion == null)
606+
// {
607+
// // Not all NuGet providers (e.g. Artifactory, possibly others) send NormalizedVersion in NuGet package responses.
608+
// // If they don't, we need to manually construct the combined version+prerelease from pkgToInstall.Version and the prerelease string.
609+
// // Get three digit normalized version
610+
// pkgVersion = Utils.GetThreeDigitNormalizedVersionString(psResourceInfoPkg.Version.ToString(), psResourceInfoPkg.Prerelease);
611+
// }
612+
613+
_packagesOnMachine.Add($"{pkgName}{pkgVersion}");
602614
}
603615
}
604616
}
@@ -827,7 +839,6 @@ private ConcurrentDictionary<string, Hashtable> BeginPackageInstall(
827839
}
828840
else {
829841
// If we don't install dependencies, we're only installing the parent pkg so we can short circut and simply install the parent pkg.
830-
// TODO:: check this version and prerelease combo
831842
Stream responseStream = currentServer.InstallPackage(pkgToInstall.Name, pkgVersion, true, out ErrorRecord installNameErrRecord);
832843

833844
if (installNameErrRecord != null)

src/code/PSResourceInfo.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1535,7 +1535,7 @@ private static Dependency[] GetDependencies(ArrayList dependencyInfos)
15351535

15361536
private static string ConcatenateVersionWithPrerelease(string version, string prerelease)
15371537
{
1538-
return Utils.GetNormalizedVersionString(version, prerelease);
1538+
return Utils.GetThreeDigitNormalizedVersionString(version, prerelease);
15391539
}
15401540

15411541
#endregion
@@ -1820,7 +1820,8 @@ private static ResourceType ParseHttpMetadataTypeForLocalRepo(
18201820

18211821
private PSObject ConvertToCustomObject()
18221822
{
1823-
// 1.0.0-alpha1
1823+
// TODO update Normalized Version
1824+
// 1.0.0-alpha1 test_module 5.0.0.0
18241825
// 1.0.0.0
18251826
string NormalizedVersion = IsPrerelease ? ConcatenateVersionWithPrerelease(Version.ToString(), Prerelease) : Version.ToString();
18261827

src/code/Utils.cs

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,45 @@ public static bool TryGetVersionType(
318318
return true;
319319
}
320320

321+
///need this for cache
322+
public static string GetThreeDigitNormalizedVersionString(
323+
string versionString,
324+
string prerelease)
325+
{
326+
// versionString may be like 1.2.0.0 or 1.2.0 or 1.2
327+
// prerelease may be null or "alpha1"
328+
// possible passed in examples:
329+
// versionString: "1.2" <- container registry 2 digit version
330+
// versionString: "1.2" prerelease: "alpha1" <- container registry 2 digit version
331+
// versionString: "1.2.0" prerelease: "alpha1"
332+
// versionString: "1.2.0" prerelease: "" <- doubtful though
333+
// versionString: "1.2.0.0" prerelease: "alpha1"
334+
// versionString: "1.2.0.0" prerelease: ""
335+
336+
int numVersionDigits = versionString.Split('.').Count();
337+
338+
if (numVersionDigits == 2)
339+
{
340+
// versionString: "1.2" prerelease: "alpha1" -> 1.2.0-alpha1
341+
return versionString + ".0-" + prerelease;
342+
}
343+
else if (numVersionDigits == 3)
344+
{
345+
// versionString: "1.2.0" prerelease: "alpha1" -> 1.2.0-alpha1
346+
return versionString + "-" + prerelease;
347+
}
348+
else if (numVersionDigits == 4)
349+
{
350+
// if last digit is 0, truncated it
351+
352+
// if it's not 0, just leave it
353+
// versionString: "1.2.0.1"
354+
return versionString;
355+
}
356+
357+
return versionString;
358+
}
359+
321360
public static string GetNormalizedVersionString(
322361
string versionString,
323362
string prerelease)
@@ -1217,7 +1256,15 @@ internal static HashSet<string> GetInstalledPackages(List<string> pathsToSearch,
12171256
pathsToSearch: pathsToSearch,
12181257
selectPrereleaseOnly: false))
12191258
{
1220-
string pkgNameVersion = String.Format("{0}{1}", installedPkg.Name, installedPkg.Version.ToString());
1259+
// if (string.Equals(installedPkg.Name, "test_module", StringComparison.OrdinalIgnoreCase))
1260+
// {
1261+
// // get normalized version now
1262+
// string pkgNameVersionnew = String.Format("{0}{1}", installedPkg.Name, Utils.GetNormalizedVersionString(installedPkg.AdditionalMetadata["NormalizedVersion"], installedPkg.Prerelease));
1263+
// tempbool = true;
1264+
// }
1265+
1266+
// normalize version here instead of using installedPkg.Version.ToString()
1267+
string pkgNameVersion = String.Format("{0}{1}", installedPkg.Name, Utils.GetThreeDigitNormalizedVersionString(installedPkg.Version.ToString(), installedPkg.Prerelease));
12211268
if (!pkgsInstalledOnMachine.Contains(pkgNameVersion))
12221269
{
12231270
pkgsInstalledOnMachine.Add(pkgNameVersion);

test/InstallPSResourceTests/InstallPSResourceV2Server.Tests.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ Describe 'Test Install-PSResource for V2 Server scenarios' -tags 'CI' {
183183
$pkg.Name | Should -Be "TestModuleWithDependencyC"
184184
$pkg.Version | Should -Be "1.0"
185185

186-
$pkg = Get-InstalledPSResource "TestModuleWithDependencyB", "TestModuleWithDependencyD"
186+
$pkg = Get-InstalledPSResource "TestModuleWithDependencyB", "TestModuleWithDependencyD" -ErrorAction SilentlyContinue
187187
$pkg | Should -BeNullOrEmpty
188188
}
189189

0 commit comments

Comments
 (0)