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 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 }