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ø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 ScmException if any
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 TODO
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 TODO
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 TODO
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 TODO
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 TODO
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 TODO
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 TODO
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 TODO
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 TODO
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 TODO
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 TODO
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 TODO
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 TODO
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 TODO
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 TODO
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 * @throws ScmException if any
433 */
434 ListScmResult list( ScmRepository repository, ScmFileSet fileSet, boolean recursive, ScmVersion version )
435 throws ScmException;
436
437 /**
438 * Create new directory/directories in the repository.
439 *
440 * @param repository TODO
441 * @param fileSet TODO
442 * @param message TODO
443 * @param createInLocal TODO
444 * @return TODO
445 * @throws ScmException if any
446 */
447 MkdirScmResult mkdir( ScmRepository repository, ScmFileSet fileSet, String message, boolean createInLocal )
448 throws ScmException;
449
450 /**
451 * Removes the given files from the source control system
452 *
453 * @param repository the source control system
454 * @param fileSet the files to be removed
455 * @param message TODO
456 * @return TODO
457 * @throws ScmException if any
458 */
459 RemoveScmResult remove( ScmRepository repository, ScmFileSet fileSet, String message )
460 throws ScmException;
461
462 /**
463 * Returns the status of the files in the source control system. The state of each file can be one of the
464 * {@link org.apache.maven.scm.ScmFileStatus} flags.
465 *
466 * @param repository the source control system
467 * @param fileSet the files to know the status about. Implementations can also give the changes from the
468 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
469 * @return TODO
470 * @throws ScmException if any
471 */
472 StatusScmResult status( ScmRepository repository, ScmFileSet fileSet )
473 throws ScmException;
474
475 /**
476 * Tag (or label in some systems) will tag the source file with a certain tag
477 *
478 * @param repository the source control system
479 * @param fileSet the files to tag. Implementations can also give the changes from the
480 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
481 * @param tagName the tag name to apply to the files
482 * @return TODO
483 * @throws ScmException if any
484 */
485 TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName )
486 throws ScmException;
487
488 /**
489 * Tag (or label in some systems) will tag the source file with a certain tag
490 *
491 * @param repository the source control system
492 * @param fileSet the files to tag. Implementations can also give the changes from the
493 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
494 * @param tagName the tag name to apply to the files
495 * @param message the commit message used for the tag creation
496 * @return TODO
497 * @throws ScmException if any
498 */
499 TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName, String message )
500 throws ScmException;
501
502 /**
503 * Make a file no longer editable. This is the conterpart of
504 * {@link #edit(org.apache.maven.scm.repository.ScmRepository, org.apache.maven.scm.ScmFileSet)}. It makes the file
505 * read-only again.
506 *
507 * @param repository the source control system
508 * @param fileSet the files to make uneditable
509 * @return TODO
510 * @throws ScmException if any
511 */
512 UnEditScmResult unedit( ScmRepository repository, ScmFileSet fileSet )
513 throws ScmException;
514
515 /**
516 * Updates the copy on the local machine with the changes in the repository
517 *
518 * @param repository the source control system
519 * @param fileSet location of your local copy
520 * @return TODO
521 * @throws ScmException if any
522 */
523 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet )
524 throws ScmException;
525
526 /**
527 * Updates the copy on the local machine with the changes in the repository
528 *
529 * @param repository the source control system
530 * @param fileSet location of your local copy
531 * @param version use the version defined by the branch/tag/revision
532 * @return TODO
533 * @throws ScmException if any
534 */
535 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version )
536 throws ScmException;
537
538 /**
539 * Updates the copy on the local machine with the changes in the repository
540 *
541 * @param repository the source control system
542 * @param fileSet location of your local copy
543 * @param runChangelog Run the changelog command after the update
544 * @return TODO
545 * @throws ScmException if any
546 */
547 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, boolean runChangelog )
548 throws ScmException;
549
550 /**
551 * Updates the copy on the local machine with the changes in the repository
552 *
553 * @param repository the source control system
554 * @param fileSet location of your local copy
555 * @param version use the version defined by the branch/tag/revision
556 * @param runChangelog Run the changelog command after the update
557 * @return TODO
558 * @throws ScmException if any
559 */
560 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, boolean runChangelog )
561 throws ScmException;
562
563 /**
564 * Updates the copy on the local machine with the changes in the repository
565 *
566 * @param repository the source control system
567 * @param fileSet location of your local copy
568 * @param datePattern the date pattern use in changelog output returned by scm tool
569 * @return TODO
570 * @throws ScmException if any
571 */
572 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String datePattern )
573 throws ScmException;
574
575 /**
576 * Updates the copy on the local machine with the changes in the repository
577 *
578 * @param repository the source control system
579 * @param fileSet location of your local copy
580 * @param version use the version defined by the branch/tag/revision
581 * @param datePattern the date pattern use in changelog output returned by scm tool
582 * @return TODO
583 * @throws ScmException if any
584 */
585 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, String datePattern )
586 throws ScmException;
587
588 /**
589 * Updates the copy on the local machine with the changes in the repository
590 *
591 * @param repository the source control system
592 * @param fileSet location of your local copy
593 * @param lastUpdate TODO
594 * @return TODO
595 * @throws ScmException if any
596 */
597 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, Date lastUpdate )
598 throws ScmException;
599
600 /**
601 * Updates the copy on the local machine with the changes in the repository
602 *
603 * @param repository the source control system
604 * @param fileSet location of your local copy
605 * @param version use the version defined by the branch/tag/revision
606 * @param lastUpdate TODO
607 * @return TODO
608 * @throws ScmException if any
609 */
610 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, Date lastUpdate )
611 throws ScmException;
612
613 /**
614 * Updates the copy on the local machine with the changes in the repository
615 *
616 * @param repository the source control system
617 * @param fileSet location of your local copy
618 * @param lastUpdate Date of last update
619 * @param datePattern the date pattern use in changelog output returned by scm tool
620 * @return TODO
621 * @throws ScmException if any
622 */
623 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, Date lastUpdate, String datePattern )
624 throws ScmException;
625
626 /**
627 * Updates the copy on the local machine with the changes in the repository
628 *
629 * @param repository the source control system
630 * @param fileSet location of your local copy
631 * @param version use the version defined by the branch/tag/revision
632 * @param lastUpdate Date of last update
633 * @param datePattern the date pattern use in changelog output returned by scm tool
634 * @return TODO
635 * @throws ScmException if any
636 */
637 UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion version, Date lastUpdate,
638 String datePattern )
639 throws ScmException;
640
641 /**
642 * Returns the blame of specified file
643 *
644 * @param repository the source control system
645 * @param fileSet location of your local copy
646 * @param filename file
647 * @return blame for specified file
648 * @throws ScmException if any
649 * @since 1.4
650 */
651 BlameScmResult blame( ScmRepository repository, ScmFileSet fileSet, String filename )
652 throws ScmException;
653
654 /**
655 * @param blameScmRequest TODO
656 * @return blame for specified file
657 * @throws ScmException if any
658 * @since 1.4
659 */
660 BlameScmResult blame( BlameScmRequest blameScmRequest )
661 throws ScmException;
662 }