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