Skip to content

Commit b3b1c6d

Browse files
committed
Bump develop when release branch is created
- Fixed an commit counting bug - Based on discussion at #632 - Fixes #695 - Updated related docs
1 parent 3a2db67 commit b3b1c6d

18 files changed

+196
-78
lines changed

docs/configuration.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ The global configuration options are:
4242

4343
- **`commit-message-incrementing:`** Sets whether it should be possible to increment the version with special syntax in the commit message. See the `*-version-bump-message` options above for details on the syntax. Default set to `Enabled`; set to `Disabled` to disable.
4444

45+
- **`is-develop:`** Indicates this branch config represents develop in GitFlow
46+
47+
**`is-release-branch:`** Indicates this branch config represents a release branch in GitFlow
48+
4549
## Branch configuration
4650

4751
Then we have branch specific configuration, which looks something like this:
Loading
Loading

src/GitVersionCore.Tests/ConfigProviderTests.CanWriteOutEffectiveConfiguration.approved.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ branches:
2222
increment: Patch
2323
prevent-increment-of-merged-branch-version: true
2424
track-merge-target: false
25+
is-release-branch: true
2526
features?[/-]:
2627
mode: ContinuousDelivery
2728
tag: useBranchName
@@ -53,3 +54,4 @@ branches:
5354
increment: Minor
5455
prevent-increment-of-merged-branch-version: false
5556
track-merge-target: true
57+
is-develop: true

src/GitVersionCore.Tests/IntegrationTests/DevelopScenarios.cs

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,11 @@ public void CanChangeDevelopTagViaConfig()
6161
{
6262
Branches =
6363
{
64-
{"dev(elop)?(ment)?$", new BranchConfig
6564
{
66-
Tag = "alpha"
67-
}
65+
"dev(elop)?(ment)?$", new BranchConfig
66+
{
67+
Tag = "alpha"
68+
}
6869
}
6970
}
7071
};
@@ -116,7 +117,7 @@ public void MergingReleaseBranchBackIntoDevelopWithMergingToMaster_DoesBumpDevel
116117

117118
fixture.Repository.Checkout("develop");
118119
fixture.Repository.MergeNoFF("release-2.0.0", Generate.SignatureNow());
119-
fixture.AssertFullSemver("2.1.0-unstable.0");
120+
fixture.AssertFullSemver("2.1.0-unstable.2");
120121
}
121122
}
122123

@@ -157,4 +158,27 @@ public void WhenDevelopBranchedFromMasterDetachedHead_MinorIsIncreased()
157158
fixture.AssertFullSemver("1.1.0-unstable.1");
158159
}
159160
}
161+
162+
[Test]
163+
public void InheritVersionFromReleaseBranch()
164+
{
165+
using (var fixture = new EmptyRepositoryFixture(new Config()))
166+
{
167+
fixture.MakeATaggedCommit("1.0.0");
168+
fixture.BranchTo("develop");
169+
fixture.MakeACommit();
170+
fixture.BranchTo("release/2.0.0");
171+
fixture.MakeACommit();
172+
fixture.MakeACommit();
173+
fixture.Checkout("develop");
174+
fixture.AssertFullSemver("2.1.0-unstable.0");
175+
fixture.MakeACommit();
176+
fixture.AssertFullSemver("2.1.0-unstable.1");
177+
fixture.MergeNoFF("release/2.0.0");
178+
fixture.AssertFullSemver("2.1.0-unstable.4");
179+
fixture.BranchTo("feature/MyFeature");
180+
fixture.MakeACommit();
181+
fixture.AssertFullSemver("2.1.0-MyFeature.1+1");
182+
}
183+
}
160184
}

src/GitVersionCore.Tests/IntegrationTests/DocumentationSamples.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ public void GitFlowMinorRelease()
129129
// Make another commit on develop
130130
fixture.Checkout("develop");
131131
fixture.MakeACommit();
132-
fixture.AssertFullSemver("1.3.0-unstable.2");
132+
fixture.AssertFullSemver("1.4.0-unstable.1");
133133

134134
// Make a commit to release-1.3.0
135135
fixture.Checkout("release/1.3.0");
@@ -158,7 +158,7 @@ public void GitFlowMinorRelease()
158158

159159
// Not 0 for commit count as we can't know the increment rules of the merged branch
160160
fixture.Checkout("develop");
161-
fixture.AssertFullSemver("1.4.0-unstable.2");
161+
fixture.AssertFullSemver("1.4.0-unstable.4");
162162
}
163163
}
164164

@@ -185,7 +185,7 @@ public void GitFlowMajorRelease()
185185
// Make another commit on develop
186186
fixture.Checkout("develop");
187187
fixture.MakeACommit();
188-
fixture.AssertFullSemver("1.4.0-unstable.2");
188+
fixture.AssertFullSemver("2.1.0-unstable.1");
189189

190190
// Make a commit to release-2.0.0
191191
fixture.Checkout("release/2.0.0");
@@ -215,7 +215,7 @@ public void GitFlowMajorRelease()
215215

216216
// Not 0 for commit count as we can't know the increment rules of the merged branch
217217
fixture.Checkout("develop");
218-
fixture.AssertFullSemver("2.1.0-unstable.2");
218+
fixture.AssertFullSemver("2.1.0-unstable.4");
219219
}
220220
}
221221

src/GitVersionCore.Tests/IntegrationTests/ReleaseBranchScenarios.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public void NoMergeBacksToDevelopInCaseThereAreChangesInReleaseBranch()
4848
// Merge to develop
4949
fixture.Repository.Checkout("develop");
5050
fixture.Repository.MergeNoFF("release/1.0.0");
51-
fixture.AssertFullSemver("1.1.0-unstable.1");
51+
fixture.AssertFullSemver("1.1.0-unstable.2");
5252

5353
fixture.Repository.MakeACommit();
5454
fixture.Repository.Branches.Remove(releaseBranch);
@@ -226,7 +226,7 @@ public void WhenReleaseBranchIsMergedIntoDevelopHighestVersionIsTakenWithIt()
226226
fixture.Repository.Checkout("develop");
227227
fixture.Repository.MergeNoFF("release-1.0.0", Generate.SignatureNow());
228228

229-
fixture.AssertFullSemver("2.1.0-unstable.5");
229+
fixture.AssertFullSemver("2.1.0-unstable.6");
230230
}
231231
}
232232

src/GitVersionCore.Tests/TestEffectiveConfiguration.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,15 @@ public TestEffectiveConfiguration(
2222
CommitMessageIncrementMode commitMessageMode = CommitMessageIncrementMode.Enabled,
2323
int legacySemVerPadding = 4,
2424
int buildMetaDataPadding = 4,
25-
int commitsSinceVersionSourcePadding = 4) :
25+
int commitsSinceVersionSourcePadding = 4,
26+
bool isDevelop = false,
27+
bool isRelease = false) :
2628
base(assemblyVersioningScheme, assemblyInformationalFormat, versioningMode, gitTagPrefix, tag, nextVersion, IncrementStrategy.Patch,
2729
branchPrefixToTrim, preventIncrementForMergedBranchVersion, tagNumberPattern, continuousDeploymentFallbackTag,
2830
trackMergeTarget,
2931
majorMessage, minorMessage, patchMessage,
30-
commitMessageMode, legacySemVerPadding, buildMetaDataPadding, commitsSinceVersionSourcePadding)
32+
commitMessageMode, legacySemVerPadding, buildMetaDataPadding, commitsSinceVersionSourcePadding,
33+
isDevelop, isRelease)
3134
{
3235
}
3336
}

src/GitVersionCore/Configuration/BranchConfig.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,5 +42,11 @@ public BranchConfig(BranchConfig branchConfiguration)
4242

4343
[YamlMember(Alias = "commit-message-incrementing")]
4444
public CommitMessageIncrementMode? CommitMessageIncrementing { get; set; }
45+
46+
[YamlMember(Alias = "is-develop")]
47+
public bool IsDevelop { get; set; }
48+
49+
[YamlMember(Alias = "is-release-branch")]
50+
public bool IsReleaseBranch { get; set; }
4551
}
4652
}

src/GitVersionCore/Configuration/ConfigurationProvider.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public static void ApplyDefaultsTo(Config config)
3939
var configBranches = config.Branches.ToList();
4040

4141
ApplyBranchDefaults(config, GetOrCreateBranchDefaults(config, "master"), defaultTag: string.Empty, defaultPreventIncrement: true);
42-
ApplyBranchDefaults(config, GetOrCreateBranchDefaults(config, "releases?[/-]"), defaultTag: "beta", defaultPreventIncrement: true);
42+
ApplyBranchDefaults(config, GetOrCreateBranchDefaults(config, "releases?[/-]"), defaultTag: "beta", defaultPreventIncrement: true, isReleaseBranch: true);
4343
ApplyBranchDefaults(config, GetOrCreateBranchDefaults(config, "features?[/-]"), defaultIncrementStrategy: IncrementStrategy.Inherit);
4444
ApplyBranchDefaults(config, GetOrCreateBranchDefaults(config, @"(pull|pull\-requests|pr)[/-]"),
4545
defaultTag: "PullRequest",
@@ -51,7 +51,8 @@ public static void ApplyDefaultsTo(Config config)
5151
defaultTag: "unstable",
5252
defaultIncrementStrategy: IncrementStrategy.Minor,
5353
defaultVersioningMode: VersioningMode.ContinuousDeployment,
54-
defaultTrackMergeTarget: true);
54+
defaultTrackMergeTarget: true,
55+
isDevelop: true);
5556

5657
// Any user defined branches should have other values defaulted after known branches filled in
5758
// This allows users to override one value of
@@ -107,14 +108,18 @@ public static void ApplyBranchDefaults(Config config,
107108
bool defaultPreventIncrement = false,
108109
VersioningMode? defaultVersioningMode = null, // Looked up from main config
109110
bool defaultTrackMergeTarget = false,
110-
string defaultTagNumberPattern = null)
111+
string defaultTagNumberPattern = null,
112+
bool isDevelop = false,
113+
bool isReleaseBranch = false)
111114
{
112115
branchConfig.Tag = branchConfig.Tag ?? defaultTag;
113116
branchConfig.TagNumberPattern = branchConfig.TagNumberPattern ?? defaultTagNumberPattern;
114117
branchConfig.Increment = branchConfig.Increment ?? defaultIncrementStrategy;
115118
branchConfig.PreventIncrementOfMergedBranchVersion = branchConfig.PreventIncrementOfMergedBranchVersion ?? defaultPreventIncrement;
116119
branchConfig.TrackMergeTarget = branchConfig.TrackMergeTarget ?? defaultTrackMergeTarget;
117120
branchConfig.VersioningMode = branchConfig.VersioningMode ?? defaultVersioningMode ?? config.VersioningMode;
121+
branchConfig.IsDevelop = isDevelop;
122+
branchConfig.IsReleaseBranch = isReleaseBranch;
118123
}
119124

120125
static Config ReadConfig(string workingDirectory, IFileSystem fileSystem)

src/GitVersionCore/EffectiveConfiguration.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@ public EffectiveConfiguration(
2121
CommitMessageIncrementMode commitMessageIncrementing,
2222
int legacySemVerPaddding,
2323
int buildMetaDataPadding,
24-
int commitsSinceVersionSourcePadding
25-
)
24+
int commitsSinceVersionSourcePadding,
25+
bool isCurrentBranchDevelop,
26+
bool isCurrentBranchRelease)
2627
{
2728
AssemblyVersioningScheme = assemblyVersioningScheme;
2829
AssemblyInformationalFormat = assemblyInformationalFormat;
@@ -43,8 +44,13 @@ int commitsSinceVersionSourcePadding
4344
LegacySemVerPadding = legacySemVerPaddding;
4445
BuildMetaDataPadding = buildMetaDataPadding;
4546
CommitsSinceVersionSourcePadding = commitsSinceVersionSourcePadding;
47+
IsCurrentBranchDevelop = isCurrentBranchDevelop;
48+
IsCurrentBranchRelease = isCurrentBranchRelease;
4649
}
4750

51+
public bool IsCurrentBranchDevelop { get; private set; }
52+
public bool IsCurrentBranchRelease { get; private set; }
53+
4854
public VersioningMode VersioningMode { get; private set; }
4955

5056
public AssemblyVersioningScheme AssemblyVersioningScheme { get; private set; }

src/GitVersionCore/GitVersionContext.cs

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
/// </summary>
1010
public class GitVersionContext
1111
{
12-
readonly Config configuration;
13-
1412
public GitVersionContext(IRepository repository, Config configuration, bool isForTrackingBranchOnly = true, string commitId = null)
1513
: this(repository, repository.Head, configuration, isForTrackingBranchOnly, commitId)
1614
{
@@ -19,7 +17,7 @@ public GitVersionContext(IRepository repository, Config configuration, bool isFo
1917
public GitVersionContext(IRepository repository, Branch currentBranch, Config configuration, bool onlyEvaluateTrackedBranches = true, string commitId = null)
2018
{
2119
Repository = repository;
22-
this.configuration = configuration;
20+
FullConfiguration = configuration;
2321
OnlyEvaluateTrackedBranches = onlyEvaluateTrackedBranches;
2422

2523
if (currentBranch == null)
@@ -69,17 +67,23 @@ public GitVersionContext(IRepository repository, Branch currentBranch, Config co
6967
IsCurrentCommitTagged = CurrentCommitTaggedVersion != null;
7068
}
7169

70+
/// <summary>
71+
/// Contains the raw configuration, use Configuration for specific config based on the current GitVersion context.
72+
/// </summary>
73+
public Config FullConfiguration { get; private set; }
74+
7275
public SemanticVersion CurrentCommitTaggedVersion { get; private set; }
7376
public bool OnlyEvaluateTrackedBranches { get; private set; }
7477
public EffectiveConfiguration Configuration { get; private set; }
78+
7579
public IRepository Repository { get; private set; }
7680
public Branch CurrentBranch { get; private set; }
7781
public Commit CurrentCommit { get; private set; }
7882
public bool IsCurrentCommitTagged { get; private set; }
7983

8084
void CalculateEffectiveConfiguration()
8185
{
82-
var currentBranchConfig = BranchConfigurationCalculator.GetBranchConfiguration(CurrentCommit, Repository, OnlyEvaluateTrackedBranches, configuration, CurrentBranch);
86+
var currentBranchConfig = BranchConfigurationCalculator.GetBranchConfiguration(CurrentCommit, Repository, OnlyEvaluateTrackedBranches, FullConfiguration, CurrentBranch);
8387

8488
if (!currentBranchConfig.Value.VersioningMode.HasValue)
8589
throw new Exception(string.Format("Configuration value for 'Versioning mode' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Key));
@@ -89,9 +93,9 @@ void CalculateEffectiveConfiguration()
8993
throw new Exception(string.Format("Configuration value for 'PreventIncrementOfMergedBranchVersion' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Key));
9094
if (!currentBranchConfig.Value.TrackMergeTarget.HasValue)
9195
throw new Exception(string.Format("Configuration value for 'TrackMergeTarget' for branch {0} has no value. (this should not happen, please report an issue)", currentBranchConfig.Key));
92-
if (!configuration.AssemblyVersioningScheme.HasValue)
96+
if (!FullConfiguration.AssemblyVersioningScheme.HasValue)
9397
throw new Exception("Configuration value for 'AssemblyVersioningScheme' has no value. (this should not happen, please report an issue)");
94-
if (!configuration.CommitMessageIncrementing.HasValue)
98+
if (!FullConfiguration.CommitMessageIncrementing.HasValue)
9599
throw new Exception("Configuration value for 'CommitMessageIncrementing' has no value. (this should not happen, please report an issue)");
96100

97101
var versioningMode = currentBranchConfig.Value.VersioningMode.Value;
@@ -101,27 +105,29 @@ void CalculateEffectiveConfiguration()
101105
var preventIncrementForMergedBranchVersion = currentBranchConfig.Value.PreventIncrementOfMergedBranchVersion.Value;
102106
var trackMergeTarget = currentBranchConfig.Value.TrackMergeTarget.Value;
103107

104-
var nextVersion = configuration.NextVersion;
105-
var assemblyVersioningScheme = configuration.AssemblyVersioningScheme.Value;
106-
var assemblyInformationalFormat = configuration.AssemblyInformationalFormat;
107-
var gitTagPrefix = configuration.TagPrefix;
108-
var majorMessage = configuration.MajorVersionBumpMessage;
109-
var minorMessage = configuration.MinorVersionBumpMessage;
110-
var patchMessage = configuration.PatchVersionBumpMessage;
108+
var nextVersion = FullConfiguration.NextVersion;
109+
var assemblyVersioningScheme = FullConfiguration.AssemblyVersioningScheme.Value;
110+
var assemblyInformationalFormat = FullConfiguration.AssemblyInformationalFormat;
111+
var gitTagPrefix = FullConfiguration.TagPrefix;
112+
var majorMessage = FullConfiguration.MajorVersionBumpMessage;
113+
var minorMessage = FullConfiguration.MinorVersionBumpMessage;
114+
var patchMessage = FullConfiguration.PatchVersionBumpMessage;
111115

112-
var commitMessageVersionBump = currentBranchConfig.Value.CommitMessageIncrementing ?? configuration.CommitMessageIncrementing.Value;
116+
var commitMessageVersionBump = currentBranchConfig.Value.CommitMessageIncrementing ?? FullConfiguration.CommitMessageIncrementing.Value;
113117

114118
Configuration = new EffectiveConfiguration(
115119
assemblyVersioningScheme, assemblyInformationalFormat, versioningMode, gitTagPrefix,
116120
tag, nextVersion, incrementStrategy, currentBranchConfig.Key,
117121
preventIncrementForMergedBranchVersion,
118-
tagNumberPattern, configuration.ContinuousDeploymentFallbackTag,
122+
tagNumberPattern, FullConfiguration.ContinuousDeploymentFallbackTag,
119123
trackMergeTarget,
120124
majorMessage, minorMessage, patchMessage,
121125
commitMessageVersionBump,
122-
configuration.LegacySemVerPadding.Value,
123-
configuration.BuildMetaDataPadding.Value,
124-
configuration.CommitsSinceVersionSourcePadding.Value);
126+
FullConfiguration.LegacySemVerPadding.Value,
127+
FullConfiguration.BuildMetaDataPadding.Value,
128+
FullConfiguration.CommitsSinceVersionSourcePadding.Value,
129+
currentBranchConfig.Value.IsDevelop,
130+
currentBranchConfig.Value.IsReleaseBranch);
125131
}
126132
}
127133
}

src/GitVersionCore/GitVersionCore.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@
130130
<Compile Include="VersionCalculation\BaseVersionCalculators\MergeMessageBaseVersionStrategy.cs" />
131131
<Compile Include="VersionCalculation\BaseVersionCalculators\VersionInBranchBaseVersionStrategy.cs" />
132132
<Compile Include="VersionCalculation\BaseVersionStrategy.cs" />
133+
<Compile Include="VersionCalculation\DevelopVersionStrategy.cs" />
133134
<Compile Include="VersionCalculation\FallbackBaseVersionStrategy.cs" />
134135
<Compile Include="VersionCalculation\IBaseVersionCalculator.cs" />
135136
<Compile Include="VersionCalculation\IMetaDataCalculator.cs" />

0 commit comments

Comments
 (0)