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