Skip to content

Commit 7766333

Browse files
committed
Finalizing the configuration of GitFlow and GitHubFlow workflow and align with the Mainline version strategy
1 parent 943fc4c commit 7766333

File tree

10 files changed

+106
-116
lines changed

10 files changed

+106
-116
lines changed

BREAKING_CHANGES.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
* The initialization wizard has been removed.
5757
* On the `develop`, `release` and `hotfix` branch the introduced branch related property `prevent-increment.when-current-commit-tagged` has been set to `false` to get the incremented instead of the tagged semantic version.
5858
* When setting the "ignore commits before" parameter to a future value, an exception will occur if no commits are found on the current branch. This behavior mimics that of an empty repository.
59+
* In the Git Flow workflows e.g. release/next yields to a patch version. If you have a tag 1.0.0 on main and branch from main to release/1.0.1 branch then the next version number will be 1.1.0. Because in the Git Flow workflow you have an addition IsRelease branch configuration with name hotfix this is expected. If you want the 1.0.1 as a next version you need to branch to hotfix/1.0.1 or hotfix/next and not release. In GitHub Flow workflow it is not a problem because there the increment is set to patch for release branch.
5960
6061
## v5.0.0
6162

src/GitVersion.Core.Tests/IntegrationTests/CompareTheDifferentWhenUsingTrunkBasedVersionStrategyWithGitFlow.cs

Lines changed: 8 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -616,29 +616,13 @@ public void EnsureFeatureDevelopmentWithDevelopBranchFast(bool useTrunkBased)
616616

617617
fixture.BranchTo("feature/foo");
618618

619-
if (useTrunkBased)
620-
{
621-
// ❔ expected: "0.1.0-foo.1+0"
622-
fixture.AssertFullSemver("0.0.2-foo.1+0", configuration);
623-
}
624-
else
625-
{
626-
// ✅ succeeds as expected
627-
fixture.AssertFullSemver("0.1.0-foo.1+0", configuration);
628-
}
619+
// ✅ succeeds as expected
620+
fixture.AssertFullSemver("0.1.0-foo.1+0", configuration);
629621

630622
fixture.MakeACommit("B");
631623

632-
if (useTrunkBased)
633-
{
634-
// ❔ expected: "0.1.0-foo.1+1"
635-
fixture.AssertFullSemver("0.0.2-foo.1+1", configuration);
636-
}
637-
else
638-
{
639-
// ✅ succeeds as expected
640-
fixture.AssertFullSemver("0.1.0-foo.1+1", configuration);
641-
}
624+
// ✅ succeeds as expected
625+
fixture.AssertFullSemver("0.1.0-foo.1+1", configuration);
642626

643627
fixture.ApplyTag("0.1.0-foo.1");
644628

@@ -946,31 +930,15 @@ public void EnsureBugFixWithDevelopBranchFast(bool useTrunkBased)
946930
fixture.BranchTo("pull/2/merge");
947931
fixture.MergeNoFF("hotfix/foo");
948932

949-
if (useTrunkBased)
950-
{
951-
// ❔ expected: "0.1.0-PullRequest2.4"
952-
fixture.AssertFullSemver("0.0.2-PullRequest2.4", configuration);
953-
}
954-
else
955-
{
956-
// ✅ succeeds as expected
957-
fixture.AssertFullSemver("0.1.0-PullRequest2.4", configuration);
958-
}
933+
// ✅ succeeds as expected
934+
fixture.AssertFullSemver("0.1.0-PullRequest2.4", configuration);
959935

960936
fixture.Checkout("main");
961937
fixture.BranchTo("pull/3/merge");
962938
fixture.MergeNoFF("hotfix/foo");
963939

964-
if (useTrunkBased)
965-
{
966-
// ✅ succeeds as expected
967-
fixture.AssertFullSemver("0.0.2-PullRequest3.4", configuration);
968-
}
969-
else
970-
{
971-
// ❔ expected: "0.0.2-PullRequest3.4"
972-
fixture.AssertFullSemver("0.1.0-PullRequest3.4", configuration);
973-
}
940+
// ❔ expected: "0.0.2-PullRequest3.4"
941+
fixture.AssertFullSemver("0.1.0-PullRequest3.4", configuration);
974942

975943
fixture.Checkout("hotfix/foo");
976944
fixture.MergeTo("main", removeBranchAfterMerging: true);
@@ -985,26 +953,6 @@ public void EnsureBugFixWithDevelopBranchFast(bool useTrunkBased)
985953
fixture.AssertFullSemver("0.0.3-1", configuration);
986954
}
987955

988-
[Test]
989-
public void JustATest()
990-
{
991-
var configuration = configurationBuilder.WithVersionStrategy(VersionStrategies.TrunkBased).Build();
992-
993-
using var fixture = new EmptyRepositoryFixture("main");
994-
995-
fixture.MakeACommit("A");
996-
997-
// ✅ succeeds as expected
998-
fixture.AssertFullSemver("0.0.1-1", configuration);
999-
1000-
fixture.ApplyTag("0.1.0");
1001-
1002-
for (int i = 0; i < 10; i++) fixture.MakeACommit();
1003-
1004-
// ✅ succeeds as expected
1005-
fixture.AssertFullSemver("0.1.10-1", configuration);
1006-
}
1007-
1008956
[TestCase(false)]
1009957
[TestCase(true)]
1010958
public void EnsureFeatureDevelopmentWithReleaseNextBranch(bool useTrunkBased)

src/GitVersion.Core/Git/ReferenceName.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public static bool TryParse([NotNullWhen(true)] out ReferenceName? value, string
5454
value = new(canonicalName);
5555
}
5656

57-
return value != null;
57+
return value is not null;
5858
}
5959

6060
public static ReferenceName FromBranchName(string branchName)
@@ -77,6 +77,15 @@ public static ReferenceName FromBranchName(string branchName)
7777
public override int GetHashCode() => equalityHelper.GetHashCode(this);
7878
public override string ToString() => Friendly;
7979

80+
public static bool operator ==(ReferenceName? left, ReferenceName? right)
81+
{
82+
if (ReferenceEquals(left, right)) return true;
83+
if (left is null || right is null) return false;
84+
return left.Equals(right);
85+
}
86+
87+
public static bool operator !=(ReferenceName? left, ReferenceName? right) => !(left == right);
88+
8089
public bool TryGetSemanticVersion([NotNullWhen(true)] out (SemanticVersion Value, string? Name) result,
8190
Regex versionPatternRegex,
8291
string? tagPrefix,

src/GitVersion.Core/MergeMessage.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public static bool TryParse(
100100
mergeMessage = null;
101101

102102
var mergedBranch = new MergeMessage(mergeCommit.Message, configuration).MergedBranch;
103-
var isReleaseBranch = mergedBranch != null && configuration.IsReleaseBranch(mergedBranch);
103+
var isReleaseBranch = mergedBranch is not null && configuration.IsReleaseBranch(mergedBranch);
104104
var isValidMergeCommit = mergeCommit.IsMergeCommit() || isReleaseBranch;
105105

106106
if (isValidMergeCommit)

src/GitVersion.Core/PublicAPI.Unshipped.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -769,6 +769,8 @@ static GitVersion.Git.BranchCommit.operator !=(GitVersion.Git.BranchCommit left,
769769
static GitVersion.Git.BranchCommit.operator ==(GitVersion.Git.BranchCommit left, GitVersion.Git.BranchCommit right) -> bool
770770
static GitVersion.Git.CommitExtensions.IsMergeCommit(this GitVersion.Git.ICommit! source) -> bool
771771
static GitVersion.Git.ReferenceName.FromBranchName(string! branchName) -> GitVersion.Git.ReferenceName!
772+
static GitVersion.Git.ReferenceName.operator !=(GitVersion.Git.ReferenceName? left, GitVersion.Git.ReferenceName? right) -> bool
773+
static GitVersion.Git.ReferenceName.operator ==(GitVersion.Git.ReferenceName? left, GitVersion.Git.ReferenceName? right) -> bool
772774
static GitVersion.Git.ReferenceName.Parse(string! canonicalName) -> GitVersion.Git.ReferenceName!
773775
static GitVersion.Git.ReferenceName.TryParse(out GitVersion.Git.ReferenceName? value, string! canonicalName) -> bool
774776
static GitVersion.Helpers.Disposable.Create(System.Action! disposer) -> System.IDisposable!

src/GitVersion.Core/VersionCalculation/TrunkBased/EnrichIncrement.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ public void Enrich(TrunkBasedIteration iteration, TrunkBasedCommit commit, Trunk
1111
{
1212
var effectiveConfiguration = commit.GetEffectiveConfiguration(context.Configuration);
1313
var incrementForcedByBranch = effectiveConfiguration.Increment.ToVersionField();
14-
var incrementForcedByCommit = GetIncrementForcedByCommit(context, commit.Value, effectiveConfiguration);
14+
var incrementForcedByCommit = commit.IsDummy
15+
? VersionField.None
16+
: GetIncrementForcedByCommit(context, commit.Value, effectiveConfiguration);
1517
commit.Increment = incrementForcedByCommit;
1618
context.Increment = context.Increment.Consolidate(incrementForcedByBranch, incrementForcedByCommit);
1719

src/GitVersion.Core/VersionCalculation/TrunkBased/NonTrunk/FirstCommitOnRelease.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public bool MatchPrecondition(TrunkBasedIteration iteration, TrunkBasedCommit co
2424
&& commit.GetEffectiveConfiguration(context.Configuration).IsReleaseBranch
2525
&& context.SemanticVersion is null
2626
&& (commit.Predecessor is null
27-
|| commit.Predecessor?.BranchName != commit.BranchName);
27+
|| commit.BranchName != commit.Predecessor?.BranchName);
2828

2929
public IEnumerable<IBaseVersionIncrement> GetIncrements(
3030
TrunkBasedIteration iteration, TrunkBasedCommit commit, TrunkBasedContext context)

src/GitVersion.Core/VersionCalculation/TrunkBased/TrunkBasedCommit.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ namespace GitVersion.VersionCalculation.TrunkBased;
1010
"HasSuccessor = {" + nameof(HasSuccessor) + "}, HasPredecessor = {" + nameof(HasPredecessor) + "}, " +
1111
"HasChildIteration = {" + nameof(HasChildIteration) + "}, Message = {" + nameof(Message) + @"} \}"
1212
)]
13-
internal record TrunkBasedCommit(TrunkBasedIteration Iteration, ICommit Value, ReferenceName BranchName, IBranchConfiguration Configuration)
13+
internal record TrunkBasedCommit(TrunkBasedIteration Iteration, ICommit? value, ReferenceName BranchName, IBranchConfiguration Configuration)
1414
{
1515
public bool IsPredecessorTheLastCommitOnTrunk(IGitVersionConfiguration configuration)
1616
=> !GetEffectiveConfiguration(configuration).IsMainBranch && Predecessor?.GetEffectiveConfiguration(configuration).IsMainBranch == true;
@@ -31,9 +31,12 @@ public bool IsPredecessorTheLastCommitOnTrunk(IGitVersionConfiguration configura
3131

3232
public TrunkBasedCommit? Predecessor { get; private set; }
3333

34-
public ICommit Value { get; } = Value.NotNull();
34+
public ICommit Value => IsDummy ? (Successor?.Value)! : value!;
3535

36-
public string Message => Value.Message;
36+
[MemberNotNullWhen(false, nameof(Value))]
37+
public bool IsDummy => value is null;
38+
39+
public string Message => IsDummy ? "<<DUMMY>>" : Value.Message;
3740

3841
public TrunkBasedIteration? ChildIteration { get; private set; }
3942

@@ -101,7 +104,7 @@ public void AddSemanticVersions(IEnumerable<SemanticVersion> values)
101104
public void AddChildIteration(TrunkBasedIteration iteration) => ChildIteration = iteration.NotNull();
102105

103106
public TrunkBasedCommit Append(
104-
ICommit value, ReferenceName branchName, IBranchConfiguration configuration)
107+
ICommit? value, ReferenceName branchName, IBranchConfiguration configuration)
105108
{
106109
if (HasPredecessor) throw new InvalidOperationException();
107110

src/GitVersion.Core/VersionCalculation/TrunkBased/TrunkBasedIteration.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,17 +63,21 @@ public TrunkBasedIteration(string id, ReferenceName branchName, IBranchConfigura
6363
}
6464

6565
public TrunkBasedCommit CreateCommit(
66-
ICommit value, ReferenceName branchName, IBranchConfiguration configuration)
66+
ICommit? value, ReferenceName branchName, IBranchConfiguration configuration)
6767
{
6868
TrunkBasedCommit commit;
6969
if (commits.Count != 0)
70-
commit = commits.Peek().Append(value, branchName, configuration); //, increment);
70+
commit = commits.Peek().Append(value, branchName, configuration);
7171
else
7272
{
73-
commit = new TrunkBasedCommit(this, value, branchName, configuration); //, increment);
73+
commit = new TrunkBasedCommit(this, value, branchName, configuration);
7474
}
7575
commits.Push(commit);
76-
commitLookup.Add(value, commit);
76+
77+
if (value is not null)
78+
{
79+
commitLookup.Add(value, commit);
80+
}
7781

7882
return commit;
7983
}

0 commit comments

Comments
 (0)