1 package org.apache.maven.scm.provider;
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.CommandParameters;
23 import org.apache.maven.scm.ScmBranch;
24 import org.apache.maven.scm.ScmBranchParameters;
25 import org.apache.maven.scm.ScmException;
26 import org.apache.maven.scm.ScmFileSet;
27 import org.apache.maven.scm.ScmTagParameters;
28 import org.apache.maven.scm.ScmVersion;
29 import org.apache.maven.scm.command.add.AddScmResult;
30 import org.apache.maven.scm.command.blame.BlameScmRequest;
31 import org.apache.maven.scm.command.blame.BlameScmResult;
32 import org.apache.maven.scm.command.branch.BranchScmResult;
33 import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
34 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
35 import org.apache.maven.scm.command.checkin.CheckInScmResult;
36 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
37 import org.apache.maven.scm.command.diff.DiffScmResult;
38 import org.apache.maven.scm.command.edit.EditScmResult;
39 import org.apache.maven.scm.command.export.ExportScmResult;
40 import org.apache.maven.scm.command.info.InfoScmResult;
41 import org.apache.maven.scm.command.list.ListScmResult;
42 import org.apache.maven.scm.command.mkdir.MkdirScmResult;
43 import org.apache.maven.scm.command.remoteinfo.RemoteInfoScmResult;
44 import org.apache.maven.scm.command.remove.RemoveScmResult;
45 import org.apache.maven.scm.command.status.StatusScmResult;
46 import org.apache.maven.scm.command.tag.TagScmResult;
47 import org.apache.maven.scm.command.unedit.UnEditScmResult;
48 import org.apache.maven.scm.command.update.UpdateScmResult;
49 import org.apache.maven.scm.log.ScmLogger;
50 import org.apache.maven.scm.repository.ScmRepository;
51 import org.apache.maven.scm.repository.ScmRepositoryException;
52 import org.apache.maven.scm.repository.UnknownRepositoryStructure;
53
54 import java.io.File;
55 import java.util.Date;
56 import java.util.List;
57
58 /**
59 * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
60 *
61 */
62 public interface ScmProvider
63 {
64 String ROLE = ScmProvider.class.getName();
65
66 String getScmType();
67
68 /**
69 * Add a logger listener.
70 *
71 * @param logger The logger
72 */
73 void addListener( ScmLogger logger );
74
75 boolean requiresEditMode();
76
77 ScmProviderRepository makeProviderScmRepository( String scmSpecificUrl, char delimiter )
78 throws ScmRepositoryException;
79
80 ScmProviderRepository makeProviderScmRepository( File path )
81 throws ScmRepositoryException, UnknownRepositoryStructure;
82
83 /**
84 * Validate the scm url.
85 *
86 * @param scmSpecificUrl The SCM url
87 * @param delimiter The delimiter used in the SCM url
88 * @return Returns a list of messages if the validation failed
89 */
90 List<String> validateScmUrl( String scmSpecificUrl, char delimiter );
91
92 /**
93 * Returns the scm reserved file name where the SCM stores information like 'CVS', '.svn'.
94 *
95 * @return the scm reserved file name
96 */
97 String getScmSpecificFilename();
98
99 /**
100 * Check if this tag is valid for this SCM provider.
101 *
102 * @param tag tag name to check
103 * @return true if tag is valid
104 */
105 boolean validateTagName( String tag );
106
107 /**
108 * Given a tag name, make it suitable for this SCM provider. For example, CVS converts "." into "_"
109 *
110 * @param tag input tag name
111 * @return sanitized tag name
112 */
113 String sanitizeTagName( String tag );
114
115 /**
116 * Adds the given files to the source control system
117 *
118 * @param repository the source control system
119 * @param fileSet the files to be added
120 * @return an {@link AddScmResult} that contains the files that have been added
121 * @throws ScmException if any
122 */
123 AddScmResult add( ScmRepository repository, ScmFileSet fileSet )
124 throws ScmException;
125
126 /**
127 * Adds the given files to the source control system
128 *
129 * @param repository the source control system
130 * @param fileSet the files to be added
131 * @param message a string that is a comment on the new added file
132 * @return an {@link AddScmResult} that contains the files that have been added
133 * @throws ScmException if any
134 */
135 AddScmResult add( ScmRepository repository, ScmFileSet fileSet, String message )
136 throws ScmException;
137
138 /**
139 * Adds the given files to the source control system
140 *
141 * @param repository the source control system
142 * @param fileSet the files to be added
143 * @param commandParameters {@link CommandParameters}
144 * @return an {@link AddScmResult} that contains the files that have been added
145 * @throws ScmException if any
146 */
147 AddScmResult add( ScmRepository repository, ScmFileSet fileSet, CommandParameters commandParameters )
148 throws ScmException;
149
150 /**
151 * Branch (or label in some systems) will create a branch of the source file with a certain branch name
152 *
153 * @param repository the source control system
154 * @param fileSet the files to branch. Implementations can also give the changes
155 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
156 * @param branchName the branch name to apply to the files
157 * @return
158 * @throws ScmException if any
159 * @deprecated use {@link #branch(ScmRepository, ScmFileSet, String, String, ScmBranchParameters)}
160 */
161 BranchScmResult branch( ScmRepository repository, ScmFileSet fileSet, String branchName )
162 throws ScmException;
163
164 /**
165 * Branch (or label in some systems) will create a branch of the source file with a certain branch name
166 *
167 * @param repository the source control system
168 * @param fileSet the files to branch. Implementations can also give the changes
169 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
170 * @param branchName the branch name to apply to the files
171 * @param message the commit message used for the tag creation
172 * @return
173 * @throws ScmException if any
174 * @deprecated use {@link #branch(ScmRepository, ScmFileSet, String, String, ScmBranchParameters)}
175 */
176 BranchScmResult branch( ScmRepository repository, ScmFileSet fileSet, String branchName, String message )
177 throws ScmException;
178
179 /**
180 * Branch (or label in some systems) will create a branch of the source file with a certain
181 * branch name
182 *
183 * @param repository the source control system
184 * @param fileSet the files to branch. Implementations can also give the changes from the
185 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
186 * @param branchName the branch name to apply to the files
187 * @return
188 * @throws ScmException if any
189 * @since 1.3
190 */
191 BranchScmResult branch( ScmRepository repository, ScmFileSet fileSet, String branchName,
192 ScmBranchParameters scmBranchParameters )
193 throws ScmException;
194
195 /**
196 * Returns the changes that have happend in the source control system in a certain period of time.
197 * This can be adding, removing, updating, ... of files
198 *
199 * @param repository the source control system
200 * @param fileSet the files to know the changes about. Implementations can also give the changes
201 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
202 * @param startDate the start date of the period
203 * @param endDate the end date of the period
204 * @param numDays the number days before the current time if startdate and enddate are null
205 * @param branch the branch/tag name
206 * @return The SCM result of the changelog command
207 * @throws ScmException if any
208 * @deprecated you must use {@link ScmProvider#changeLog(org.apache.maven.scm.repository.ScmRepository,
209 * org.apache.maven.scm.ScmFileSet, java.util.Date, java.util.Date, int, org.apache.maven.scm.ScmBranch)}
210 */
211 ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
212 int numDays, String branch )
213 throws ScmException;
214
215 /**
216 * Returns the changes that have happend in the source control system in a certain period of time.
217 * This can be adding, removing, updating, ... of files
218 *
219 * @param repository the source control system
220 * @param fileSet the files to know the changes about. Implementations can also give the changes
221 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
222 * @param startDate the start date of the period
223 * @param endDate the end date of the period
224 * @param numDays the number days before the current time if startdate and enddate are null
225 * @param branch the branch/tag
226 * @return The SCM result of the changelog command
227 * @throws ScmException if any
228 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
229 */
230 @Deprecated
231 ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
232 int numDays, ScmBranch branch )
233 throws ScmException;
234
235 /**
236 * Returns the changes that have happend in the source control system in a certain period of time.
237 * This can be adding, removing, updating, ... of files
238 *
239 * @param repository the source control system
240 * @param fileSet the files to know the changes about. Implementations can also give the changes
241 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
242 * @param startDate the start date of the period
243 * @param endDate the end date of the period
244 * @param numDays the number days before the current time if startdate and enddate are null
245 * @param branch the branch/tag name
246 * @param datePattern the date pattern use in changelog output returned by scm tool
247 * @return The SCM result of the changelog command
248 * @throws ScmException if any
249 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
250 */
251 @Deprecated
252 ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
253 int numDays, String branch, String datePattern )
254 throws ScmException;
255
256 /**
257 * Returns the changes that have happend in the source control system in a certain period of time.
258 * This can be adding, removing, updating, ... of files
259 *
260 * @param repository the source control system
261 * @param fileSet the files to know the changes about. Implementations can also give the changes
262 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
263 * @param startDate the start date of the period
264 * @param endDate the end date of the period
265 * @param numDays the number days before the current time if startdate and enddate are null
266 * @param branch the branch/tag
267 * @param datePattern the date pattern use in changelog output returned by scm tool
268 * @return The SCM result of the changelog command
269 * @throws ScmException if any
270 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
271 */
272 ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
273 int numDays, ScmBranch branch, String datePattern )
274 throws ScmException;
275
276 /**
277 * Returns the changes that have happend in the source control system in a certain period of time.
278 * This can be adding, removing, updating, ... of files
279 *
280 * @param scmRequest request wrapping detailed parameters for the changelog command
281 * @return The SCM result of the changelog command
282 * @throws ScmException if any
283 * @since 1.8
284 */
285 ChangeLogScmResult changeLog( ChangeLogScmRequest scmRequest )
286 throws ScmException;
287
288 /**
289 * Returns the changes that have happend in the source control system between two tags.
290 * This can be adding, removing, updating, ... of files
291 *
292 * @param repository the source control system
293 * @param fileSet the files to know the changes about. Implementations can also give the changes
294 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
295 * @param startTag the start tag
296 * @param endTag the end tag
297 * @return The SCM result of the changelog command
298 * @throws ScmException if any
299 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
300 */
301 @Deprecated
302 ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, String startTag, String endTag )
303 throws ScmException;
304
305 /**
306 * Returns the changes that have happend in the source control system between two tags.
307 * This can be adding, removing, updating, ... of files
308 *
309 * @param repository the source control system
310 * @param fileSet the files to know the changes about. Implementations can also give the changes
311 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
312 * @param startVersion the start branch/tag/revision
313 * @param endVersion the end branch/tag/revision
314 * @return The SCM result of the changelog command
315 * @throws ScmException if any
316 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
317 */
318 @Deprecated
319 ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion,
320 ScmVersion endVersion )
321 throws ScmException;
322
323 /**
324 * Returns the changes that have happend in the source control system between two tags.
325 * This can be adding, removing, updating, ... of files
326 *
327 * @param repository the source control system
328 * @param fileSet the files to know the changes about. Implementations can also give the changes
329 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
330 * @param startTag the start tag
331 * @param endTag the end tag
332 * @param datePattern the date pattern use in changelog output returned by scm tool
333 * @return
334 * @throws ScmException if any
335 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
336 */
337 @Deprecated
338 ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, String startTag, String endTag,
339 String datePattern )
340 throws ScmException;
341
342 /**
343 * Returns the changes that have happend in the source control system between two tags.
344 * This can be adding, removing, updating, ... of files
345 *
346 * @param repository the source control system
347 * @param fileSet the files to know the changes about. Implementations can also give the changes
348 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
349 * @param startRevision the start revision
350 * @param endRevision the end revision
351 * @param datePattern the date pattern use in changelog output returned by scm tool
352 * @return
353 * @throws ScmException if any
354 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
355 */
356 @Deprecated
357 ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, ScmVersion startRevision,
358 ScmVersion endRevision, String datePattern )
359 throws ScmException;
360
361 /**
362 * Save the changes you have done into the repository. This will create a new version of the file or
363 * directory in the repository.
364 * <p/>
365 * When the fileSet has no entries, the fileSet.getBaseDir() is recursively committed.
366 * When the fileSet has entries, the commit is non-recursive and only the elements in the fileSet
367 * are committed.
368 *
369 * @param repository the source control system
370 * @param fileSet the files to check in (sometimes called commit)
371 * @param tag tag or revision
372 * @param message a string that is a comment on the changes that where done
373 * @return
374 * @throws ScmException if any
375 * @deprecated you must use {@link ScmProvider#checkIn(org.apache.maven.scm.repository.ScmRepository,
376 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion, String)}
377 */
378 CheckInScmResult checkIn( ScmRepository repository, ScmFileSet fileSet, String tag, String message )
379 throws ScmException;
380
381 /**
382 * Save the changes you have done into the repository. This will create a new version of the file or
383 * directory in the repository.
384 * <p/>
385 * When the fileSet has no entries, the fileSet.getBaseDir() is recursively committed.
386 * When the fileSet has entries, the commit is non-recursive and only the elements in the fileSet
387 * are committed.
388 *
389 * @param repository the source control system
390 * @param fileSet the files to check in (sometimes called commit)
391 * @param message a string that is a comment on the changes that where done
392 * @return
393 * @throws ScmException if any
394 */
395 CheckInScmResult checkIn( ScmRepository repository, ScmFileSet fileSet, String message )
396 throws ScmException;
397
398 /**
399 * Save the changes you have done into the repository. This will create a new version of the file or
400 * directory in the repository.
401 * <p/>
402 * When the fileSet has no entries, the fileSet.getBaseDir() is recursively committed.
403 * When the fileSet has entries, the commit is non-recursive and only the elements in the fileSet
404 * are committed.
405 *
406 * @param repository the source control system
407 * @param fileSet the files to check in (sometimes called commit)
408 * @param revision branch/tag/revision
409 * @param message a string that is a comment on the changes that where done
410 * @return
411 * @throws ScmException if any
412 */
413 CheckInScmResult checkIn( ScmRepository repository, ScmFileSet fileSet, ScmVersion revision, String message )
414 throws ScmException;
415
416 /**
417 * Create a copy of the repository on your local machine
418 *
419 * @param repository the source control system
420 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
421 * @param tag get the version defined by the tag
422 * @return
423 * @throws ScmException if any
424 * @deprecated you must use {@link ScmProvider#checkOut(org.apache.maven.scm.repository.ScmRepository,
425 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion)}
426 */
427 CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, String tag )
428 throws ScmException;
429
430 /**
431 * Create a copy of the repository on your local machine
432 *
433 * @param repository the source control system
434 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
435 * @return
436 * @throws ScmException if any
437 */
438 CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet )
439 throws ScmException;
440
441 /**
442 * Create a copy of the repository on your local machine
443 *
444 * @param repository the source control system
445 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
446 * @param version get the version defined by the revision, branch or tag
447 * @return
448 * @throws ScmException if any
449 */
450 CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, ScmVersion version )
451 throws ScmException;
452
453 /**
454 * Create a copy of the repository on your local machine.
455 *
456 * @param scmRepository the source control system
457 * @param scmFileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
458 * @param tag tag or revision
459 * @param recursive whether to check out recursively
460 * @return
461 * @throws ScmException if any
462 * @deprecated you must use {@link ScmProvider#checkOut(org.apache.maven.scm.repository.ScmRepository,
463 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion, boolean)}
464 */
465 CheckOutScmResult checkOut( ScmRepository scmRepository, ScmFileSet scmFileSet, String tag, boolean recursive )
466 throws ScmException;
467
468 /**
469 * Create a copy of the repository on your local machine.
470 *
471 * @param scmRepository the source control system
472 * @param scmFileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
473 * @param recursive whether to check out recursively
474 * @return
475 * @throws ScmException if any
476 */
477 CheckOutScmResult checkOut( ScmRepository scmRepository, ScmFileSet scmFileSet, boolean recursive )
478 throws ScmException;
479
480 /**
481 * Create a copy of the repository on your local machine.
482 *
483 * @param scmRepository the source control system
484 * @param scmFileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
485 * @param version get the version defined by the revision, branch or tag
486 * @param recursive whether to check out recursively
487 * @return
488 * @throws ScmException if any
489 */
490 CheckOutScmResult checkOut( ScmRepository scmRepository, ScmFileSet scmFileSet, ScmVersion version,
491 boolean recursive )
492 throws ScmException;
493
494 /**
495 * Create a diff between two branch/tag/revision.
496 *
497 * @param scmRepository the source control system
498 * @param scmFileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
499 * @param startRevision the start revision
500 * @param endRevision the end revision
501 * @return
502 * @throws ScmException if any
503 * @deprecated you must use {@link ScmProvider#diff(org.apache.maven.scm.repository.ScmRepository,
504 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion, org.apache.maven.scm.ScmVersion)}
505 */
506 DiffScmResult diff( ScmRepository scmRepository, ScmFileSet scmFileSet, String startRevision, String endRevision )
507 throws ScmException;
508
509 /**
510 * Create a diff between two branch/tag/revision.
511 *
512 * @param scmRepository the source control system
513 * @param scmFileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
514 * @param startVersion the start branch/tag/revision
515 * @param endVersion the end branch/tag/revision
516 * @return
517 * @throws ScmException if any
518 */
519 DiffScmResult diff( ScmRepository scmRepository, ScmFileSet scmFileSet, ScmVersion startVersion,
520 ScmVersion endVersion )
521 throws ScmException;
522
523 /**
524 * Create an exported copy of the repository on your local machine
525 *
526 * @param repository the source control system
527 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
528 * @param tag get the version defined by the tag
529 * @return
530 * @throws ScmException if any
531 * @deprecated you must use {@link ScmProvider#export(org.apache.maven.scm.repository.ScmRepository,
532 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion)}
533 */
534 ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, String tag )
535 throws ScmException;
536
537 /**
538 * Create an exported copy of the repository on your local machine
539 *
540 * @param repository the source control system
541 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
542 * @return
543 * @throws ScmException if any
544 */
545 ExportScmResult export( ScmRepository repository, ScmFileSet fileSet )
546 throws ScmException;
547
548 /**
549 * Create an exported copy of the repository on your local machine
550 *
551 * @param repository the source control system
552 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
553 * @param version get the version defined by the branch/tag/revision
554 * @return
555 * @throws ScmException if any
556 */
557 ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, ScmVersion version )
558 throws ScmException;
559
560 /**
561 * Create an exported copy of the repository on your local machine
562 *
563 * @param repository the source control system
564 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
565 * @param tag get the version defined by the tag
566 * @param outputDirectory the directory where the export will be stored
567 * @return
568 * @throws ScmException if any
569 * @deprecated you must use {@link ScmProvider#export(org.apache.maven.scm.repository.ScmRepository,
570 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion, String)}
571 */
572 ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, String tag, String outputDirectory )
573 throws ScmException;
574
575 /**
576 * Create an exported copy of the repository on your local machine
577 *
578 * @param repository the source control system
579 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
580 * @param version get the version defined by the branch/tag/revision
581 * @param outputDirectory the directory where the export will be stored
582 * @return
583 * @throws ScmException if any
584 */
585 ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, String outputDirectory )
586 throws ScmException;
587
588 /**
589 * Removes the given files from the source control system
590 *
591 * @param repository the source control system
592 * @param fileSet the files to be removed
593 * @param message
594 * @return
595 * @throws ScmException if any
596 */
597 RemoveScmResult remove( ScmRepository repository, ScmFileSet fileSet, String message )
598 throws ScmException;
599
600 /**
601 * Returns the status of the files in the source control system. The state of each file can be one
602 * of the {@link org.apache.maven.scm.ScmFileStatus} flags.
603 *
604 * @param repository the source control system
605 * @param fileSet the files to know the status about. Implementations can also give the changes
606 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
607 * @return
608 * @throws ScmException if any
609 */
610 StatusScmResult status( ScmRepository repository, ScmFileSet fileSet )
611 throws ScmException;
612
613 /**
614 * Tag (or label in some systems) will tag the source file with a certain tag
615 *
616 * @param repository the source control system
617 * @param fileSet the files to tag. Implementations can also give the changes
618 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
619 * @param tagName the tag name to apply to the files
620 * @return
621 * @throws ScmException if any
622 * @deprecated use {@link #tag(ScmRepository, ScmFileSet, String, ScmTagParameters)}
623 */
624 TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName )
625 throws ScmException;
626
627 /**
628 * Tag (or label in some systems) will tag the source file with a certain tag
629 *
630 * @param repository the source control system
631 * @param fileSet the files to tag. Implementations can also give the changes
632 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
633 * @param tagName the tag name to apply to the files
634 * @param message the commit message used for the tag creation
635 * @return
636 * @throws ScmException if any
637 * @deprecated use {@link #tag(ScmRepository, ScmFileSet, String, ScmTagParameters)}
638 */
639 TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName, String message )
640 throws ScmException;
641
642 /**
643 * Tag (or label in some systems) will tag the source file with a certain tag
644 *
645 * @param repository the source control system
646 * @param fileSet the files to tag. Implementations can also give the changes
647 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
648 * @param tagName the tag name to apply to the files
649 * @param scmTagParameters bean to pass some paramters for tagging {@link ScmTagParameters}
650 * @return
651 * @throws ScmException if any
652 * @since 1.2
653 */
654 TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName, ScmTagParameters scmTagParameters )
655 throws ScmException;
656
657 /**
658 * Updates the copy on the local machine with the changes in the repository
659 *
660 * @param repository the source control system
661 * @param fileSet location of your local copy
662 * @return
663 * @throws ScmException if any
664 */
665 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet )
666 throws ScmException;
667
668 /**
669 * Updates the copy on the local machine with the changes in the repository
670 *
671 * @param repository the source control system
672 * @param fileSet location of your local copy
673 * @param tag use the version defined by the tag
674 * @return
675 * @throws ScmException if any
676 * @deprecated you must use {@link ScmProvider#update(org.apache.maven.scm.repository.ScmRepository,
677 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion)}
678 */
679 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag )
680 throws ScmException;
681
682 /**
683 * Updates the copy on the local machine with the changes in the repository
684 *
685 * @param repository the source control system
686 * @param fileSet location of your local copy
687 * @param version use the version defined by the branch/tag/revision
688 * @return
689 * @throws ScmException if any
690 */
691 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version )
692 throws ScmException;
693
694 /**
695 * Updates the copy on the local machine with the changes in the repository
696 *
697 * @param repository the source control system
698 * @param fileSet location of your local copy
699 * @param tag use the version defined by the tag
700 * @param runChangelog Run the changelog command after the update
701 * @return
702 * @throws ScmException if any
703 * @deprecated you must use {@link ScmProvider#update(org.apache.maven.scm.repository.ScmRepository,
704 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion, boolean)}
705 */
706 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag, boolean runChangelog )
707 throws ScmException;
708
709 /**
710 * Updates the copy on the local machine with the changes in the repository
711 *
712 * @param repository the source control system
713 * @param fileSet location of your local copy
714 * @param runChangelog Run the changelog command after the update
715 * @return
716 * @throws ScmException if any
717 */
718 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, boolean runChangelog )
719 throws ScmException;
720
721 /**
722 * Updates the copy on the local machine with the changes in the repository
723 *
724 * @param repository the source control system
725 * @param fileSet location of your local copy
726 * @param version use the version defined by the branch/tag/revision
727 * @param runChangelog Run the changelog command after the update
728 * @return
729 * @throws ScmException if any
730 */
731 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, boolean runChangelog )
732 throws ScmException;
733
734 /**
735 * Updates the copy on the local machine with the changes in the repository
736 *
737 * @param repository the source control system
738 * @param fileSet location of your local copy
739 * @param tag use the version defined by the tag
740 * @param datePattern the date pattern use in changelog output returned by scm tool
741 * @return
742 * @throws ScmException if any
743 * @deprecated you must use {@link ScmProvider#update(org.apache.maven.scm.repository.ScmRepository,
744 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion, String)}
745 */
746 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag, String datePattern )
747 throws ScmException;
748
749 /**
750 * Updates the copy on the local machine with the changes in the repository
751 *
752 * @param repository the source control system
753 * @param fileSet location of your local copy
754 * @param version use the version defined by the branch/tag/revision
755 * @param datePattern the date pattern use in changelog output returned by scm tool
756 * @return
757 * @throws ScmException if any
758 */
759 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, String datePattern )
760 throws ScmException;
761
762 /**
763 * Updates the copy on the local machine with the changes in the repository
764 *
765 * @param repository the source control system
766 * @param fileSet location of your local copy
767 * @param tag use the version defined by the tag
768 * @param lastUpdate
769 * @return
770 * @throws ScmException if any
771 * @deprecated you must use {@link ScmProvider#update(org.apache.maven.scm.repository.ScmRepository,
772 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion, java.util.Date)}
773 */
774 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag, Date lastUpdate )
775 throws ScmException;
776
777 /**
778 * Updates the copy on the local machine with the changes in the repository
779 *
780 * @param repository the source control system
781 * @param fileSet location of your local copy
782 * @param version use the version defined by the branch/tag/revision
783 * @param lastUpdate
784 * @return
785 * @throws ScmException if any
786 */
787 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, Date lastUpdate )
788 throws ScmException;
789
790 /**
791 * Updates the copy on the local machine with the changes in the repository
792 *
793 * @param repository the source control system
794 * @param fileSet location of your local copy
795 * @param tag use the version defined by the tag
796 * @param lastUpdate Date of last update
797 * @param datePattern the date pattern use in changelog output returned by scm tool
798 * @return
799 * @throws ScmException if any
800 * @deprecated you must use {@link ScmProvider#update(org.apache.maven.scm.repository.ScmRepository,
801 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion, java.util.Date, String)}
802 */
803 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag, Date lastUpdate,
804 String datePattern )
805 throws ScmException;
806
807 /**
808 * Updates the copy on the local machine with the changes in the repository
809 *
810 * @param repository the source control system
811 * @param fileSet location of your local copy
812 * @param version use the version defined by the branch/tag/revision
813 * @param lastUpdate Date of last update
814 * @param datePattern the date pattern use in changelog output returned by scm tool
815 * @return
816 * @throws ScmException if any
817 */
818 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, Date lastUpdate,
819 String datePattern )
820 throws ScmException;
821
822 /**
823 * Make a file editable. This is used in source control systems where you look at read-only files
824 * and you need to make them not read-only anymore before you can edit them. This can also mean
825 * that no other user in the system can make the file not read-only anymore.
826 *
827 * @param repository the source control system
828 * @param fileSet the files to make editable
829 * @return
830 * @throws ScmException if any
831 */
832 EditScmResult edit( ScmRepository repository, ScmFileSet fileSet )
833 throws ScmException;
834
835 /**
836 * Make a file no longer editable. This is the conterpart of {@link #edit(
837 *org.apache.maven.scm.repository.ScmRepository, org.apache.maven.scm.ScmFileSet)}.
838 * It makes the file read-only again.
839 *
840 * @param repository the source control system
841 * @param fileSet the files to make uneditable
842 * @return
843 * @throws ScmException if any
844 */
845 UnEditScmResult unedit( ScmRepository repository, ScmFileSet fileSet )
846 throws ScmException;
847
848 /**
849 * List each element (files and directories) of <B>fileSet</B> as they exist in the repository.
850 *
851 * @param repository the source control system
852 * @param fileSet the files to list
853 * @param recursive descend recursively
854 * @param tag use the version defined by the tag
855 * @return the list of files in the repository
856 * @deprecated you must use {@link ScmProvider#list(org.apache.maven.scm.repository.ScmRepository,
857 * org.apache.maven.scm.ScmFileSet, boolean, org.apache.maven.scm.ScmVersion)}
858 */
859 ListScmResult list( ScmRepository repository, ScmFileSet fileSet, boolean recursive, String tag )
860 throws ScmException;
861
862 /**
863 * List each element (files and directories) of <B>fileSet</B> as they exist in the repository.
864 *
865 * @param repository the source control system
866 * @param fileSet the files to list
867 * @param recursive descend recursively
868 * @param version use the version defined by the branch/tag/revision
869 * @return the list of files in the repository
870 * @throws ScmException if any
871 */
872 ListScmResult list( ScmRepository repository, ScmFileSet fileSet, boolean recursive, ScmVersion version )
873 throws ScmException;
874
875 /**
876 * Returns the blame of specified file
877 *
878 * @param repository the source control system
879 * @param fileSet location of your local copy
880 * @param filename file
881 * @return blame for specified file
882 * @throws ScmException
883 * @since 1.4
884 * @deprecated use blame with {@link BlameScmRequest} parameter
885 */
886 BlameScmResult blame( ScmRepository repository, ScmFileSet fileSet, String filename )
887 throws ScmException;
888
889 /**
890 *
891 * @param blameScmRequest
892 * @return blame for the file specified in the request
893 * @throws ScmException
894 * @since 1.8
895 */
896 BlameScmResult blame( BlameScmRequest blameScmRequest )
897 throws ScmException;
898
899
900 /**
901 * Create directory/directories in the repository.
902 *
903 * @param repository
904 * @param fileSet
905 * @param createInLocal
906 * @param message
907 * @return
908 * @throws ScmException
909 */
910 MkdirScmResult mkdir( ScmRepository repository, ScmFileSet fileSet, String message, boolean createInLocal )
911 throws ScmException;
912
913 /**
914 * @param repository the source control system
915 * @param fileSet location of your local copy
916 * @param parameters some parameters (not use currently but for future use)
917 * @return if the scm implementation doesn't support "info" result will <code>null</code>
918 * @throws ScmException
919 * @since 1.5
920 */
921 InfoScmResult info( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
922 throws ScmException;
923
924 /**
925 * @param repository the source control system
926 * @param fileSet not use currently but for future use
927 * @param parameters some parameters (not use currently but for future use)
928 * @return if the scm implementation doesn't support "info" result will <code>null</code>
929 * @throws ScmException
930 * @since 1.6
931 */
932 RemoteInfoScmResult remoteInfo( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
933 throws ScmException;
934 }