1 package org.apache.maven.scm.provider.hg.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.ScmBranch;
24 import org.apache.maven.scm.ScmException;
25 import org.apache.maven.scm.ScmFileSet;
26 import org.apache.maven.scm.ScmResult;
27 import org.apache.maven.scm.ScmVersion;
28 import org.apache.maven.scm.command.Command;
29 import org.apache.maven.scm.command.changelog.AbstractChangeLogCommand;
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.changelog.ChangeLogSet;
33 import org.apache.maven.scm.provider.ScmProviderRepository;
34 import org.apache.maven.scm.provider.hg.HgUtils;
35 import org.apache.maven.scm.provider.hg.command.HgCommandConstants;
36
37 import java.text.SimpleDateFormat;
38 import java.util.ArrayList;
39 import java.util.Arrays;
40 import java.util.Date;
41 import java.util.List;
42
43
44
45
46
47
48 public class HgChangeLogCommand
49 extends AbstractChangeLogCommand
50 implements Command
51 {
52
53
54
55 @Override
56 protected ChangeLogScmResult executeChangeLogCommand( ChangeLogScmRequest request )
57 throws ScmException
58 {
59 final ScmVersion startVersion = request.getStartRevision();
60 final ScmVersion endVersion = request.getEndRevision();
61 final ScmFileSet fileSet = request.getScmFileSet();
62 final String datePattern = request.getDatePattern();
63 if ( startVersion != null || endVersion != null )
64 {
65 final ScmProviderRepository scmProviderRepository = request.getScmRepository().getProviderRepository();
66 return executeChangeLogCommand( scmProviderRepository, fileSet, startVersion, endVersion, datePattern );
67 }
68 return executeChangeLogCommand( fileSet, request.getStartDate(), request.getEndDate(),
69 datePattern, request.getLimit() );
70 }
71
72
73
74
75 protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository scmProviderRepository,
76 ScmFileSet fileSet, Date startDate, Date endDate,
77 ScmBranch branch, String datePattern )
78 throws ScmException
79 {
80 return executeChangeLogCommand( fileSet, startDate, endDate, datePattern, null );
81 }
82
83 private ChangeLogScmResult executeChangeLogCommand( ScmFileSet fileSet, Date startDate, Date endDate,
84 String datePattern, Integer limit )
85 throws ScmException
86 {
87 SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
88 StringBuilder dateInterval = new StringBuilder();
89
90 dateInterval.append(
91 dateFormat.format( startDate == null ? new Date( 1000L * 60 * 60 * 24 ) : startDate ) );
92 dateInterval.append( " to " );
93 dateInterval.append( dateFormat.format( endDate == null ? new Date() : endDate ) );
94
95 List<String> cmd = new ArrayList<String>();
96 cmd.addAll( Arrays.asList( HgCommandConstants.LOG_CMD, HgCommandConstants.VERBOSE_OPTION,
97 HgCommandConstants.NO_MERGES_OPTION, HgCommandConstants.DATE_OPTION,
98 dateInterval.toString() ) );
99
100 if ( limit != null && limit > 0 )
101 {
102 cmd.add( HgCommandConstants.LIMIT_OPTION );
103 cmd.add( Integer.toString( limit ) );
104 }
105
106 HgChangeLogConsumer consumer = new HgChangeLogConsumer( getLogger(), datePattern );
107 ScmResult result = HgUtils.execute( consumer, getLogger(), fileSet.getBasedir(), cmd.toArray( new String[ cmd.size() ] ) );
108
109 List<ChangeSet> logEntries = consumer.getModifications();
110 ChangeLogSet changeLogSet = new ChangeLogSet( logEntries, startDate, endDate );
111 return new ChangeLogScmResult( changeLogSet, result );
112 }
113
114 @Override
115 protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repository, ScmFileSet fileSet,
116 ScmVersion startVersion, ScmVersion endVersion,
117 String datePattern )
118 throws ScmException
119 {
120 StringBuilder revisionInterval = new StringBuilder();
121 if ( startVersion != null )
122 {
123 revisionInterval.append( startVersion.getName() );
124 }
125 revisionInterval.append( ":" );
126 if ( endVersion != null )
127 {
128 revisionInterval.append( endVersion.getName() );
129 }
130
131 String[] cmd = new String[]{ HgCommandConstants.LOG_CMD, HgCommandConstants.TEMPLATE_OPTION,
132 HgCommandConstants.NO_MERGES_OPTION, HgCommandConstants.REVISION_OPTION, revisionInterval.toString() };
133 HgChangeLogConsumer consumer = new HgChangeLogConsumer( getLogger(), datePattern );
134 ScmResult result = HgUtils.execute( consumer, getLogger(), fileSet.getBasedir(), cmd );
135
136 List<ChangeSet> logEntries = consumer.getModifications();
137 Date startDate = null;
138 Date endDate = null;
139 if ( !logEntries.isEmpty() )
140 {
141 startDate = logEntries.get( 0 ).getDate();
142 endDate = logEntries.get( logEntries.size() - 1 ).getDate();
143 }
144 ChangeLogSet changeLogSet = new ChangeLogSet( logEntries, startDate, endDate );
145 changeLogSet.setStartVersion( startVersion );
146 changeLogSet.setEndVersion( endVersion );
147 return new ChangeLogScmResult( changeLogSet, result );
148 }
149 }