1 package org.apache.maven.scm.provider.bazaar.command.changelog;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.ArrayList;
23 import java.util.Arrays;
24 import java.util.Date;
25 import java.util.List;
26
27 import org.apache.maven.scm.ChangeSet;
28 import org.apache.maven.scm.ScmBranch;
29 import org.apache.maven.scm.ScmException;
30 import org.apache.maven.scm.ScmFileSet;
31 import org.apache.maven.scm.ScmResult;
32 import org.apache.maven.scm.ScmVersion;
33 import org.apache.maven.scm.command.Command;
34 import org.apache.maven.scm.command.changelog.AbstractChangeLogCommand;
35 import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
36 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
37 import org.apache.maven.scm.command.changelog.ChangeLogSet;
38 import org.apache.maven.scm.provider.ScmProviderRepository;
39 import org.apache.maven.scm.provider.bazaar.BazaarUtils;
40 import org.apache.maven.scm.provider.bazaar.command.BazaarConstants;
41
42
43
44
45
46
47 public class BazaarChangeLogCommand
48 extends AbstractChangeLogCommand
49 implements Command
50 {
51
52
53
54 @Override
55 protected ChangeLogScmResult executeChangeLogCommand( ChangeLogScmRequest request )
56 throws ScmException
57 {
58 final ScmVersion startVersion = request.getStartRevision();
59 final ScmVersion endVersion = request.getEndRevision();
60 final ScmFileSet fileSet = request.getScmFileSet();
61 final String datePattern = request.getDatePattern();
62 if ( startVersion != null || endVersion != null )
63 {
64 final ScmProviderRepository scmProviderRepository = request.getScmRepository().getProviderRepository();
65 return executeChangeLogCommand( scmProviderRepository, fileSet, startVersion, endVersion, datePattern );
66 }
67 return executeChangeLogCommand( fileSet, request.getStartDate(), request.getEndDate(),
68 datePattern, request.getLimit() );
69 }
70
71
72 protected ChangeLogScmResult executeChangeLogCommand( ScmProviderRepository repo, ScmFileSet fileSet,
73 Date startDate, Date endDate, ScmBranch branch,
74 String datePattern )
75 throws ScmException
76 {
77 return executeChangeLogCommand( fileSet, startDate, endDate, datePattern, null );
78 }
79
80 private ChangeLogScmResult executeChangeLogCommand( ScmFileSet fileSet,
81 Date startDate, Date endDate,
82 String datePattern, Integer limit )
83 throws ScmException
84 {
85 List<String> cmd = new ArrayList<String>();
86 cmd.addAll( Arrays.asList( BazaarConstants.LOG_CMD, BazaarConstants.VERBOSE_OPTION ) );
87 if ( limit != null && limit > 0 )
88 {
89 cmd.add( BazaarConstants.LIMIT_OPTION );
90 cmd.add( Integer.toString( limit ) );
91 }
92
93 BazaarChangeLogConsumer consumer = new BazaarChangeLogConsumer( getLogger(), datePattern );
94 ScmResult result = BazaarUtils.execute( consumer, getLogger(), fileSet.getBasedir(),
95 cmd.toArray( new String[cmd.size()] ) );
96
97 List<ChangeSet> logEntries = consumer.getModifications();
98 List<ChangeSet> inRangeAndValid = new ArrayList<ChangeSet>();
99 startDate = startDate == null ? new Date( 0 ) : startDate;
100 endDate = endDate == null ? new Date() : endDate;
101
102 for ( ChangeSet change : logEntries )
103 {
104 if ( change.getFiles().size() > 0 )
105 {
106 if ( !change.getDate().before( startDate ) && !change.getDate().after( endDate ) )
107 {
108 inRangeAndValid.add( change );
109 }
110 }
111 }
112
113 ChangeLogSet changeLogSet = new ChangeLogSet( inRangeAndValid, startDate, endDate );
114 return new ChangeLogScmResult( changeLogSet, result );
115 }
116 }