View Javadoc
1   package org.apache.maven.scm.manager;
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.ScmBranch;
23  import org.apache.maven.scm.ScmException;
24  import org.apache.maven.scm.ScmFileSet;
25  import org.apache.maven.scm.ScmVersion;
26  import org.apache.maven.scm.command.add.AddScmResult;
27  import org.apache.maven.scm.command.blame.BlameScmRequest;
28  import org.apache.maven.scm.command.blame.BlameScmResult;
29  import org.apache.maven.scm.command.branch.BranchScmResult;
30  import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
31  import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
32  import org.apache.maven.scm.command.checkin.CheckInScmResult;
33  import org.apache.maven.scm.command.checkout.CheckOutScmResult;
34  import org.apache.maven.scm.command.diff.DiffScmResult;
35  import org.apache.maven.scm.command.edit.EditScmResult;
36  import org.apache.maven.scm.command.export.ExportScmResult;
37  import org.apache.maven.scm.command.list.ListScmResult;
38  import org.apache.maven.scm.command.mkdir.MkdirScmResult;
39  import org.apache.maven.scm.command.remove.RemoveScmResult;
40  import org.apache.maven.scm.command.status.StatusScmResult;
41  import org.apache.maven.scm.command.tag.TagScmResult;
42  import org.apache.maven.scm.command.unedit.UnEditScmResult;
43  import org.apache.maven.scm.command.update.UpdateScmResult;
44  import org.apache.maven.scm.provider.ScmProvider;
45  import org.apache.maven.scm.repository.ScmRepository;
46  import org.apache.maven.scm.repository.ScmRepositoryException;
47  import org.apache.maven.scm.repository.UnknownRepositoryStructure;
48  
49  import java.io.File;
50  import java.util.Date;
51  import java.util.List;
52  
53  /**
54   * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
55   * @author <a href="mailto:brett@apache.org">Brett Porter</a>
56   * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
57   * @author Olivier Lamy
58   *
59   */
60  public interface ScmManager
61  {
62      String ROLE = ScmManager.class.getName();
63  
64      // ----------------------------------------------------------------------
65      // Repository
66      // ----------------------------------------------------------------------
67  
68      /**
69       * Generate a SCMRepository from a SCM url.
70       *
71       * @param scmUrl the scm url
72       * @return The scm repository
73       * @throws ScmRepositoryException     if an error occurs in the scm repository construction
74       * @throws NoSuchScmProviderException if the provider doesn't exist
75       */
76      ScmRepository makeScmRepository( String scmUrl )
77          throws ScmRepositoryException, NoSuchScmProviderException;
78  
79      ScmRepository makeProviderScmRepository( String providerType, File path )
80          throws ScmRepositoryException, UnknownRepositoryStructure, NoSuchScmProviderException;
81  
82      /**
83       * Validate a SCM URL.
84       *
85       * @param scmUrl the SCM URL to validate
86       * @return <code>List</code> of <code>String</code> objects with the messages returned by the SCM provider
87       */
88      List<String> validateScmRepository( String scmUrl );
89  
90      ScmProvider getProviderByUrl( String scmUrl )
91          throws ScmRepositoryException, NoSuchScmProviderException;
92  
93      /**
94       * Returns the default provider registered for this providerType or a specific implementation if the
95       * 'maven.scm.provider.providerType.implementation' system property is defined. For example:
96       * maven.scm.provider.cvs.implementation=cvs_native
97       *
98       * @param providerType The provider type (cvs, svn...)
99       * @return The scm provider
100      * @throws NoSuchScmProviderException if the provider doesn't exist
101      */
102     ScmProvider getProviderByType( String providerType )
103         throws NoSuchScmProviderException;
104 
105     ScmProvider getProviderByRepository( ScmRepository repository )
106         throws NoSuchScmProviderException;
107 
108     /**
109      * Set a provider to be used for a type of SCM. If there was already a designed provider for that type it will be
110      * replaced.
111      *
112      * @param providerType the type of SCM, eg. <code>svn</code>, <code>cvs</code>
113      * @param provider     the provider that will be used for that SCM type
114      */
115     void setScmProvider( String providerType, ScmProvider provider );
116 
117     /**
118      * Set the provider implementation
119      *
120      * @param providerType           The provider type, eg. <code>cvs</code>
121      * @param providerImplementation The provider implementation (the role-hint of the provider), eg. <code>cvs</code>,
122      *                               <code>cvs_native</code>
123      */
124     void setScmProviderImplementation( String providerType, String providerImplementation );
125 
126     /**
127      * Adds the given files to the source control system
128      *
129      * @param repository the source control system
130      * @param fileSet    the files to be added
131      * @return an {@link org.apache.maven.scm.command.add.AddScmResult} that contains the files that have been added
132      * @throws org.apache.maven.scm.ScmException
133      *
134      */
135     AddScmResult add( ScmRepository repository, ScmFileSet fileSet )
136         throws ScmException;
137 
138     /**
139      * Adds the given files to the source control system
140      *
141      * @param repository the source control system
142      * @param fileSet    the files to be added
143      * @param message    a string that is a comment on the new added file
144      * @return an {@link AddScmResult} that contains the files that have been added
145      * @throws ScmException if any
146      */
147     AddScmResult add( ScmRepository repository, ScmFileSet fileSet, String message )
148         throws ScmException;
149 
150     /**
151      * Branch (or label in some systems) will create a branch of the source file with a certain branch name
152      *
153      * @param repository the source control system
154      * @param fileSet    the files to branch. Implementations can also give the changes from the
155      *                   {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
156      * @param branchName the branch name to apply to the files
157      * @return
158      * @throws ScmException if any
159      */
160     BranchScmResult branch( ScmRepository repository, ScmFileSet fileSet, String branchName )
161         throws ScmException;
162 
163     /**
164      * Branch (or label in some systems) will create a branch of the source file with a certain branch name
165      *
166      * @param repository the source control system
167      * @param fileSet    the files to branch. Implementations can also give the changes from the
168      *                   {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
169      * @param branchName the branch name to apply to the files
170      * @param message    the commit message used for the tag creation
171      * @return
172      * @throws ScmException if any
173      */
174     BranchScmResult branch( ScmRepository repository, ScmFileSet fileSet, String branchName, String message )
175         throws ScmException;
176 
177     /**
178      * Returns the changes that have happend in the source control system in a certain period of time. This can be
179      * adding, removing, updating, ... of files
180      *
181      * @param repository the source control system
182      * @param fileSet    the files to know the changes about. Implementations can also give the changes from the
183      *                   {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
184      * @param startDate  the start date of the period
185      * @param endDate    the end date of the period
186      * @param numDays    the number days before the current time if startdate and enddate are null
187      * @param branch     the branch/tag
188      * @return The SCM result of the changelog command
189      * @throws ScmException if any
190      * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
191      */
192     @Deprecated
193     ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
194                                   int numDays, ScmBranch branch )
195         throws ScmException;
196 
197     /**
198      * Returns the changes that have happend in the source control system in a certain period of time. This can be
199      * adding, removing, updating, ... of files
200      *
201      * @param repository  the source control system
202      * @param fileSet     the files to know the changes about. Implementations can also give the changes from the
203      *                    {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
204      * @param startDate   the start date of the period
205      * @param endDate     the end date of the period
206      * @param numDays     the number days before the current time if startdate and enddate are null
207      * @param branch      the branch/tag
208      * @param datePattern the date pattern use in changelog output returned by scm tool
209      * @return The SCM result of the changelog command
210      * @throws ScmException if any
211      * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
212      */
213     @Deprecated
214     ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
215                                   int numDays, ScmBranch branch, String datePattern )
216         throws ScmException;
217 
218     /**
219      * Returns the changes that have happend in the source control system in a certain period of time. This can be
220      * adding, removing, updating, ... of files
221      *
222      * @param scmRequest request wrapping detailed parameters for the changelog command
223      * @return The SCM result of the changelog command
224      * @throws ScmException if any
225      * @since 1.8
226      */
227     ChangeLogScmResult changeLog( ChangeLogScmRequest scmRequest )
228         throws ScmException;
229 
230     /**
231      * Returns the changes that have happend in the source control system between two tags. This can be adding,
232      * removing, updating, ... of files
233      *
234      * @param repository   the source control system
235      * @param fileSet      the files to know the changes about. Implementations can also give the changes from the
236      *                     {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
237      * @param startVersion the start branch/tag/revision
238      * @param endVersion   the end branch/tag/revision
239      * @return The SCM result of the changelog command
240      * @throws ScmException if any
241      * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
242      */
243     @Deprecated
244     ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion,
245                                   ScmVersion endVersion )
246         throws ScmException;
247 
248     /**
249      * Returns the changes that have happend in the source control system between two tags. This can be adding,
250      * removing, updating, ... of files
251      *
252      * @param repository    the source control system
253      * @param fileSet       the files to know the changes about. Implementations can also give the changes from the
254      *                      {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
255      * @param startRevision the start revision
256      * @param endRevision   the end revision
257      * @param datePattern   the date pattern use in changelog output returned by scm tool
258      * @return
259      * @throws ScmException if any
260      * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
261      */
262     @Deprecated
263     ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, ScmVersion startRevision,
264                                   ScmVersion endRevision, String datePattern )
265         throws ScmException;
266 
267     /**
268      * Save the changes you have done into the repository. This will create a new version of the file or directory in
269      * the repository.
270      * <p/>
271      * When the fileSet has no entries, the fileSet.getBaseDir() is recursively committed. When the fileSet has entries,
272      * the commit is non-recursive and only the elements in the fileSet are committed.
273      *
274      * @param repository the source control system
275      * @param fileSet    the files to check in (sometimes called commit)
276      * @param message    a string that is a comment on the changes that where done
277      * @return
278      * @throws ScmException if any
279      */
280     CheckInScmResult checkIn( ScmRepository repository, ScmFileSet fileSet, String message )
281         throws ScmException;
282 
283     /**
284      * Save the changes you have done into the repository. This will create a new version of the file or directory in
285      * the repository.
286      * <p/>
287      * When the fileSet has no entries, the fileSet.getBaseDir() is recursively committed. When the fileSet has entries,
288      * the commit is non-recursive and only the elements in the fileSet are committed.
289      *
290      * @param repository the source control system
291      * @param fileSet    the files to check in (sometimes called commit)
292      * @param revision   branch/tag/revision
293      * @param message    a string that is a comment on the changes that where done
294      * @return
295      * @throws ScmException if any
296      */
297     CheckInScmResult checkIn( ScmRepository repository, ScmFileSet fileSet, ScmVersion revision, String message )
298         throws ScmException;
299 
300     /**
301      * Create a copy of the repository on your local machine
302      *
303      * @param repository the source control system
304      * @param fileSet    the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
305      * @return
306      * @throws ScmException if any
307      */
308     CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet )
309         throws ScmException;
310 
311     /**
312      * Create a copy of the repository on your local machine
313      *
314      * @param repository the source control system
315      * @param fileSet    the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
316      * @param version    get the version defined by the revision, branch or tag
317      * @return
318      * @throws ScmException if any
319      */
320     CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, ScmVersion version )
321         throws ScmException;
322 
323     /**
324      * Create a copy of the repository on your local machine.
325      *
326      * @param scmRepository the source control system
327      * @param scmFileSet    the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
328      * @param recursive     whether to check out recursively
329      * @return
330      * @throws ScmException if any
331      */
332     CheckOutScmResult checkOut( ScmRepository scmRepository, ScmFileSet scmFileSet, boolean recursive )
333         throws ScmException;
334 
335     /**
336      * Create a copy of the repository on your local machine.
337      *
338      * @param scmRepository the source control system
339      * @param scmFileSet    the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
340      * @param version       get the version defined by the revision, branch or tag
341      * @param recursive     whether to check out recursively
342      * @return
343      * @throws ScmException if any
344      */
345     CheckOutScmResult checkOut( ScmRepository scmRepository, ScmFileSet scmFileSet, ScmVersion version,
346                                 boolean recursive )
347         throws ScmException;
348 
349     /**
350      * Create a diff between two branch/tag/revision.
351      *
352      * @param scmRepository the source control system
353      * @param scmFileSet    the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
354      * @param startVersion  the start branch/tag/revision
355      * @param endVersion    the end branch/tag/revision
356      * @return
357      * @throws ScmException if any
358      */
359     DiffScmResult diff( ScmRepository scmRepository, ScmFileSet scmFileSet, ScmVersion startVersion,
360                         ScmVersion endVersion )
361         throws ScmException;
362 
363     /**
364      * Make a file editable. This is used in source control systems where you look at read-only files and you need to
365      * make them not read-only anymore before you can edit them. This can also mean that no other user in the system can
366      * make the file not read-only anymore.
367      *
368      * @param repository the source control system
369      * @param fileSet    the files to make editable
370      * @return
371      * @throws ScmException if any
372      */
373     EditScmResult edit( ScmRepository repository, ScmFileSet fileSet )
374         throws ScmException;
375 
376     /**
377      * Create an exported copy of the repository on your local machine
378      *
379      * @param repository the source control system
380      * @param fileSet    the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
381      * @return
382      * @throws ScmException if any
383      */
384     ExportScmResult export( ScmRepository repository, ScmFileSet fileSet )
385         throws ScmException;
386 
387     /**
388      * Create an exported copy of the repository on your local machine
389      *
390      * @param repository the source control system
391      * @param fileSet    the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
392      * @param version    get the version defined by the branch/tag/revision
393      * @return
394      * @throws ScmException if any
395      */
396     ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, ScmVersion version )
397         throws ScmException;
398 
399     /**
400      * Create an exported copy of the repository on your local machine
401      *
402      * @param repository      the source control system
403      * @param fileSet         the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
404      * @param outputDirectory the directory where the export will be stored
405      * @return
406      * @throws ScmException if any
407      */
408     ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, String outputDirectory )
409         throws ScmException;
410 
411     /**
412      * Create an exported copy of the repository on your local machine
413      *
414      * @param repository      the source control system
415      * @param fileSet         the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
416      * @param version         get the version defined by the branch/tag/revision
417      * @param outputDirectory the directory where the export will be stored
418      * @return
419      * @throws ScmException if any
420      */
421     ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, String outputDirectory )
422         throws ScmException;
423 
424     /**
425      * List each element (files and directories) of <B>fileSet</B> as they exist in the repository.
426      *
427      * @param repository the source control system
428      * @param fileSet    the files to list
429      * @param recursive  descend recursively
430      * @param version    use the version defined by the branch/tag/revision
431      * @return the list of files in the repository
432      */
433     ListScmResult list( ScmRepository repository, ScmFileSet fileSet, boolean recursive, ScmVersion version )
434         throws ScmException;
435 
436     /**
437      * Create new directory/directories in the repository.
438      *
439      * @param repository
440      * @param fileSet
441      * @param message
442      * @param createInLocal
443      * @return
444      * @throws ScmException
445      */
446     MkdirScmResult mkdir( ScmRepository repository, ScmFileSet fileSet, String message, boolean createInLocal )
447         throws ScmException;
448 
449     /**
450      * Removes the given files from the source control system
451      *
452      * @param repository the source control system
453      * @param fileSet    the files to be removed
454      * @param message
455      * @return
456      * @throws ScmException if any
457      */
458     RemoveScmResult remove( ScmRepository repository, ScmFileSet fileSet, String message )
459         throws ScmException;
460 
461     /**
462      * Returns the status of the files in the source control system. The state of each file can be one of the
463      * {@link org.apache.maven.scm.ScmFileStatus} flags.
464      *
465      * @param repository the source control system
466      * @param fileSet    the files to know the status about. Implementations can also give the changes from the
467      *                   {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
468      * @return
469      * @throws ScmException if any
470      */
471     StatusScmResult status( ScmRepository repository, ScmFileSet fileSet )
472         throws ScmException;
473 
474     /**
475      * Tag (or label in some systems) will tag the source file with a certain tag
476      *
477      * @param repository the source control system
478      * @param fileSet    the files to tag. Implementations can also give the changes from the
479      *                   {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
480      * @param tagName    the tag name to apply to the files
481      * @return
482      * @throws ScmException if any
483      */
484     TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName )
485         throws ScmException;
486 
487     /**
488      * Tag (or label in some systems) will tag the source file with a certain tag
489      *
490      * @param repository the source control system
491      * @param fileSet    the files to tag. Implementations can also give the changes from the
492      *                   {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
493      * @param tagName    the tag name to apply to the files
494      * @param message    the commit message used for the tag creation
495      * @return
496      * @throws ScmException if any
497      */
498     TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName, String message )
499         throws ScmException;
500 
501     /**
502      * Make a file no longer editable. This is the conterpart of
503      * {@link #edit(org.apache.maven.scm.repository.ScmRepository, org.apache.maven.scm.ScmFileSet)}. It makes the file
504      * read-only again.
505      *
506      * @param repository the source control system
507      * @param fileSet    the files to make uneditable
508      * @return
509      * @throws ScmException if any
510      */
511     UnEditScmResult unedit( ScmRepository repository, ScmFileSet fileSet )
512         throws ScmException;
513 
514     /**
515      * Updates the copy on the local machine with the changes in the repository
516      *
517      * @param repository the source control system
518      * @param fileSet    location of your local copy
519      * @return
520      * @throws ScmException if any
521      */
522     UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet )
523         throws ScmException;
524 
525     /**
526      * Updates the copy on the local machine with the changes in the repository
527      *
528      * @param repository the source control system
529      * @param fileSet    location of your local copy
530      * @param version    use the version defined by the branch/tag/revision
531      * @return
532      * @throws ScmException if any
533      */
534     UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version )
535         throws ScmException;
536 
537     /**
538      * Updates the copy on the local machine with the changes in the repository
539      *
540      * @param repository   the source control system
541      * @param fileSet      location of your local copy
542      * @param runChangelog Run the changelog command after the update
543      * @return
544      * @throws ScmException if any
545      */
546     UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, boolean runChangelog )
547         throws ScmException;
548 
549     /**
550      * Updates the copy on the local machine with the changes in the repository
551      *
552      * @param repository   the source control system
553      * @param fileSet      location of your local copy
554      * @param version      use the version defined by the branch/tag/revision
555      * @param runChangelog Run the changelog command after the update
556      * @return
557      * @throws ScmException if any
558      */
559     UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, boolean runChangelog )
560         throws ScmException;
561 
562     /**
563      * Updates the copy on the local machine with the changes in the repository
564      *
565      * @param repository  the source control system
566      * @param fileSet     location of your local copy
567      * @param datePattern the date pattern use in changelog output returned by scm tool
568      * @return
569      * @throws ScmException if any
570      */
571     UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String datePattern )
572         throws ScmException;
573 
574     /**
575      * Updates the copy on the local machine with the changes in the repository
576      *
577      * @param repository  the source control system
578      * @param fileSet     location of your local copy
579      * @param version     use the version defined by the branch/tag/revision
580      * @param datePattern the date pattern use in changelog output returned by scm tool
581      * @return
582      * @throws ScmException if any
583      */
584     UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, String datePattern )
585         throws ScmException;
586 
587     /**
588      * Updates the copy on the local machine with the changes in the repository
589      *
590      * @param repository the source control system
591      * @param fileSet    location of your local copy
592      * @param lastUpdate
593      * @return
594      * @throws ScmException if any
595      */
596     UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, Date lastUpdate )
597         throws ScmException;
598 
599     /**
600      * Updates the copy on the local machine with the changes in the repository
601      *
602      * @param repository the source control system
603      * @param fileSet    location of your local copy
604      * @param version    use the version defined by the branch/tag/revision
605      * @param lastUpdate
606      * @return
607      * @throws ScmException if any
608      */
609     UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, Date lastUpdate )
610         throws ScmException;
611 
612     /**
613      * Updates the copy on the local machine with the changes in the repository
614      *
615      * @param repository  the source control system
616      * @param fileSet     location of your local copy
617      * @param lastUpdate  Date of last update
618      * @param datePattern the date pattern use in changelog output returned by scm tool
619      * @return
620      * @throws ScmException if any
621      */
622     UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, Date lastUpdate, String datePattern )
623         throws ScmException;
624 
625     /**
626      * Updates the copy on the local machine with the changes in the repository
627      *
628      * @param repository  the source control system
629      * @param fileSet     location of your local copy
630      * @param version     use the version defined by the branch/tag/revision
631      * @param lastUpdate  Date of last update
632      * @param datePattern the date pattern use in changelog output returned by scm tool
633      * @return
634      * @throws ScmException if any
635      */
636     UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, Date lastUpdate,
637                             String datePattern )
638         throws ScmException;
639 
640     /**
641      * Returns the blame of specified file
642      *
643      * @param repository the source control system
644      * @param fileSet    location of your local copy
645      * @param filename   file
646      * @return blame for specified file
647      * @throws ScmException if any
648      * @since 1.4
649      */
650     BlameScmResult blame( ScmRepository repository, ScmFileSet fileSet, String filename )
651         throws ScmException;
652 
653     /**
654      * @param blameScmRequest
655      * @return blame for specified file
656      * @throws ScmException if any
657      * @since 1.4
658      */
659     BlameScmResult blame( BlameScmRequest blameScmRequest )
660         throws ScmException;
661 }