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