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
33 import java.io.File;
34 import java.util.List;
35
36 import static org.hamcrest.CoreMatchers.startsWith;
37 import static org.junit.Assert.assertThat;
38
39
40
41
42 public abstract class GitChangeLogCommandTckTest
43 extends ChangeLogCommandTckTest
44 {
45 public static final long SLEEP_TIME_IN_MILLIS = 250L;
46
47
48 public void initRepo()
49 throws Exception
50 {
51 GitScmTestUtils.initRepo( "src/test/resources/linear-changelog/", getRepositoryRoot(), getWorkingCopy() );
52 }
53
54 @Override
55 protected CheckOutScmResult checkOut( File workingDirectory, ScmRepository repository ) throws Exception
56 {
57 try
58 {
59 return super.checkOut( workingDirectory, repository );
60 }
61 finally
62 {
63 GitScmTestUtils.setDefaultUser( workingDirectory );
64 }
65 }
66
67 public void testChangeLogCommandFromHeadAncestorAndHead()
68 throws Exception
69 {
70 Thread.sleep( SLEEP_TIME_IN_MILLIS );
71 ScmRepository scmRepository = getScmRepository();
72 ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
73 ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
74
75 ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
76 String startVersion = "HEAD~1";
77 clr.setStartRevision( new ScmRevision( startVersion ) );
78 String endVersion = "HEAD";
79 clr.setEndRevision( new ScmRevision( endVersion ) );
80 ChangeLogScmResult changelogResult = provider.changeLog( clr );
81
82 List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
83 assertEquals( String.format( "changelog for %s..%s returned bad number of commits", startVersion, endVersion ),
84 1, logEntries.size() );
85
86
87 assertThat( "bad head commit SHA1 retrieved", logEntries.get( 0 ).getRevision(), startsWith( "464921b" ) );
88 }
89
90 public void testChangeLogCommandFromHeadToHead()
91 throws Exception
92 {
93 Thread.sleep( SLEEP_TIME_IN_MILLIS );
94 ScmRepository scmRepository = getScmRepository();
95 ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
96 ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
97
98 ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
99 String startVersion = "HEAD";
100 clr.setStartRevision( new ScmRevision( startVersion ) );
101 String endVersion = "HEAD";
102 clr.setEndRevision( new ScmRevision( endVersion ) );
103 ChangeLogScmResult changelogResult = provider.changeLog( clr );
104
105 List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
106 assertEquals( String.format( "changelog for %s..%s returned bad number of commits", startVersion, endVersion ),
107 0, logEntries.size() );
108 }
109
110 public void testChangeLogCommandFromUndefinedToHead()
111 throws Exception
112 {
113 Thread.sleep( SLEEP_TIME_IN_MILLIS );
114 ScmRepository scmRepository = getScmRepository();
115 ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
116 ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
117
118 ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
119 String endVersion = "HEAD";
120 clr.setEndRevision( new ScmRevision( endVersion ) );
121 ChangeLogScmResult changelogResult = provider.changeLog( clr );
122
123 List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
124 assertEquals( String.format( "changelog for ..%s returned bad number of commits", endVersion ),
125 0, logEntries.size() );
126 }
127
128 public void testChangeLogCommandFromVersionToUndefined()
129 throws Exception
130 {
131 Thread.sleep( SLEEP_TIME_IN_MILLIS );
132 ScmRepository scmRepository = getScmRepository();
133 ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
134 ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
135
136 ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
137 String startVersion = "e3864d9";
138 clr.setStartRevision( new ScmRevision( startVersion ) );
139 ChangeLogScmResult changelogResult = provider.changeLog( clr );
140
141 List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
142 assertEquals( String.format( "changelog for %s.. returned bad number of commits", startVersion ),
143 2, logEntries.size() );
144
145 assertThat( "bad commit SHA1 retrieved", logEntries.get( 0 ).getRevision(), startsWith( "464921b" ) );
146 assertThat( "bad commit SHA1 retrieved", logEntries.get( 1 ).getRevision(), startsWith( "db46d63" ) );
147 }
148
149 public void testChangeLogCommandFromVoneToVtwo()
150 throws Exception
151 {
152 Thread.sleep( SLEEP_TIME_IN_MILLIS );
153 ScmRepository scmRepository = getScmRepository();
154 ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
155 ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
156
157 ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
158 String startVersion = "0f1e817";
159 clr.setStartRevision( new ScmRevision( startVersion ) );
160 String endVersion = "db46d63";
161 clr.setEndRevision( new ScmRevision( endVersion ) );
162 ChangeLogScmResult changelogResult = provider.changeLog( clr );
163
164 List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
165 assertEquals( String.format( "changelog for %s.. returned bad number of commits", startVersion ),
166 2, logEntries.size() );
167
168 assertThat( "bad commit SHA1 retrieved", logEntries.get( 0 ).getRevision(), startsWith( "db46d63" ) );
169 assertThat( "bad commit SHA1 retrieved", logEntries.get( 1 ).getRevision(), startsWith( "e3864d9" ) );
170 }
171
172 public void testChangeLogCommandWithStartEndInBadOrder()
173 throws Exception
174 {
175 Thread.sleep( SLEEP_TIME_IN_MILLIS );
176 ScmRepository scmRepository = getScmRepository();
177 ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
178 ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
179
180 ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
181 String startVersion = "db46d63";
182 clr.setStartRevision( new ScmRevision( startVersion ) );
183 String endVersion = "0f1e817";
184 clr.setEndRevision( new ScmRevision( endVersion ) );
185 ChangeLogScmResult changelogResult = provider.changeLog( clr );
186
187 List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
188 assertEquals( String.format( "changelog for %s..%s should return no commits", startVersion, endVersion ),
189 0, logEntries.size() );
190 }
191
192 public void testChangeLogCommandFromHeadToStartOfRepository()
193 throws Exception
194 {
195 Thread.sleep( SLEEP_TIME_IN_MILLIS );
196 ScmRepository scmRepository = getScmRepository();
197 ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
198 ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
199
200 ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
201 String version = "HEAD";
202 clr.setRevision( new ScmRevision( version ) );
203 ChangeLogScmResult changelogResult = provider.changeLog( clr );
204
205 List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
206 assertEquals( String.format( "changelog for %s returned bad number of commits", version ),
207 5, logEntries.size() );
208 }
209
210 public void testChangeLogCommandFromVersionToStartOfRepository()
211 throws Exception
212 {
213 Thread.sleep( SLEEP_TIME_IN_MILLIS );
214 ScmRepository scmRepository = getScmRepository();
215 ScmProvider provider = getScmManager().getProviderByRepository( scmRepository );
216 ScmFileSet fileSet = new ScmFileSet( getWorkingCopy() );
217
218 ChangeLogScmRequest clr = new ChangeLogScmRequest( scmRepository, fileSet );
219 String version = "db46d63";
220 clr.setRevision( new ScmRevision( version ) );
221 ChangeLogScmResult changelogResult = provider.changeLog( clr );
222
223 List<ChangeSet> logEntries = changelogResult.getChangeLog().getChangeSets();
224 assertEquals( String.format( "changelog for %s returned bad number of commits", version ),
225 4, logEntries.size() );
226
227 assertThat( "bad commit SHA1 retrieved", logEntries.get( 0 ).getRevision(), startsWith( "db46d63" ) );
228 assertThat( "bad commit SHA1 retrieved", logEntries.get( 1 ).getRevision(), startsWith( "e3864d9" ) );
229 assertThat( "bad commit SHA1 retrieved", logEntries.get( 2 ).getRevision(), startsWith( "0f1e817" ) );
230 assertThat( "bad commit SHA1 retrieved", logEntries.get( 3 ).getRevision(), startsWith( "e75cb5a" ) );
231 }
232 }