1
+ namespace GitVersionCore . Tests
2
+ {
3
+ using System ;
4
+ using GitTools ;
5
+ using GitTools . Testing ;
6
+ using GitVersion ;
7
+ using NUnit . Framework ;
8
+ using Shouldly ;
9
+
10
+ [ TestFixture ]
11
+ public class GitRepoMetadataProviderTests
12
+ {
13
+ [ Test ]
14
+ public void FindsCorrectMergeBaseForForwardMerge ( )
15
+ {
16
+ //*9dfb8b4 49 minutes ago(develop)
17
+ //*54f21b2 53 minutes ago
18
+ // |\
19
+ // | | *a219831 51 minutes ago(HEAD -> release-2.0.0)
20
+ // | |/
21
+ // | *4441531 54 minutes ago
22
+ // | *89840df 56 minutes ago
23
+ // |/
24
+ //*91bf945 58 minutes ago(master)
25
+ using ( var fixture = new EmptyRepositoryFixture ( ) )
26
+ {
27
+ fixture . MakeACommit ( "initial" ) ;
28
+ fixture . BranchTo ( "develop" ) ;
29
+ var expectedReleaseMergeBase = fixture . Repository . Head . Tip ;
30
+
31
+ // Create release from develop
32
+ fixture . BranchTo ( "release-2.0.0" ) ;
33
+
34
+ // Make some commits on release
35
+ fixture . MakeACommit ( "release 1" ) ;
36
+ fixture . MakeACommit ( "release 2" ) ;
37
+ var expectedDevelopMergeBase = fixture . Repository . Head . Tip ;
38
+
39
+ // First forward merge release to develop
40
+ fixture . Checkout ( "develop" ) ;
41
+ fixture . MergeNoFF ( "release-2.0.0" ) ;
42
+
43
+ // Make some new commit on release
44
+ fixture . Checkout ( "release-2.0.0" ) ;
45
+ fixture . MakeACommit ( "release 3 - after first merge" ) ;
46
+
47
+ // Make new commit on develop
48
+ fixture . Checkout ( "develop" ) ;
49
+
50
+ // Checkout to release (no new commits)
51
+ fixture . Checkout ( "release-2.0.0" ) ;
52
+
53
+ var develop = fixture . Repository . FindBranch ( "develop" ) ;
54
+ var release = fixture . Repository . FindBranch ( "release-2.0.0" ) ;
55
+ var releaseBranchMergeBase = new GitRepoMetadataProvider ( fixture . Repository )
56
+ . FindMergeBase ( release , develop ) ;
57
+
58
+ var developMergeBase = new GitRepoMetadataProvider ( fixture . Repository )
59
+ . FindMergeBase ( develop , release ) ;
60
+
61
+ fixture . Repository . DumpGraph ( Console . WriteLine ) ;
62
+
63
+ releaseBranchMergeBase . ShouldBe ( expectedReleaseMergeBase ) ;
64
+ developMergeBase . ShouldBe ( expectedDevelopMergeBase ) ;
65
+ }
66
+ }
67
+
68
+ [ Test ]
69
+ public void FindsCorrectMergeBaseForForwardMergeMovesOn ( )
70
+ {
71
+ //*9dfb8b4 49 minutes ago(develop)
72
+ //*54f21b2 53 minutes ago
73
+ // |\
74
+ // | | *a219831 51 minutes ago(HEAD -> release-2.0.0)
75
+ // | |/
76
+ // | *4441531 54 minutes ago
77
+ // | *89840df 56 minutes ago
78
+ // |/
79
+ //*91bf945 58 minutes ago(master)
80
+ using ( var fixture = new EmptyRepositoryFixture ( ) )
81
+ {
82
+ fixture . MakeACommit ( "initial" ) ;
83
+ fixture . BranchTo ( "develop" ) ;
84
+ var expectedReleaseMergeBase = fixture . Repository . Head . Tip ;
85
+
86
+ // Create release from develop
87
+ fixture . BranchTo ( "release-2.0.0" ) ;
88
+
89
+ // Make some commits on release
90
+ fixture . MakeACommit ( "release 1" ) ;
91
+ fixture . MakeACommit ( "release 2" ) ;
92
+ var expectedDevelopMergeBase = fixture . Repository . Head . Tip ;
93
+
94
+ // First forward merge release to develop
95
+ fixture . Checkout ( "develop" ) ;
96
+ fixture . MergeNoFF ( "release-2.0.0" ) ;
97
+
98
+ // Make some new commit on release
99
+ fixture . Checkout ( "release-2.0.0" ) ;
100
+ fixture . MakeACommit ( "release 3 - after first merge" ) ;
101
+
102
+ // Make new commit on develop
103
+ fixture . Checkout ( "develop" ) ;
104
+ // Checkout to release (no new commits)
105
+ fixture . MakeACommit ( "develop after merge" ) ;
106
+
107
+ // Checkout to release (no new commits)
108
+ fixture . Checkout ( "release-2.0.0" ) ;
109
+
110
+ var develop = fixture . Repository . FindBranch ( "develop" ) ;
111
+ var release = fixture . Repository . FindBranch ( "release-2.0.0" ) ;
112
+ var releaseBranchMergeBase = new GitRepoMetadataProvider ( fixture . Repository )
113
+ . FindMergeBase ( release , develop ) ;
114
+
115
+ var developMergeBase = new GitRepoMetadataProvider ( fixture . Repository )
116
+ . FindMergeBase ( develop , release ) ;
117
+
118
+ fixture . Repository . DumpGraph ( Console . WriteLine ) ;
119
+
120
+ releaseBranchMergeBase . ShouldBe ( expectedReleaseMergeBase ) ;
121
+ developMergeBase . ShouldBe ( expectedDevelopMergeBase ) ;
122
+ }
123
+ }
124
+
125
+ [ Test ]
126
+ public void FindsCorrectMergeBaseForMultipleForwardMerges ( )
127
+ {
128
+ //*403b294 44 minutes ago(develop)
129
+ //|\
130
+ //| *306b243 45 minutes ago(HEAD -> release-2.0.0)
131
+ //| *4cf5969 47 minutes ago
132
+ //| *4814083 51 minutes ago
133
+ //* | cddd3cc 49 minutes ago
134
+ //* | 2b2b52a 53 minutes ago
135
+ //|\ \
136
+ //| |/
137
+ //| *8113776 54 minutes ago
138
+ //| *3c0235e 56 minutes ago
139
+ //|/
140
+ //*f6f1283 58 minutes ago(master)
141
+
142
+ using ( var fixture = new EmptyRepositoryFixture ( ) )
143
+ {
144
+ fixture . MakeACommit ( "initial" ) ;
145
+ fixture . BranchTo ( "develop" ) ;
146
+ var expectedReleaseMergeBase = fixture . Repository . Head . Tip ;
147
+
148
+ // Create release from develop
149
+ fixture . BranchTo ( "release-2.0.0" ) ;
150
+
151
+ // Make some commits on release
152
+ fixture . MakeACommit ( "release 1" ) ;
153
+ fixture . MakeACommit ( "release 2" ) ;
154
+
155
+ // First forward merge release to develop
156
+ fixture . Checkout ( "develop" ) ;
157
+ fixture . MergeNoFF ( "release-2.0.0" ) ;
158
+
159
+ // Make some new commit on release
160
+ fixture . Checkout ( "release-2.0.0" ) ;
161
+ fixture . Repository . MakeACommit ( "release 3 - after first merge" ) ;
162
+
163
+ // Make new commit on develop
164
+ fixture . Checkout ( "develop" ) ;
165
+ // Checkout to release (no new commits)
166
+ fixture . Checkout ( "release-2.0.0" ) ;
167
+ fixture . Checkout ( "develop" ) ;
168
+ fixture . Repository . MakeACommit ( "develop after merge" ) ;
169
+
170
+ // Checkout to release (no new commits)
171
+ fixture . Checkout ( "release-2.0.0" ) ;
172
+
173
+ // Make some new commit on release
174
+ fixture . Repository . MakeACommit ( "release 4" ) ;
175
+ fixture . Repository . MakeACommit ( "release 5" ) ;
176
+ var expectedDevelopMergeBase = fixture . Repository . Head . Tip ;
177
+
178
+ // Second merge release to develop
179
+ fixture . Checkout ( "develop" ) ;
180
+ fixture . MergeNoFF ( "release-2.0.0" ) ;
181
+
182
+ // Checkout to release (no new commits)
183
+ fixture . Checkout ( "release-2.0.0" ) ;
184
+
185
+ var develop = fixture . Repository . FindBranch ( "develop" ) ;
186
+ var release = fixture . Repository . FindBranch ( "release-2.0.0" ) ;
187
+ var releaseBranchMergeBase = new GitRepoMetadataProvider ( fixture . Repository )
188
+ . FindMergeBase ( release , develop ) ;
189
+
190
+ var developMergeBase = new GitRepoMetadataProvider ( fixture . Repository )
191
+ . FindMergeBase ( develop , release ) ;
192
+
193
+ fixture . Repository . DumpGraph ( Console . WriteLine ) ;
194
+
195
+ releaseBranchMergeBase . ShouldBe ( expectedReleaseMergeBase ) ;
196
+ developMergeBase . ShouldBe ( expectedDevelopMergeBase ) ;
197
+ }
198
+ }
199
+ }
200
+ }
0 commit comments