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 }