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 }