Skip to content

Commit 4b6b1af

Browse files
Show more helpful message when package version parsing fails
1 parent 51377ab commit 4b6b1af

File tree

6 files changed

+111
-29
lines changed

6 files changed

+111
-29
lines changed

src/LibYear.Core/FileTypes/XmlProjectFile.cs

+11-2
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,19 @@ public string Update(IEnumerable<Result> results)
3939
return _xmlContents.ToString();
4040
}
4141

42-
private static PackageVersion? ParseCurrentVersion(XElement element, string versionAttributeName)
42+
private PackageVersion? ParseCurrentVersion(XElement element, string versionAttributeName)
4343
{
4444
var version = element.Attribute(versionAttributeName)?.Value ?? element.Element(versionAttributeName)?.Value ?? string.Empty;
45-
return !string.IsNullOrEmpty(version) ? new PackageVersion(version) : null;
45+
try
46+
{
47+
return !string.IsNullOrEmpty(version)
48+
? new PackageVersion(version)
49+
: null;
50+
}
51+
catch (Exception e)
52+
{
53+
throw new ArgumentException($"Could not parse version {version} of {element} in {FileName}", e);
54+
}
4655
}
4756

4857
private void UpdateElement(XElement element, string latestVersion)

src/LibYear.Core/PackageVersion.cs

+8-27
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ public PackageVersion(string version)
1313
{
1414
IsWildcard = true;
1515
}
16-
1716
}
1817

1918
public PackageVersion(NuGetVersion? version)
@@ -31,38 +30,20 @@ public PackageVersion(int major, int minor, int patch, int revision)
3130
{
3231
}
3332

34-
private new static PackageVersion? Parse(string version)
35-
{
36-
if (version.Equals("*"))
37-
{
38-
return new PackageVersion(0, 0, 0);
39-
}
40-
41-
try
42-
{
43-
var nuGetVersion = new NuGetVersion(version);
44-
return new PackageVersion(nuGetVersion);
45-
}
46-
catch
47-
{
48-
return null;
49-
}
50-
}
33+
private new static PackageVersion Parse(string version)
34+
=> version.Equals("*")
35+
? new PackageVersion(0, 0, 0)
36+
: new PackageVersion(new NuGetVersion(version));
5137

5238
public override string ToString()
53-
{
54-
if (string.IsNullOrEmpty(OriginalVersion) || IsSemVer2)
55-
{
56-
return ToString("N", VersionFormatter.Instance);
57-
}
58-
59-
return OriginalVersion;
60-
}
39+
=> string.IsNullOrEmpty(OriginalVersion) || IsSemVer2
40+
? ToString("N", VersionFormatter.Instance)
41+
: OriginalVersion;
6142

6243
public override string ToString(string format, IFormatProvider? formatProvider)
6344
{
6445
if (formatProvider == null
65-
|| !TryFormatter(format, formatProvider, out var formattedString))
46+
|| !TryFormatter(format, formatProvider, out var formattedString))
6647
{
6748
formattedString = ToString();
6849
}

test/LibYear.Core.Tests/FileTypes/CsProjFileTests.cs

+23
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,27 @@ public async Task CanUpdateCsProjFile()
5353
Assert.Null(newFile.Packages["test6"]);
5454
Assert.True(newFile.Packages["test7"]!.IsWildcard);
5555
}
56+
57+
[Fact]
58+
public async Task InvalidVersionShowsInfo()
59+
{
60+
//arrange
61+
var filename = Path.Combine("FileTypes", "project.csproj");
62+
var contents = await File.ReadAllTextAsync(filename);
63+
var newContents = contents.Replace("0.2.0", "0.2.x");
64+
65+
try
66+
{
67+
//act
68+
_ = new CsProjFile(filename, newContents);
69+
Assert.False(true);
70+
}
71+
catch (Exception e)
72+
{
73+
//assert
74+
Assert.Contains("0.2.x", e.Message);
75+
Assert.Contains("test2", e.Message);
76+
Assert.Contains("project.csproj", e.Message);
77+
}
78+
}
5679
}

test/LibYear.Core.Tests/FileTypes/DirectoryBuildPropsTests.cs

+23
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,27 @@ public async Task CanUpdateDirectoryBuildPropsFile()
4242
Assert.Equal("2.3.4", newFile.Packages.Skip(1).First().Value!.ToString());
4343
Assert.Equal("3.4.5", newFile.Packages.Skip(2).First().Value!.ToString());
4444
}
45+
46+
[Fact]
47+
public async Task InvalidVersionShowsInfo()
48+
{
49+
//arrange
50+
var filename = Path.Combine("FileTypes", "Directory.Build.props");
51+
var contents = await File.ReadAllTextAsync(filename);
52+
var newContents = contents.Replace("0.2.0", "0.2.x");
53+
54+
try
55+
{
56+
//act
57+
_ = new DirectoryBuildPropsFile(filename, newContents);
58+
Assert.False(true);
59+
}
60+
catch (Exception e)
61+
{
62+
//assert
63+
Assert.Contains("0.2.x", e.Message);
64+
Assert.Contains("test2", e.Message);
65+
Assert.Contains("Directory.Build.props", e.Message);
66+
}
67+
}
4568
}

test/LibYear.Core.Tests/FileTypes/DirectoryBuildTargetsTests.cs

+23
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,27 @@ public async Task CanUpdateDirectoryTargetsFile()
4242
Assert.Equal("2.3.4", newFile.Packages.Skip(1).First().Value!.ToString());
4343
Assert.Equal("3.4.5", newFile.Packages.Skip(2).First().Value!.ToString());
4444
}
45+
46+
[Fact]
47+
public async Task InvalidVersionShowsInfo()
48+
{
49+
//arrange
50+
var filename = Path.Combine("FileTypes", "Directory.Build.targets");
51+
var contents = await File.ReadAllTextAsync(filename);
52+
var newContents = contents.Replace("0.2.0", "0.2.x");
53+
54+
try
55+
{
56+
//act
57+
_ = new DirectoryBuildTargetsFile(filename, newContents);
58+
Assert.False(true);
59+
}
60+
catch (Exception e)
61+
{
62+
//assert
63+
Assert.Contains("0.2.x", e.Message);
64+
Assert.Contains("test2", e.Message);
65+
Assert.Contains("Directory.Build.targets", e.Message);
66+
}
67+
}
4568
}

test/LibYear.Core.Tests/FileTypes/PackagesConfigFileTests.cs

+23
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,27 @@ public async Task CanUpdatePackagesConfigFile()
4242
Assert.Equal("2.3.4", newFile.Packages.Skip(1).First().Value!.ToString());
4343
Assert.Equal("3.4.5", newFile.Packages.Skip(2).First().Value!.ToString());
4444
}
45+
46+
[Fact]
47+
public async Task InvalidVersionShowsInfo()
48+
{
49+
//arrange
50+
var filename = Path.Combine("FileTypes", "packages.config");
51+
var contents = await File.ReadAllTextAsync(filename);
52+
var newContents = contents.Replace("0.2.0", "0.2.x");
53+
54+
try
55+
{
56+
//act
57+
_ = new PackagesConfigFile(filename, newContents);
58+
Assert.False(true);
59+
}
60+
catch (Exception e)
61+
{
62+
//assert
63+
Assert.Contains("0.2.x", e.Message);
64+
Assert.Contains("test2", e.Message);
65+
Assert.Contains("packages.config", e.Message);
66+
}
67+
}
4568
}

0 commit comments

Comments
 (0)