Skip to content

Commit 7d4fd12

Browse files
committed
Merge pull request #189 from JakeGinnivan/BetterFeatureBranchSupport
Better feature branch support
2 parents 87c390b + 3a83e8c commit 7d4fd12

11 files changed

+90
-14
lines changed

AcceptanceTests/GitFlow/MetaDataByCommitFixture.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@ public void CanCorrectlyDetectCommitCountsAndReleaseDataWhenThatApplies()
4949
EnsureMetaDataMatch(f, "hotfix-1.3.1", "1.3.1-beta.1+1", r => (Commit)r.Tags["1.3.0"].Target);
5050

5151
ResetToK(f.Repository);
52-
EnsureMetaDataMatch(f, "feature", "1.4.0-unstable.0+2");
52+
EnsureMetaDataMatch(f, "feature", "1.4.0-feature+2");
5353

5454
ResetToJ(f.Repository);
55-
EnsureMetaDataMatch(f, "feature", "1.4.0-unstable.0+1");
55+
EnsureMetaDataMatch(f, "feature", "1.4.0-feature+1");
5656

5757
ResetToI(f.Repository);
5858
EnsureMetaDataMatch(f, "develop", "1.4.0.2-unstable");

GitVersionCore/ExtensionMethods.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public static void AppendLineFormat(this StringBuilder stringBuilder, string for
2929

3030
public static string TrimStart(this string value, string toTrim)
3131
{
32-
if (!value.StartsWith(toTrim))
32+
if (!value.StartsWith(toTrim, StringComparison.InvariantCultureIgnoreCase))
3333
{
3434
return value;
3535
}

GitVersionCore/GitFlow/BranchFinders/DevelopBasedVersionFinderBase.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,15 @@ protected SemanticVersion FindVersion(
2323
var numberOfCommitsOnBranchSinceCommit = NumberOfCommitsOnBranchSinceCommit(context, ancestor);
2424
var sha = context.CurrentBranch.Tip.Sha;
2525
var releaseDate = ReleaseDateFinder.Execute(context.Repository, sha, 0);
26+
var preReleaseTag = context.CurrentBranch.Name
27+
.TrimStart(branchType.ToString() + '-')
28+
.TrimStart(branchType.ToString() + '/');
2629
var semanticVersion = new SemanticVersion
2730
{
2831
Major = versionFromMaster.Major,
2932
Minor = versionFromMaster.Minor + 1,
3033
Patch = 0,
31-
PreReleaseTag = "unstable0",
34+
PreReleaseTag = preReleaseTag,
3235
BuildMetaData = new SemanticVersionBuildMetaData(
3336
numberOfCommitsOnBranchSinceCommit,
3437
context.CurrentBranch.Name, releaseDate)

GitVersionCore/SemanticVersionPreReleaseTag.cs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,14 +133,31 @@ public string ToString(string format, IFormatProvider formatProvider = null)
133133
case "t":
134134
return Number.HasValue ? string.Format("{0}.{1}", Name, Number) : Name;
135135
case "l":
136-
return Number.HasValue ? string.Format("{0}{1}", Name, Number) : Name;
136+
return Number.HasValue ? FormatLegacy(GetLegacyName(), Number.ToString()) : FormatLegacy(GetLegacyName());
137137
case "lp":
138-
return Number.HasValue ? string.Format("{0}{1}", Name, Number.Value.ToString("D4")) : Name;
138+
return Number.HasValue ? FormatLegacy(GetLegacyName(), Number.Value.ToString("D4")) : FormatLegacy(GetLegacyName());
139139
default:
140140
throw new ArgumentException("Unknown format", "format");
141141
}
142142
}
143143

144+
string FormatLegacy(string tag, string number = null)
145+
{
146+
var tagLength = tag.Length;
147+
var numberLength = number == null ? 0 : number.Length;
148+
149+
if (tagLength + numberLength > 20)
150+
return string.Format("{0}{1}", tag.Substring(0, 20 - numberLength), number);
151+
152+
return string.Format("{0}{1}", tag, number);
153+
}
154+
155+
string GetLegacyName()
156+
{
157+
var firstPart = Name.Split('_')[0];
158+
return firstPart.Replace("-", string.Empty).Replace(".", string.Empty);
159+
}
160+
144161
public bool HasTag()
145162
{
146163
return !string.IsNullOrEmpty(Name);

Tests/BranchFinders/FeatureBranchTests.Feature_branch_with_1_commit.approved.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
"Minor": 1,
44
"Patch": 0,
55
"PreReleaseTag": {
6-
"Name": "unstable",
7-
"Number": 0
6+
"Name": "featureWithOneCommit",
7+
"Number": null
88
},
99
"BuildMetaData": {
1010
"CommitsSinceTag": 1,

Tests/BranchFinders/FeatureBranchTests.Feature_branch_with_2_commits.approved.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
"Minor": 1,
44
"Patch": 0,
55
"PreReleaseTag": {
6-
"Name": "unstable",
7-
"Number": 0
6+
"Name": "featureWithOneCommit",
7+
"Number": null
88
},
99
"BuildMetaData": {
1010
"CommitsSinceTag": 2,

Tests/BranchFinders/FeatureBranchTests.Feature_branch_with_2_commits_but_building_an_commit.approved.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
"Minor": 1,
44
"Patch": 0,
55
"PreReleaseTag": {
6-
"Name": "unstable",
7-
"Number": 0
6+
"Name": "featureWithOneCommit",
7+
"Number": null
88
},
99
"BuildMetaData": {
1010
"CommitsSinceTag": 2,

Tests/GitFlow/GitFlowVersionFinderTests.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,31 @@ public void AFeatureBranchDoesNotRequireASpecificPrefix()
147147
}
148148
}
149149

150+
[Test]
151+
public void AFeatureBranchPrefixIsNotIncludedInTag()
152+
{
153+
var repoPath = Clone(ASBMTestRepoWorkingDirPath);
154+
using (var repo = new Repository(repoPath))
155+
{
156+
repo.Branches["develop"].ForceCheckout();
157+
158+
const string branchName = "feature/ABC-1234_SomeDescription";
159+
repo.Branches.Add(branchName, repo.Head.Tip).ForceCheckout();
160+
161+
AddOneCommitToHead(repo, "code");
162+
163+
var finder = new GitVersionFinder();
164+
165+
var versionAndBranch = finder.FindVersion(new GitVersionContext
166+
{
167+
Repository = repo,
168+
CurrentBranch = repo.Head,
169+
});
170+
171+
ObjectApprover.VerifyWithJson(versionAndBranch, Scrubbers.GuidAndDateScrubber);
172+
}
173+
}
174+
150175
[Test]
151176
public void AReleaseBranchIsRequiredToBranchOffOfDevelopBranch()
152177
{

Tests/GitFlow/GitVersionFinderTests.AFeatureBranchDoesNotRequireASpecificPrefix.approved.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
"Minor": 1,
44
"Patch": 0,
55
"PreReleaseTag": {
6-
"Name": "unstable",
7-
"Number": 0
6+
"Name": "every-feature-is-welcome",
7+
"Number": null
88
},
99
"BuildMetaData": {
1010
"CommitsSinceTag": 1,
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"Major": 1,
3+
"Minor": 1,
4+
"Patch": 0,
5+
"PreReleaseTag": {
6+
"Name": "ABC-1234_SomeDescription",
7+
"Number": null
8+
},
9+
"BuildMetaData": {
10+
"CommitsSinceTag": 1,
11+
"Branch": "feature/ABC-1234_SomeDescription",
12+
"ReleaseDate": {
13+
"OriginalDate": "<date replaced>",
14+
"OriginalCommitSha": "000000000000000000000000000000000000000",
15+
"Date": "<date replaced>",
16+
"CommitSha": "000000000000000000000000000000000000000"
17+
},
18+
"Sha": "000000000000000000000000000000000000000",
19+
"OtherMetaData": null
20+
}
21+
}

0 commit comments

Comments
 (0)