From 09aee23370fc905a4f638021744210dbdf0262d9 Mon Sep 17 00:00:00 2001 From: Pavel Koneski Date: Sun, 14 Dec 2025 15:42:26 -0800 Subject: [PATCH 1/5] Support integer formatting with specifiers D and B --- src/GitVersion.Core/Formatting/NumericFormatter.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GitVersion.Core/Formatting/NumericFormatter.cs b/src/GitVersion.Core/Formatting/NumericFormatter.cs index 14b1f791a3..f575e32178 100644 --- a/src/GitVersion.Core/Formatting/NumericFormatter.cs +++ b/src/GitVersion.Core/Formatting/NumericFormatter.cs @@ -20,8 +20,8 @@ public override bool TryFormat(object? value, string format, CultureInfo culture return true; } - // Hexadecimal formatting - if (format.StartsWith("X", StringComparison.OrdinalIgnoreCase) && int.TryParse(s, NumberStyles.Integer, cultureInfo, out var hex)) + // Integer formatting with precision specifier + if ("BDX".Contains(char.ToUpperInvariant(format[0])) && int.TryParse(s, NumberStyles.Integer, cultureInfo, out var hex)) { result = hex.ToString(format, cultureInfo); return true; From 5a8d50e5a34a92bac28216877cdbb7b098d249e0 Mon Sep 17 00:00:00 2001 From: Pavel Koneski Date: Sun, 14 Dec 2025 16:41:10 -0800 Subject: [PATCH 2/5] Add tests --- .../Formatting/NumericFormatterTests.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/GitVersion.Core.Tests/Formatting/NumericFormatterTests.cs b/src/GitVersion.Core.Tests/Formatting/NumericFormatterTests.cs index 9b466ead53..e3cecaba18 100644 --- a/src/GitVersion.Core.Tests/Formatting/NumericFormatterTests.cs +++ b/src/GitVersion.Core.Tests/Formatting/NumericFormatterTests.cs @@ -1,4 +1,4 @@ -using GitVersion.Formatting; +using GitVersion.Formatting; namespace GitVersion.Tests.Formatting; @@ -21,6 +21,9 @@ public void TryFormat_NullValue_ReturnsFalse() [TestCase("1234.5678", "f2", "1234.57")] [TestCase("1234.5678", "f0", "1235")] [TestCase("1234.5678", "g", "1234.5678")] + [TestCase("1234", "d8", "00001234")] + [TestCase("1234", "x8", "000004d2")] + [TestCase("12", "b8", "00001100")] public void TryFormat_ValidFormats_ReturnsExpectedResult(string input, string format, string expected) { var sut = new NumericFormatter(); From 94fd78c42339c68b4d0b538cbfc3bc9073d5e166 Mon Sep 17 00:00:00 2001 From: Pavel Koneski Date: Sun, 14 Dec 2025 20:28:10 -0800 Subject: [PATCH 3/5] Update documentation --- docs/input/docs/reference/custom-formatting.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/input/docs/reference/custom-formatting.md b/docs/input/docs/reference/custom-formatting.md index c970fea342..a4bae75162 100644 --- a/docs/input/docs/reference/custom-formatting.md +++ b/docs/input/docs/reference/custom-formatting.md @@ -32,6 +32,7 @@ assembly-informational-format: "{Major}.{Minor}.{Patch:F2}-{PreReleaseLabel}" - `C` or `c` (Currency): `{Major:C}` → `"¤1.00"` - `P` or `p` (Percent): `{CommitsSinceVersionSource:P}` → `"12,345.60 %"` - `D` or `d` (Decimal): `{Major:D4}` → `"0001"` +- `B` or `b` (Binary): `{Minor:B4}` → `"0101"` - `X` or `x` (Hexadecimal): `{Patch:X}` → `"FF"` ### Date and Time Formatting From 0537a8adef8ae14d375a481f17c374d2f1626912 Mon Sep 17 00:00:00 2001 From: Pavel Koneski Date: Sun, 14 Dec 2025 21:00:17 -0800 Subject: [PATCH 4/5] Rename local variable hex to n --- src/GitVersion.Core/Formatting/NumericFormatter.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GitVersion.Core/Formatting/NumericFormatter.cs b/src/GitVersion.Core/Formatting/NumericFormatter.cs index f575e32178..797507522b 100644 --- a/src/GitVersion.Core/Formatting/NumericFormatter.cs +++ b/src/GitVersion.Core/Formatting/NumericFormatter.cs @@ -21,9 +21,9 @@ public override bool TryFormat(object? value, string format, CultureInfo culture } // Integer formatting with precision specifier - if ("BDX".Contains(char.ToUpperInvariant(format[0])) && int.TryParse(s, NumberStyles.Integer, cultureInfo, out var hex)) + if ("BDX".Contains(char.ToUpperInvariant(format[0])) && int.TryParse(s, NumberStyles.Integer, cultureInfo, out var n)) { - result = hex.ToString(format, cultureInfo); + result = n.ToString(format, cultureInfo); return true; } From 616c55214c9c13774159721c086763be2bda7bde Mon Sep 17 00:00:00 2001 From: Pavel Koneski Date: Mon, 15 Dec 2025 12:00:37 -0800 Subject: [PATCH 5/5] Rename local variables to more informative names --- .../Formatting/NumericFormatter.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/GitVersion.Core/Formatting/NumericFormatter.cs b/src/GitVersion.Core/Formatting/NumericFormatter.cs index 797507522b..bb5a296ccc 100644 --- a/src/GitVersion.Core/Formatting/NumericFormatter.cs +++ b/src/GitVersion.Core/Formatting/NumericFormatter.cs @@ -14,30 +14,30 @@ public override bool TryFormat(object? value, string format, CultureInfo culture return false; // Integer formatting - if (format.All(char.IsDigit) && int.TryParse(s, NumberStyles.Integer, cultureInfo, out var i)) + if (format.All(char.IsDigit) && int.TryParse(s, NumberStyles.Integer, cultureInfo, out var integerValue)) { - result = i.ToString(format, cultureInfo); + result = integerValue.ToString(format, cultureInfo); return true; } // Integer formatting with precision specifier - if ("BDX".Contains(char.ToUpperInvariant(format[0])) && int.TryParse(s, NumberStyles.Integer, cultureInfo, out var n)) + if ("BDX".Contains(char.ToUpperInvariant(format[0])) && int.TryParse(s, NumberStyles.Integer, cultureInfo, out var numericValue)) { - result = n.ToString(format, cultureInfo); + result = numericValue.ToString(format, cultureInfo); return true; } // Floating point formatting - if ("FEGNCP".Contains(char.ToUpperInvariant(format[0])) && double.TryParse(s, NumberStyles.Float | NumberStyles.AllowThousands, cultureInfo, out var d)) + if ("FEGNCP".Contains(char.ToUpperInvariant(format[0])) && double.TryParse(s, NumberStyles.Float | NumberStyles.AllowThousands, cultureInfo, out var floatValue)) { - result = d.ToString(format, cultureInfo); + result = floatValue.ToString(format, cultureInfo); return true; } // Decimal formatting - if (decimal.TryParse(s, NumberStyles.Any, cultureInfo, out var dec)) + if (decimal.TryParse(s, NumberStyles.Any, cultureInfo, out var decimalValue)) { - result = dec.ToString(format, cultureInfo); + result = decimalValue.ToString(format, cultureInfo); return true; }