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