1 package org.apache.maven.scm.provider.jazz.command.checkin;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.util.List;
24
25 import org.apache.maven.scm.ScmException;
26 import org.apache.maven.scm.ScmFileSet;
27 import org.apache.maven.scm.ScmVersion;
28 import org.apache.maven.scm.command.add.AddScmResult;
29 import org.apache.maven.scm.command.checkin.AbstractCheckInCommand;
30 import org.apache.maven.scm.command.checkin.CheckInScmResult;
31 import org.apache.maven.scm.provider.ScmProviderRepository;
32 import org.apache.maven.scm.provider.jazz.command.JazzConstants;
33 import org.apache.maven.scm.provider.jazz.command.JazzScmCommand;
34 import org.apache.maven.scm.provider.jazz.command.add.JazzAddCommand;
35 import org.apache.maven.scm.provider.jazz.command.consumer.DebugLoggerConsumer;
36 import org.apache.maven.scm.provider.jazz.command.consumer.ErrorConsumer;
37 import org.apache.maven.scm.provider.jazz.command.status.JazzStatusCommand;
38 import org.apache.maven.scm.provider.jazz.repository.JazzScmProviderRepository;
39 import org.codehaus.plexus.util.StringUtils;
40 import org.codehaus.plexus.util.cli.StreamConsumer;
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84 public class JazzCheckInCommand
85 extends AbstractCheckInCommand
86 {
87
88
89
90
91 protected CheckInScmResult executeCheckInCommand( ScmProviderRepository repository, ScmFileSet fileSet,
92 String message, ScmVersion scmVersion )
93 throws ScmException
94 {
95 if ( scmVersion != null && StringUtils.isNotEmpty( scmVersion.getName() ) )
96 {
97 throw new ScmException( "This provider command can't handle tags." );
98 }
99
100 if ( getLogger().isDebugEnabled() )
101 {
102 getLogger().debug( "Executing checkin command..." );
103 }
104
105
106
107 JazzScmCommand createChangesetCmd = createCreateChangesetCommand( repository, fileSet, message );
108 DebugLoggerConsumer outputConsumer = new DebugLoggerConsumer( getLogger() );
109 ErrorConsumer errConsumer = new ErrorConsumer( getLogger() );
110
111 int status = createChangesetCmd.execute( outputConsumer, errConsumer );
112 if ( status != 0 )
113 {
114 return new CheckInScmResult( createChangesetCmd.getCommandString(),
115 "Error code for Jazz SCM create changeset command - " + status,
116 errConsumer.getOutput(), false );
117 }
118
119
120
121
122 JazzStatusCommand statusCommand = new JazzStatusCommand();
123 statusCommand.setLogger( getLogger() );
124 statusCommand.executeStatusCommand( repository, fileSet );
125
126
127
128
129
130 JazzScmProviderRepository jazzRepo = (JazzScmProviderRepository) repository;
131 if ( jazzRepo.isPushChangesAndHaveFlowTargets() && StringUtils.isNotEmpty( jazzRepo.getWorkItem() ) )
132 {
133 List<Integer> changeSetAliases = jazzRepo.getOutgoingChangeSetAliases();
134 if ( changeSetAliases != null && !changeSetAliases.isEmpty() )
135 {
136 for ( Integer changeSetAlias : changeSetAliases )
137 {
138
139 JazzScmCommand changesetAssociateCmd = createChangesetAssociateCommand( repository,
140 changeSetAlias );
141 outputConsumer = new DebugLoggerConsumer( getLogger() );
142 errConsumer = new ErrorConsumer( getLogger() );
143
144 status = changesetAssociateCmd.execute( outputConsumer, errConsumer );
145 if ( status != 0 )
146 {
147 return new CheckInScmResult( changesetAssociateCmd.getCommandString(),
148 "Error code for Jazz SCM changeset associate command - " + status,
149 errConsumer.getOutput(), false );
150 }
151 }
152 }
153 }
154
155
156 return executeCheckInCommand( repository, fileSet, scmVersion );
157 }
158
159 protected CheckInScmResult executeCheckInCommand( ScmProviderRepository repo, ScmFileSet fileSet,
160 ScmVersion scmVersion )
161 throws ScmException
162 {
163
164 JazzAddCommand addCommand = new JazzAddCommand();
165 addCommand.setLogger( getLogger() );
166 AddScmResult addResult = addCommand.executeAddCommand( repo, fileSet );
167
168
169 JazzScmProviderRepository jazzRepo = (JazzScmProviderRepository) repo;
170 if ( jazzRepo.isPushChangesAndHaveFlowTargets() )
171 {
172
173 JazzScmCommand deliverCmd = createDeliverCommand( (JazzScmProviderRepository) repo, fileSet );
174 StreamConsumer deliverConsumer =
175 new DebugLoggerConsumer( getLogger() );
176 ErrorConsumer errConsumer = new ErrorConsumer( getLogger() );
177
178 int status = deliverCmd.execute( deliverConsumer, errConsumer );
179 if ( status != 0 )
180 {
181 return new CheckInScmResult( deliverCmd.getCommandString(),
182 "Error code for Jazz SCM deliver command - " + status,
183 errConsumer.getOutput(), false );
184 }
185 }
186
187
188 return new CheckInScmResult( addResult.getCommandLine(), addResult.getAddedFiles() );
189 }
190
191 public JazzScmCommand createCreateChangesetCommand( ScmProviderRepository repo, ScmFileSet fileSet, String message )
192 {
193 JazzScmCommand command =
194 new JazzScmCommand( JazzConstants.CMD_CREATE, JazzConstants.CMD_SUB_CHANGESET, repo, false, fileSet,
195 getLogger() );
196 command.addArgument( message );
197
198 return command;
199 }
200
201 public JazzScmCommand createChangesetAssociateCommand( ScmProviderRepository repo, Integer changeSetAlias )
202 {
203 JazzScmCommand command =
204 new JazzScmCommand( JazzConstants.CMD_CHANGESET, JazzConstants.CMD_SUB_ASSOCIATE, repo, false, null,
205 getLogger() );
206
207 JazzScmProviderRepository jazzRepo = (JazzScmProviderRepository) repo;
208
209
210 command.addArgument( StringUtils.leftPad( changeSetAlias.toString(), 4, "0" ) );
211
212 command.addArgument( jazzRepo.getWorkItem() );
213 return command;
214 }
215
216 public JazzScmCommand createCheckInCommand( ScmProviderRepository repo, ScmFileSet fileSet )
217 {
218 JazzScmCommand command =
219 new JazzScmCommand( JazzConstants.CMD_CHECKIN, null, repo, false, fileSet, getLogger() );
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234 List<File> files = fileSet.getFileList();
235 if ( files != null && !files.isEmpty() )
236 {
237 for ( File file : files )
238 {
239 command.addArgument( file.getPath() );
240 }
241 }
242 else
243 {
244 command.addArgument( "." );
245 }
246
247 return command;
248 }
249
250
251
252 public JazzScmCommand createDeliverCommand( JazzScmProviderRepository repo, ScmFileSet fileSet )
253 {
254 JazzScmCommand command = new JazzScmCommand( JazzConstants.CMD_DELIVER, repo, fileSet, getLogger() );
255
256 if ( repo.getWorkspace() != null && !repo.getWorkspace().equals( "" ) )
257 {
258 command.addArgument( JazzConstants.ARG_DELIVER_SOURCE );
259 command.addArgument( repo.getWorkspace() );
260 }
261
262 if ( repo.getFlowTarget() != null && !repo.getFlowTarget().equals( "" ) )
263 {
264 command.addArgument( JazzConstants.ARG_DELIVER_TARGET );
265 command.addArgument( repo.getFlowTarget() );
266 }
267
268
269
270
271
272
273
274
275
276
277
278 command.addArgument( JazzConstants.ARG_OVERWRITE_UNCOMMITTED );
279
280 return command;
281 }
282 }