PageRenderTime 63ms CodeModel.GetById 36ms RepoModel.GetById 0ms app.codeStats 0ms

/maven-scm-providers/maven-scm-provider-hg/src/main/java/org/apache/maven/scm/provider/hg/command/changelog/HgChangeLogCommand.java

https://github.com/intelchen/maven-scm
Java | 149 lines | 106 code | 13 blank | 30 comment | 14 complexity | a0a30a9762d91b2a0c73371c008623c6 MD5 | raw file
  1. package org.apache.maven.scm.provider.hg.command.changelog;
  2. /*
  3. * Licensed to the Apache Software Foundation (ASF) under one
  4. * or more contributor license agreements. See the NOTICE file
  5. * distributed with this work for additional information
  6. * regarding copyright ownership. The ASF licenses this file
  7. * to you under the Apache License, Version 2.0 (the
  8. * "License"); you may not use this file except in compliance
  9. * with the License. You may obtain a copy of the License at
  10. *
  11. * http://www.apache.org/licenses/LICENSE-2.0
  12. *
  13. * Unless required by applicable law or agreed to in writing,
  14. * software distributed under the License is distributed on an
  15. * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  16. * KIND, either express or implied. See the License for the
  17. * specific language governing permissions and limitations
  18. * under the License.
  19. */
  20. import org.apache.maven.scm.ChangeSet;
  21. import org.apache.maven.scm.ScmBranch;
  22. import org.apache.maven.scm.ScmException;
  23. import org.apache.maven.scm.ScmFileSet;
  24. import org.apache.maven.scm.ScmResult;
  25. import org.apache.maven.scm.ScmVersion;
  26. import org.apache.maven.scm.command.Command;
  27. import org.apache.maven.scm.command.changelog.AbstractChangeLogCommand;
  28. import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
  29. import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
  30. import org.apache.maven.scm.command.changelog.ChangeLogSet;
  31. import org.apache.maven.scm.provider.ScmProviderRepository;
  32. import org.apache.maven.scm.provider.hg.HgUtils;
  33. import org.apache.maven.scm.provider.hg.command.HgCommandConstants;
  34. import java.text.SimpleDateFormat;
  35. import java.util.ArrayList;
  36. import java.util.Arrays;
  37. import java.util.Date;
  38. import java.util.List;
  39. /**
  40. * @author <a href="mailto:thurner.rupert@ymono.net">thurner rupert</a>
  41. * @author Olivier Lamy
  42. *
  43. */
  44. public class HgChangeLogCommand
  45. extends AbstractChangeLogCommand
  46. implements Command
  47. {
  48. /**
  49. * {@inheritDoc}
  50. */
  51. @Override
  52. protected ChangeLogScmResult executeChangeLogCommand( ChangeLogScmRequest request )
  53. throws ScmException
  54. {
  55. final ScmVersion startVersion = request.getStartRevision();
  56. final ScmVersion endVersion = request.getEndRevision();
  57. final ScmFileSet fileSet = request.getScmFileSet();
  58. final String datePattern = request.getDatePattern();
  59. if ( startVersion != null || endVersion != null )
  60. {
  61. final ScmProviderRepository scmProviderRepository = request.getScmRepository().getProviderRepository();
  62. return executeChangeLogCommand( scmProviderRepository, fileSet, startVersion, endVersion, datePattern );
  63. }
  64. return executeChangeLogCommand( fileSet, request.getStartDate(), request.getEndDate(),
  65. datePattern, request.getLimit() );
  66. }
  67. /**
  68. * {@inheritDoc}
  69. */
  70. protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository scmProviderRepository,
  71. ScmFileSet fileSet, Date startDate, Date endDate,
  72. ScmBranch branch, String datePattern )
  73. throws ScmException
  74. {
  75. return executeChangeLogCommand( fileSet, startDate, endDate, datePattern, null );
  76. }
  77. private ChangeLogScmResult executeChangeLogCommand( ScmFileSet fileSet, Date startDate, Date endDate,
  78. String datePattern, Integer limit )
  79. throws ScmException
  80. {
  81. SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
  82. StringBuilder dateInterval = new StringBuilder();
  83. // TRICK: Mercurial 1.9.3 don't accept 1970-01-01
  84. dateInterval.append(
  85. dateFormat.format( startDate == null ? new Date( 1000L * 60 * 60 * 24 ) : startDate ) ); // From 2. Jan 1970
  86. dateInterval.append( " to " );
  87. dateInterval.append( dateFormat.format( endDate == null ? new Date() : endDate ) ); // Upto now
  88. List<String> cmd = new ArrayList<String>();
  89. cmd.addAll( Arrays.asList( HgCommandConstants.LOG_CMD, HgCommandConstants.VERBOSE_OPTION,
  90. HgCommandConstants.NO_MERGES_OPTION, HgCommandConstants.DATE_OPTION,
  91. dateInterval.toString() ) );
  92. if ( limit != null && limit > 0 )
  93. {
  94. cmd.add( HgCommandConstants.LIMIT_OPTION );
  95. cmd.add( Integer.toString( limit ) );
  96. }
  97. HgChangeLogConsumer consumer = new HgChangeLogConsumer( getLogger(), datePattern );
  98. ScmResult result = HgUtils.execute( consumer, getLogger(), fileSet.getBasedir(), cmd.toArray( new String[ cmd.size() ] ) );
  99. List<ChangeSet> logEntries = consumer.getModifications();
  100. ChangeLogSet changeLogSet = new ChangeLogSet( logEntries, startDate, endDate );
  101. return new ChangeLogScmResult( changeLogSet, result );
  102. }
  103. @Override
  104. protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repository, ScmFileSet fileSet,
  105. ScmVersion startVersion, ScmVersion endVersion,
  106. String datePattern )
  107. throws ScmException
  108. {
  109. StringBuilder revisionInterval = new StringBuilder();
  110. if ( startVersion != null )
  111. {
  112. revisionInterval.append( startVersion.getName() );
  113. }
  114. revisionInterval.append( ":" );
  115. if ( endVersion != null )
  116. {
  117. revisionInterval.append( endVersion.getName() );
  118. }
  119. String[] cmd = new String[]{ HgCommandConstants.LOG_CMD, HgCommandConstants.TEMPLATE_OPTION,
  120. HgCommandConstants.NO_MERGES_OPTION, HgCommandConstants.REVISION_OPTION, revisionInterval.toString() };
  121. HgChangeLogConsumer consumer = new HgChangeLogConsumer( getLogger(), datePattern );
  122. ScmResult result = HgUtils.execute( consumer, getLogger(), fileSet.getBasedir(), cmd );
  123. List<ChangeSet> logEntries = consumer.getModifications();
  124. Date startDate = null;
  125. Date endDate = null;
  126. if ( !logEntries.isEmpty() )
  127. {
  128. startDate = logEntries.get( 0 ).getDate();
  129. endDate = logEntries.get( logEntries.size() - 1 ).getDate();
  130. }
  131. ChangeLogSet changeLogSet = new ChangeLogSet( logEntries, startDate, endDate );
  132. changeLogSet.setStartVersion( startVersion );
  133. changeLogSet.setEndVersion( endVersion );
  134. return new ChangeLogScmResult( changeLogSet, result );
  135. }
  136. }