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