View Javadoc
1   package org.apache.maven.scm.provider.git.command.changelog;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *    http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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   * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
41   */
42  public abstract class GitChangeLogCommandTckTest
43      extends ChangeLogCommandTckTest
44  {
45      public static final long SLEEP_TIME_IN_MILLIS = 250L;
46  
47      /** {@inheritDoc} */
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 }