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