Skip to content

Commit 4121141

Browse files
authored
Merge pull request #10 from meokullu/new_version_0008
v1.2.0
2 parents b9ee50e + 1d29882 commit 4121141

8 files changed

Lines changed: 139 additions & 45 deletions

File tree

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,4 +360,5 @@ MigrationBackup/
360360
.ionide/
361361

362362
# Fody - auto-generated XML schema
363-
FodyWeavers.xsd
363+
FodyWeavers.xsd
364+
/NuGetVersionChecker/src/CompareVersion.cs

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,16 @@
1616
#### Security
1717
-->
1818

19+
### [1.2.0] (2024-07-07)
20+
#### Added
21+
* `PackageEqualityComparer` class is added into `Package`. It has `Equal(Package x, Package y)` and `GetHashCode(Package obj)` interface methods of `IEqualityComparer<Package>`.
22+
* `CheckVersionAsync(List<string> pathList, bool includePrerelease)` method is added. This method uses distinction before call `GetPackagesFromNuGet(List<string> packageNameList)` to get packages to compare their versions.
23+
24+
#### Changed
25+
* `GetPackageFromNuGetAsync(string packageName)` method now has optional parameter of `includePrerelease` which is set to false to indicate if prerelease is included for search.
26+
* `GetPackagesFromNuGetAsync(List<string> packageNameList)` method now has optional parameter of `includePrerelease` which is set to false to indicate if prerelease is included for search.
27+
* `CheckVersionAsync(string path)` method now has optional parameter of `includePrerelease` which is set to false to indicate if prerelease is included for search.
28+
1929
### [1.1.0] (2024-06-24)
2030
#### Added
2131
* Override method of ToString() for `Package`. It displays package name and version.

NuGetVersionChecker/NuGetVersionChecker.csproj

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,22 @@
1111
<RepositoryType>git</RepositoryType>
1212
<PackageTags>version; version-checker; version-compare; NuGet; Nuget-Package; version-check; Dependency</PackageTags>
1313
<PackageReleaseNotes>
14-
v1.1.0
15-
* GetPackageFromNuGetAsync() and GetPackagesFromNuGetAsync() now uses package.Identity.Id to fill Package data instead of using requested Package name.
16-
* Package now has override ToString() method.
17-
* GetPackages(string path) now check if path is null or empty.
18-
* VersionCheckAsync(string path) now checks if path is null or empty.
19-
14+
v1.2.0
15+
PackageEqualityComparer added which is derived from IEqualityComparer.
16+
CheckVersionAsync() method is added to compare versions as a list of Package.
17+
GetPackageFromNuGetAsync() and GetPackagesFromNuGetAsync() method have now includePrerelease option parameter which is set false default to determine if prerelease packages are included during search from NuGet API.
2018
See changelog (https://github.com/meokullu/NuGetVersionChecker/blob/master/CHANGELOG.md)
2119
</PackageReleaseNotes>
22-
<AssemblyVersion>1.1.0</AssemblyVersion>
23-
<FileVersion>1.1.0</FileVersion>
20+
<AssemblyVersion>1.2.0</AssemblyVersion>
21+
<FileVersion>1.2.0</FileVersion>
2422
<Title>Nuget Version Checker</Title>
2523
<PackageReadmeFile>README.md</PackageReadmeFile>
2624
<PackageProjectUrl>https://meokullu.github.io/NuGetVersionChecker/</PackageProjectUrl>
2725
<RepositoryUrl>https://github.com/meokullu/NuGetVersionChecker</RepositoryUrl>
2826
<ApplicationIcon>Resources\icon256.ico</ApplicationIcon>
2927
<Copyright>Enes Okullu</Copyright>
3028
<PackageIcon>icon128.png</PackageIcon>
31-
<Version>1.1.0</Version>
29+
<Version>1.2.0</Version>
3230
<PackageLicenseFile>LICENSE</PackageLicenseFile>
3331
</PropertyGroup>
3432

@@ -41,6 +39,10 @@
4139
<WarningLevel>9999</WarningLevel>
4240
</PropertyGroup>
4341

42+
<ItemGroup>
43+
<Compile Remove="src\CompareVersion.cs" />
44+
</ItemGroup>
45+
4446
<ItemGroup>
4547
<Content Include="Resources\icon256.ico" />
4648
</ItemGroup>

NuGetVersionChecker/NugetVersionChecker - Backup.csproj

Lines changed: 0 additions & 26 deletions
This file was deleted.

NuGetVersionChecker/src/GetPackageFromNuGet.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,12 @@ public partial class NuGetVersionChecker
2626
/// Returns a package by making search on NuGet.
2727
/// </summary>
2828
/// <param name="packageName">Name of package.</param>
29+
/// <param name="includePrerelease">Include Prerelease version to compare versions.</param>
2930
/// <returns>Returns a package.</returns>
30-
public static async Task<Package> GetPackageFromNuGetAsync(string packageName)
31+
public static async Task<Package> GetPackageFromNuGetAsync(string packageName, bool includePrerelease = true)
3132
{
3233
PackageSearchResource resource = await s_repository.GetResourceAsync<PackageSearchResource>();
33-
SearchFilter searchFilter = new SearchFilter(includePrerelease: true);
34+
SearchFilter searchFilter = new SearchFilter(includePrerelease: includePrerelease);
3435

3536
// Making a search with taking one package.
3637
IEnumerable<IPackageSearchMetadata> searchResults = await resource.SearchAsync(
@@ -70,11 +71,12 @@ public static async Task<Package> GetPackageFromNuGetAsync(string packageName)
7071
/// Returns list of packages by making search on NuGet.
7172
/// </summary>
7273
/// <param name="packageNameList">List of package names.</param>
74+
/// <param name="includePrerelease">Include Prerelease version to compare versions.</param>
7375
/// <returns>List of packages.</returns>
74-
public static async Task<List<Package>> GetPackagesFromNuGetAsync(List<string> packageNameList)
76+
public static async Task<List<Package>> GetPackagesFromNuGetAsync(List<string> packageNameList, bool includePrerelease = true)
7577
{
7678
PackageSearchResource resource = await s_repository.GetResourceAsync<PackageSearchResource>();
77-
SearchFilter searchFilter = new SearchFilter(includePrerelease: true);
79+
SearchFilter searchFilter = new SearchFilter(includePrerelease: includePrerelease);
7880

7981
// Return value.
8082
List<Package> packageList = new List<Package>();

NuGetVersionChecker/src/Package.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using NuGet.Versioning;
22
using System;
3+
using System.Collections.Generic;
34

45
namespace NuGetVersionChecker
56
{
@@ -68,6 +69,49 @@ public override string ToString()
6869
{
6970
return $"{Name} {Version}";
7071
}
72+
73+
/// <summary>
74+
/// Package equality comparer derived from IEqualityComparer interface.
75+
/// </summary>
76+
public class PackageEqualityComparer : IEqualityComparer<Package>
77+
{
78+
/// <summary>
79+
/// Compares two Package based on their name and version.
80+
/// </summary>
81+
/// <param name="x">First package to compare.</param>
82+
/// <param name="y">Second package to compare.</param>
83+
/// <returns>Returns true if packages are same, returns false if packages are different or one of the given package is null.</returns>
84+
public bool Equals(Package x, Package y)
85+
{
86+
// Checking if either of package is null.
87+
if (x == null || y == null)
88+
{
89+
// Returning false to indicate at least one of packages is null.
90+
return false;
91+
}
92+
// Checking if two given package's property values are same.
93+
else if (x.Name == y.Name && x.Version == y.Version)
94+
{
95+
return true;
96+
}
97+
else
98+
{
99+
// Returning false to indicate packages are different.
100+
return false;
101+
}
102+
}
103+
104+
/// <summary>
105+
/// Returning hashcode with creating tuple of Package's name and version.
106+
/// </summary>
107+
/// <param name="obj">A package.</param>
108+
/// <returns>int value of hashcode.</returns>
109+
public int GetHashCode(Package obj)
110+
{
111+
// Returning hash code.
112+
return Tuple.Create(obj.Name, obj.Version).GetHashCode();
113+
}
114+
}
71115
}
72116
}
73117
}

NuGetVersionChecker/src/VersionChecker.cs

Lines changed: 63 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
using System.Collections.Generic;
2+
using System.Diagnostics;
23
using System.Linq;
34
using System.Threading.Tasks;
5+
using static NuGetVersionChecker.NuGetVersionChecker.Package;
46

57
namespace NuGetVersionChecker
68
{
@@ -10,8 +12,9 @@ public partial class NuGetVersionChecker
1012
/// Returns list of packages with their names, versions and availability to update.
1113
/// </summary>
1214
/// <param name="path">Path of .csproj file.</param>
15+
/// <param name="includePrerelease">Include Prerelease version to compare versions.</param>
1316
/// <returns>List of Packages.</returns>
14-
public static async Task<List<Package>> CheckVersionAsync(string path)
17+
public static async Task<List<Package>> CheckVersionAsync(string path, bool includePrerelease = false)
1518
{
1619
// Returning data which consisting packages.
1720
List<Package> packages = new List<Package>();
@@ -26,7 +29,9 @@ public static async Task<List<Package>> CheckVersionAsync(string path)
2629
List<Package> usedPackages = GetPackages(path);
2730

2831
// Get used packages info from NuGet.
29-
List<Package> nugetPackages = await GetPackagesFromNuGetAsync(usedPackages.Select(p => p.Name).ToList());
32+
List<Package> nugetPackages = await GetPackagesFromNuGetAsync(
33+
packageNameList: usedPackages.Select(p => p.Name).ToList(),
34+
includePrerelease: includePrerelease);
3035

3136
// Loop for packages
3237
foreach (Package package in usedPackages)
@@ -47,5 +52,61 @@ public static async Task<List<Package>> CheckVersionAsync(string path)
4752
// Returning list of packages.
4853
return packages;
4954
}
55+
56+
/// <summary>
57+
/// Returns list of packages with their names, versions and availability to update.
58+
/// </summary>
59+
/// <param name="pathList">List of package names.</param>
60+
/// <param name="includePrerelease">Include Prerelease version to compare versions.</param>
61+
/// <returns>List of Packages.</returns>
62+
public static async Task<List<Package>> CheckVersionAsync(List<string> pathList, bool includePrerelease = false)
63+
{
64+
// Returning data which consisting packages.
65+
List<Package> packages = new List<Package>();
66+
67+
if (pathList.Any(p => p == null))
68+
{
69+
return packages;
70+
}
71+
72+
// Get currently used packages.
73+
List<Package> usedPackages = new List<Package>();
74+
75+
// Loop for pathlist to fill used packages list.
76+
foreach (string path in pathList)
77+
{
78+
usedPackages.AddRange(GetPackages(path));
79+
}
80+
81+
// Instance of comparer.
82+
PackageEqualityComparer pec = new PackageEqualityComparer();
83+
84+
// Distinction of packages.
85+
IEnumerable<Package> disctinctUsedPackage = usedPackages.Distinct(comparer: pec);
86+
87+
// Get used packages info from NuGet.
88+
List<Package> nugetPackages = await GetPackagesFromNuGetAsync(
89+
packageNameList: disctinctUsedPackage.Select(p => p.Name).ToList(),
90+
includePrerelease: includePrerelease);
91+
92+
// Loop for packages
93+
foreach (Package package in usedPackages)
94+
{
95+
// Check if newer version is available on NuGet.
96+
if (disctinctUsedPackage.Where(p => p.Name == package.Name).Select(q => q.Version).FirstOrDefault() > package.Version)
97+
{
98+
// Package is available to update.
99+
packages.Add(new Package(package.Name, package.Version, updateAvailable: true));
100+
}
101+
else
102+
{
103+
// Package is up to date.
104+
packages.Add(new Package(package.Name, package.Version, updateAvailable: false));
105+
}
106+
}
107+
108+
// Returning list of packages.
109+
return disctinctUsedPackage.ToList();
110+
}
50111
}
51112
}

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Since there is no tracking mechanism that notifies users of package without manu
1313

1414
```
1515
// Path for .csporj file. Return list of `Package` that contains package names, versions and availability to update.
16-
CheckVersionAsync(string path);
16+
CheckVersionAsync(string path, bool includePrelease = false);
1717
```
1818

1919
```
@@ -23,12 +23,12 @@ GetPackages(string path);
2323

2424
```
2525
// packageName of the NuGet package. Returns `Package` that contains package name and its version.
26-
GetPackageFromNuGetAsync(string packageName);
26+
GetPackageFromNuGetAsync(string packageName, bool includePrerelease = false);
2727
```
2828

2929
```
3030
// packageNameList of the list of NuGet package names. Returns List of `Package` that contains packages name and their versions.
31-
GetPackagesFromNuGetAsync(List<string> packageNameList);
31+
GetPackagesFromNuGetAsync(List<string> packageNameList, bool includePrerelease = false);
3232
```
3333

3434
#### Console Application

0 commit comments

Comments
 (0)