1 package org.apache.maven.scm.provider.git.command.changelog;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.scm.ChangeSet;
23 import org.apache.maven.scm.ScmFileSet;
24 import org.apache.maven.scm.ScmRevision;
25 import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
26 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
27 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
28 import org.apache.maven.scm.provider.ScmProvider;
29 import org.apache.maven.scm.provider.git.GitScmTestUtils;
30 import org.apache.maven.scm.repository.ScmRepository;
31 import org.apache.maven.scm.tck.command.changelog.ChangeLogCommandTckTest;
32 import org.junit.Test;
33
34 import java.io.File;
35 import java.util.ArrayList;
36 import java.util.Arrays;
37 import java.util.Collections;
38 import java.util.List;
39
40 import static org.hamcrest.CoreMatchers.startsWith;
41 import static org.hamcrest.MatcherAssert.assertThat;
42 import static org.junit.Assert.assertEquals;
43
44
45
46
47 public abstract class GitChangeLogCommandTckTest
48 extends ChangeLogCommandTckTest
49 {
50 public static final long SLEEP_TIME_IN_MILLIS = 250L;
51
52
53 public void initRepo()
54 throws Exception
55 {
56 GitScmTestUtils.initRepo( "src/test/resources/linear-changelog/", getRepositoryRoot(), getWorkingCopy() );
57 }
58
59 @Override
60 protected CheckOutScmResult checkOut( File workingDirectory, ScmRepository repository ) throws Exception
61 {
62 try
63 {
64 return super.checkOut( workingDirectory, repository );
65 }
66 finally
67 {
68 GitScmTestUtils.setDefaultUser( workingDirectory );
69 }
70 }
71
72 @Test
73 public void testChangeLogCommandFromHeadAncestorAndHead()
74 throws Exception
75 {
76 Thread.sleep( SLEEP_TIME_IN_MILLIS );
77 ScmRepository scmRepository = getScmRepository();
78 ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
79 ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
80
81 ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
82 String startVersion = "HEAD~1";
83 clr.setStartRevision( new ScmRevision( startVersion ) );
84 String endVersion = "HEAD";
85 clr.setEndRevision( new ScmRevision( endVersion ) );
86 ChangeLogScmResult changelogResult = provider.changeLog( clr );
87
88 List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
89 assertEquals( String.format( "changelog for %s..%s returned bad number of commits", startVersion, endVersion ),
90 1, logEntries.size() );
91
92
93 assertThat( "bad head commit SHA1 retrieved", logEntries.get( 0 ).getRevision(), startsWith( "464921b" ) );
94 }
95
96 @Test
97 public void testChangeLogCommandFromHeadToHead()
98 throws Exception
99 {
100 Thread.sleep( SLEEP_TIME_IN_MILLIS );
101 ScmRepository scmRepository = getScmRepository();
102 ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
103 ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
104
105 ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
106 String startVersion = "HEAD";
107 clr.setStartRevision( new ScmRevision( startVersion ) );
108 String endVersion = "HEAD";
109 clr.setEndRevision( new ScmRevision( endVersion ) );
110 ChangeLogScmResult changelogResult = provider.changeLog( clr );
111
112 List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
113 assertEquals( String.format( "changelog for %s..%s returned bad number of commits", startVersion, endVersion ),
114 0, logEntries.size() );
115 }
116
117 @Test
118 public void testChangeLogCommandFromUndefinedToHead()
119 throws Exception
120 {
121 Thread.sleep( SLEEP_TIME_IN_MILLIS );
122 ScmRepository scmRepository = getScmRepository();
123 ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
124 ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
125
126 ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
127 String endVersion = "HEAD";
128 clr.setEndRevision( new ScmRevision( endVersion ) );
129 ChangeLogScmResult changelogResult = provider.changeLog( clr );
130
131 List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
132 assertEquals( String.format( "changelog for ..%s returned bad number of commits", endVersion ),
133 0, logEntries.size() );
134 }
135
136 @Test
137 public void testChangeLogCommandFromVersionToUndefined()
138 throws Exception
139 {
140 Thread.sleep( SLEEP_TIME_IN_MILLIS );
141 ScmRepository scmRepository = getScmRepository();
142 ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
143 ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
144
145 ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
146 String startVersion = "e3864d9";
147 clr.setStartRevision( new ScmRevision( startVersion ) );
148 ChangeLogScmResult changelogResult = provider.changeLog( clr );
149
150 List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
151 assertEquals( String.format( "changelog for %s.. returned bad number of commits", startVersion ),
152 2, logEntries.size() );
153
154 assertThat( "bad commit SHA1 retrieved", logEntries.get( 0 ).getRevision(), startsWith( "464921b" ) );
155 assertThat( "bad commit SHA1 retrieved", logEntries.get( 1 ).getRevision(), startsWith( "db46d63" ) );
156 }
157
158 @Test
159 public void testChangeLogCommandFromVoneToVtwo()
160 throws Exception
161 {
162 Thread.sleep( SLEEP_TIME_IN_MILLIS );
163 ScmRepository scmRepository = getScmRepository();
164 ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
165 ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
166
167 ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
168 String startVersion = "0f1e817";
169 clr.setStartRevision( new ScmRevision( startVersion ) );
170 String endVersion = "db46d63";
171 clr.setEndRevision( new ScmRevision( endVersion ) );
172 ChangeLogScmResult changelogResult = provider.changeLog( clr );
173
174 List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
175 assertEquals( String.format( "changelog for %s.. returned bad number of commits", startVersion ),
176 2, logEntries.size() );
177
178 assertThat( "bad commit SHA1 retrieved", logEntries.get( 0 ).getRevision(), startsWith( "db46d63" ) );
179 assertThat( "bad commit SHA1 retrieved", logEntries.get( 1 ).getRevision(), startsWith( "e3864d9" ) );
180 }
181
182 @Test
183 public void testChangeLogCommandWithStartEndInBadOrder()
184 throws Exception
185 {
186 Thread.sleep( SLEEP_TIME_IN_MILLIS );
187 ScmRepository scmRepository = getScmRepository();
188 ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
189 ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
190
191 ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
192 String startVersion = "db46d63";
193 clr.setStartRevision( new ScmRevision( startVersion ) );
194 String endVersion = "0f1e817";
195 clr.setEndRevision( new ScmRevision( endVersion ) );
196 ChangeLogScmResult changelogResult = provider.changeLog( clr );
197
198 List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
199 assertEquals( String.format( "changelog for %s..%s should return no commits", startVersion, endVersion ),
200 0, logEntries.size() );
201 }
202
203 @Test
204 public void testChangeLogCommandFromHeadToStartOfRepository()
205 throws Exception
206 {
207 Thread.sleep( SLEEP_TIME_IN_MILLIS );
208 ScmRepository scmRepository = getScmRepository();
209 ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
210 ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
211
212 ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
213 String version = "HEAD";
214 clr.setRevision( new ScmRevision( version ) );
215 ChangeLogScmResult changelogResult = provider.changeLog( clr );
216
217 List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
218 assertEquals( String.format( "changelog for %s returned bad number of commits", version ),
219 5, logEntries.size() );
220 }
221
222 @Test
223 public void testChangeLogCommandFromVersionToStartOfRepository()
224 throws Exception
225 {
226 Thread.sleep( SLEEP_TIME_IN_MILLIS );
227 ScmRepository scmRepository = getScmRepository();
228 ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
229 ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
230
231 ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
232 String version = "db46d63";
233 clr.setRevision( new ScmRevision( version ) );
234 ChangeLogScmResult changelogResult = provider.changeLog( clr );
235
236 List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
237 assertEquals( String.format( "changelog for %s returned bad number of commits", version ),
238 4, logEntries.size() );
239
240 assertThat( "bad commit SHA1 retrieved", logEntries.get( 0 ).getRevision(), startsWith( "db46d63" ) );
241 assertThat( "bad commit SHA1 retrieved", logEntries.get( 1 ).getRevision(), startsWith( "e3864d9" ) );
242 assertThat( "bad commit SHA1 retrieved", logEntries.get( 2 ).getRevision(), startsWith( "0f1e817" ) );
243 assertThat( "bad commit SHA1 retrieved", logEntries.get( 3 ).getRevision(), startsWith( "e75cb5a" ) );
244
245 List<String> tags4 = Arrays.asList( "Tag4a", "Tag4b" );
246 List<String> tags2 = Collections.singletonList( "Tag2" );
247 List<String> noTags = Collections.emptyList();
248
249 assertEquals( "Incorrect tags found", tags4, sorted( logEntries.get( 0 ).getTags() ) );
250 assertEquals( "Incorrect tags found", noTags, sorted( logEntries.get( 1 ).getTags() ) );
251 assertEquals( "Incorrect tags found", tags2, sorted( logEntries.get( 2 ).getTags() ) );
252 assertEquals( "Incorrect tags found", noTags, sorted( logEntries.get( 3 ).getTags() ) );
253 }
254
255 private List<String> sorted( List<String> input )
256 {
257 List<String> result = new ArrayList<>( input );
258 Collections.sort( result );
259 return result;
260 }
261
262 }