001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 */ 019package org.apache.maven.scm.manager; 020 021import java.io.File; 022import java.util.Date; 023import java.util.List; 024 025import org.apache.maven.scm.ScmBranch; 026import org.apache.maven.scm.ScmException; 027import org.apache.maven.scm.ScmFileSet; 028import org.apache.maven.scm.ScmVersion; 029import org.apache.maven.scm.command.add.AddScmResult; 030import org.apache.maven.scm.command.blame.BlameScmRequest; 031import org.apache.maven.scm.command.blame.BlameScmResult; 032import org.apache.maven.scm.command.branch.BranchScmResult; 033import org.apache.maven.scm.command.changelog.ChangeLogScmRequest; 034import org.apache.maven.scm.command.changelog.ChangeLogScmResult; 035import org.apache.maven.scm.command.checkin.CheckInScmResult; 036import org.apache.maven.scm.command.checkout.CheckOutScmResult; 037import org.apache.maven.scm.command.diff.DiffScmResult; 038import org.apache.maven.scm.command.edit.EditScmResult; 039import org.apache.maven.scm.command.export.ExportScmResult; 040import org.apache.maven.scm.command.list.ListScmResult; 041import org.apache.maven.scm.command.mkdir.MkdirScmResult; 042import org.apache.maven.scm.command.remove.RemoveScmResult; 043import org.apache.maven.scm.command.status.StatusScmResult; 044import org.apache.maven.scm.command.tag.TagScmResult; 045import org.apache.maven.scm.command.unedit.UnEditScmResult; 046import org.apache.maven.scm.command.update.UpdateScmResult; 047import org.apache.maven.scm.provider.ScmProvider; 048import org.apache.maven.scm.repository.ScmRepository; 049import org.apache.maven.scm.repository.ScmRepositoryException; 050import org.apache.maven.scm.repository.UnknownRepositoryStructure; 051 052/** 053 * @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a> 054 * @author <a href="mailto:brett@apache.org">Brett Porter</a> 055 * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a> 056 * @author Olivier Lamy 057 * 058 */ 059public interface ScmManager { 060 // ---------------------------------------------------------------------- 061 // Repository 062 // ---------------------------------------------------------------------- 063 064 /** 065 * Generate a SCMRepository from a SCM url. 066 * 067 * @param scmUrl the scm url 068 * @return The scm repository 069 * @throws ScmRepositoryException if an error occurs in the scm repository construction 070 * @throws NoSuchScmProviderException if the provider doesn't exist 071 */ 072 ScmRepository makeScmRepository(String scmUrl) throws ScmRepositoryException, NoSuchScmProviderException; 073 074 ScmRepository makeProviderScmRepository(String providerType, File path) 075 throws ScmRepositoryException, UnknownRepositoryStructure, NoSuchScmProviderException; 076 077 /** 078 * Validate a SCM URL. 079 * 080 * @param scmUrl the SCM URL to validate 081 * @return <code>List</code> of <code>String</code> objects with the messages returned by the SCM provider 082 */ 083 List<String> validateScmRepository(String scmUrl); 084 085 ScmProvider getProviderByUrl(String scmUrl) throws ScmRepositoryException, NoSuchScmProviderException; 086 087 /** 088 * Returns the default provider registered for this providerType or a specific implementation if the 089 * 'maven.scm.provider.providerType.implementation' system property is defined. For example: 090 * maven.scm.provider.git.implementation=git 091 * 092 * @param providerType The provider type (git, svn...) 093 * @return The scm provider 094 * @throws NoSuchScmProviderException if the provider doesn't exist 095 */ 096 ScmProvider getProviderByType(String providerType) throws NoSuchScmProviderException; 097 098 ScmProvider getProviderByRepository(ScmRepository repository) throws NoSuchScmProviderException; 099 100 /** 101 * Set a provider to be used for a type of SCM. If there was already a designed provider for that type it will be 102 * replaced. 103 * 104 * @param providerType the type of SCM, eg. <code>svn</code>, <code>git</code> 105 * @param provider the provider that will be used for that SCM type 106 */ 107 void setScmProvider(String providerType, ScmProvider provider); 108 109 /** 110 * Set the provider implementation 111 * 112 * @param providerType The provider type, eg. <code>git</code> 113 * @param providerImplementation The provider implementation (the role-hint of the provider), eg. <code>git</code>, 114 * <code>svn</code> 115 */ 116 void setScmProviderImplementation(String providerType, String providerImplementation); 117 118 /** 119 * Adds the given files to the source control system 120 * 121 * @param repository the source control system 122 * @param fileSet the files to be added 123 * @return an {@link AddScmResult} that contains the file paths (relative to {@code fileSet.getBasedir()}) that 124 * have been added 125 * @throws ScmException if any 126 * 127 */ 128 AddScmResult add(ScmRepository repository, ScmFileSet fileSet) throws ScmException; 129 130 /** 131 * Adds the given files to the source control system 132 * 133 * @param repository the source control system 134 * @param fileSet the files to be added 135 * @param message a string that is a comment on the new added file 136 * @return an {@link AddScmResult} that contains the file paths (relative to {@code fileSet.getBasedir()}) that 137 * have been added 138 * @throws ScmException if any 139 */ 140 AddScmResult add(ScmRepository repository, ScmFileSet fileSet, String message) throws ScmException; 141 142 /** 143 * Branch (or label in some systems) will create a branch of the source file with a certain branch name 144 * 145 * @param repository the source control system 146 * @param fileSet the files to branch. Implementations can also give the changes from the 147 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 148 * @param branchName the branch name to apply to the files 149 * @return TODO 150 * @throws ScmException if any 151 */ 152 BranchScmResult branch(ScmRepository repository, ScmFileSet fileSet, String branchName) throws ScmException; 153 154 /** 155 * Branch (or label in some systems) will create a branch of the source file with a certain branch name 156 * 157 * @param repository the source control system 158 * @param fileSet the files to branch. Implementations can also give the changes from the 159 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 160 * @param branchName the branch name to apply to the files 161 * @param message the commit message used for the tag creation 162 * @return TODO 163 * @throws ScmException if any 164 */ 165 BranchScmResult branch(ScmRepository repository, ScmFileSet fileSet, String branchName, String message) 166 throws ScmException; 167 168 /** 169 * Returns the changes that have happend in the source control system in a certain period of time. This can be 170 * adding, removing, updating, ... of files 171 * 172 * @param repository the source control system 173 * @param fileSet the files to know the changes about. Implementations can also give the changes from the 174 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 175 * @param startDate the start date of the period 176 * @param endDate the end date of the period 177 * @param numDays the number days before the current time if startdate and enddate are null 178 * @param branch the branch/tag 179 * @return The SCM result of the changelog command 180 * @throws ScmException if any 181 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead 182 */ 183 @Deprecated 184 ChangeLogScmResult changeLog( 185 ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate, int numDays, ScmBranch branch) 186 throws ScmException; 187 188 /** 189 * Returns the changes that have happend in the source control system in a certain period of time. This can be 190 * adding, removing, updating, ... of files 191 * 192 * @param repository the source control system 193 * @param fileSet the files to know the changes about. Implementations can also give the changes from the 194 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 195 * @param startDate the start date of the period 196 * @param endDate the end date of the period 197 * @param numDays the number days before the current time if startdate and enddate are null 198 * @param branch the branch/tag 199 * @param datePattern the date pattern use in changelog output returned by scm tool 200 * @return The SCM result of the changelog command 201 * @throws ScmException if any 202 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead 203 */ 204 @Deprecated 205 ChangeLogScmResult changeLog( 206 ScmRepository repository, 207 ScmFileSet fileSet, 208 Date startDate, 209 Date endDate, 210 int numDays, 211 ScmBranch branch, 212 String datePattern) 213 throws ScmException; 214 215 /** 216 * Returns the changes that have happend in the source control system in a certain period of time. This can be 217 * adding, removing, updating, ... of files 218 * 219 * @param scmRequest request wrapping detailed parameters for the changelog command 220 * @return The SCM result of the changelog command 221 * @throws ScmException if any 222 * @since 1.8 223 */ 224 ChangeLogScmResult changeLog(ChangeLogScmRequest scmRequest) throws ScmException; 225 226 /** 227 * Returns the changes that have happend in the source control system between two tags. This can be adding, 228 * removing, updating, ... of files 229 * 230 * @param repository the source control system 231 * @param fileSet the files to know the changes about. Implementations can also give the changes from the 232 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 233 * @param startVersion the start branch/tag/revision 234 * @param endVersion the end branch/tag/revision 235 * @return The SCM result of the changelog command 236 * @throws ScmException if any 237 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead 238 */ 239 @Deprecated 240 ChangeLogScmResult changeLog( 241 ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion, ScmVersion endVersion) 242 throws ScmException; 243 244 /** 245 * Returns the changes that have happend in the source control system between two tags. This can be adding, 246 * removing, updating, ... of files 247 * 248 * @param repository the source control system 249 * @param fileSet the files to know the changes about. Implementations can also give the changes from the 250 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 251 * @param startRevision the start revision 252 * @param endRevision the end revision 253 * @param datePattern the date pattern use in changelog output returned by scm tool 254 * @return TODO 255 * @throws ScmException if any 256 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead 257 */ 258 @Deprecated 259 ChangeLogScmResult changeLog( 260 ScmRepository repository, 261 ScmFileSet fileSet, 262 ScmVersion startRevision, 263 ScmVersion endRevision, 264 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 {@code fileSet.getBasedir()} is recursively committed. When the fileSet 272 * has entries, 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 a {@link CheckInScmResult} that contains the file paths (relative to {@code fileSet.getBasedir()}) that 278 * have been checked in. 279 * @throws ScmException if any 280 */ 281 CheckInScmResult checkIn(ScmRepository repository, ScmFileSet fileSet, String message) 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 {@code fileSet.getBasedir()} is recursively committed. When the fileSet 288 * has entries, 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 a {@link CheckInScmResult} that contains the file paths (relative to {@code fileSet.getBasedir()}) that 295 * have been checked in. 296 * @throws ScmException if any 297 */ 298 CheckInScmResult checkIn(ScmRepository repository, ScmFileSet fileSet, ScmVersion revision, String message) 299 throws ScmException; 300 301 /** 302 * Create a copy of the repository on your local machine 303 * 304 * @param repository the source control system 305 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location 306 * @return TODO 307 * @throws ScmException if any 308 */ 309 CheckOutScmResult checkOut(ScmRepository repository, ScmFileSet fileSet) 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) throws ScmException; 321 322 /** 323 * Create a copy of the repository on your local machine. 324 * 325 * @param scmRepository the source control system 326 * @param scmFileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location 327 * @param recursive whether to check out recursively 328 * @return TODO 329 * @throws ScmException if any 330 */ 331 CheckOutScmResult checkOut(ScmRepository scmRepository, ScmFileSet scmFileSet, boolean recursive) 332 throws ScmException; 333 334 /** 335 * Create a copy of the repository on your local machine. 336 * 337 * @param scmRepository the source control system 338 * @param scmFileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location 339 * @param version get the version defined by the revision, branch or tag 340 * @param recursive whether to check out recursively 341 * @return TODO 342 * @throws ScmException if any 343 */ 344 CheckOutScmResult checkOut( 345 ScmRepository scmRepository, ScmFileSet scmFileSet, ScmVersion version, boolean recursive) 346 throws ScmException; 347 348 /** 349 * Create a diff between two branch/tag/revision. 350 * 351 * @param scmRepository the source control system 352 * @param scmFileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location 353 * @param startVersion the start branch/tag/revision 354 * @param endVersion the end branch/tag/revision 355 * @return TODO 356 * @throws ScmException if any 357 */ 358 DiffScmResult diff( 359 ScmRepository scmRepository, ScmFileSet scmFileSet, ScmVersion startVersion, ScmVersion endVersion) 360 throws ScmException; 361 362 /** 363 * Make a file editable. This is used in source control systems where you look at read-only files and you need to 364 * make them not read-only anymore before you can edit them. This can also mean that no other user in the system can 365 * make the file not read-only anymore. 366 * 367 * @param repository the source control system 368 * @param fileSet the files to make editable 369 * @return TODO 370 * @throws ScmException if any 371 */ 372 EditScmResult edit(ScmRepository repository, ScmFileSet fileSet) throws ScmException; 373 374 /** 375 * Create an exported copy of the repository on your local machine 376 * 377 * @param repository the source control system 378 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location 379 * @return TODO 380 * @throws ScmException if any 381 */ 382 ExportScmResult export(ScmRepository repository, ScmFileSet fileSet) throws ScmException; 383 384 /** 385 * Create an exported copy of the repository on your local machine 386 * 387 * @param repository the source control system 388 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location 389 * @param version get the version defined by the branch/tag/revision 390 * @return TODO 391 * @throws ScmException if any 392 */ 393 ExportScmResult export(ScmRepository repository, ScmFileSet fileSet, ScmVersion version) throws ScmException; 394 395 /** 396 * Create an exported copy of the repository on your local machine 397 * 398 * @param repository the source control system 399 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location 400 * @param outputDirectory the directory where the export will be stored 401 * @return TODO 402 * @throws ScmException if any 403 */ 404 ExportScmResult export(ScmRepository repository, ScmFileSet fileSet, String outputDirectory) throws ScmException; 405 406 /** 407 * Create an exported copy of the repository on your local machine 408 * 409 * @param repository the source control system 410 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location 411 * @param version get the version defined by the branch/tag/revision 412 * @param outputDirectory the directory where the export will be stored 413 * @return TODO 414 * @throws ScmException if any 415 */ 416 ExportScmResult export(ScmRepository repository, ScmFileSet fileSet, ScmVersion version, String outputDirectory) 417 throws ScmException; 418 419 /** 420 * List each element (files and directories) of <B>fileSet</B> as they exist in the repository. 421 * 422 * @param repository the source control system 423 * @param fileSet the files to list 424 * @param recursive descend recursively 425 * @param version use the version defined by the branch/tag/revision 426 * @return the list of files in the repository 427 * @throws ScmException if any 428 */ 429 ListScmResult list(ScmRepository repository, ScmFileSet fileSet, boolean recursive, ScmVersion version) 430 throws ScmException; 431 432 /** 433 * Create new directory/directories in the repository. 434 * 435 * @param repository TODO 436 * @param fileSet TODO 437 * @param message TODO 438 * @param createInLocal TODO 439 * @return TODO 440 * @throws ScmException if any 441 */ 442 MkdirScmResult mkdir(ScmRepository repository, ScmFileSet fileSet, String message, boolean createInLocal) 443 throws ScmException; 444 445 /** 446 * Removes the given files from the source control system 447 * 448 * @param repository the source control system 449 * @param fileSet the files to be removed 450 * @param message TODO 451 * @return a {@link RemoveScmResult} that contains the file paths (relative to {@code fileSet.getBasedir()}) that 452 * have been removed 453 * @throws ScmException if any 454 */ 455 RemoveScmResult remove(ScmRepository repository, ScmFileSet fileSet, String message) throws ScmException; 456 457 /** 458 * Returns the status of the files in the source control system. The state of each file can be one of the 459 * {@link org.apache.maven.scm.ScmFileStatus} flags. 460 * 461 * @param repository the source control system 462 * @param fileSet the files to know the status about. Implementations can also give the changes from the 463 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 464 * @return TODO 465 * @throws ScmException if any 466 */ 467 StatusScmResult status(ScmRepository repository, ScmFileSet fileSet) throws ScmException; 468 469 /** 470 * Tag (or label in some systems) will tag the source file with a certain tag 471 * 472 * @param repository the source control system 473 * @param fileSet the files to tag. Implementations can also give the changes from the 474 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 475 * @param tagName the tag name to apply to the files 476 * @return TODO 477 * @throws ScmException if any 478 */ 479 TagScmResult tag(ScmRepository repository, ScmFileSet fileSet, String tagName) throws ScmException; 480 481 /** 482 * Tag (or label in some systems) will tag the source file with a certain tag 483 * 484 * @param repository the source control system 485 * @param fileSet the files to tag. Implementations can also give the changes from the 486 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 487 * @param tagName the tag name to apply to the files 488 * @param message the commit message used for the tag creation 489 * @return TODO 490 * @throws ScmException if any 491 */ 492 TagScmResult tag(ScmRepository repository, ScmFileSet fileSet, String tagName, String message) throws ScmException; 493 494 /** 495 * Make a file no longer editable. This is the conterpart of 496 * {@link #edit(org.apache.maven.scm.repository.ScmRepository, org.apache.maven.scm.ScmFileSet)}. It makes the file 497 * read-only again. 498 * 499 * @param repository the source control system 500 * @param fileSet the files to make uneditable 501 * @return TODO 502 * @throws ScmException if any 503 */ 504 UnEditScmResult unedit(ScmRepository repository, ScmFileSet fileSet) throws ScmException; 505 506 /** 507 * Updates the copy on the local machine with the changes in the repository 508 * 509 * @param repository the source control system 510 * @param fileSet location of your local copy 511 * @return TODO 512 * @throws ScmException if any 513 */ 514 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet) throws ScmException; 515 516 /** 517 * Updates the copy on the local machine with the changes in the repository 518 * 519 * @param repository the source control system 520 * @param fileSet location of your local copy 521 * @param version use the version defined by the branch/tag/revision 522 * @return TODO 523 * @throws ScmException if any 524 */ 525 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, ScmVersion version) throws ScmException; 526 527 /** 528 * Updates the copy on the local machine with the changes in the repository 529 * 530 * @param repository the source control system 531 * @param fileSet location of your local copy 532 * @param runChangelog Run the changelog command after the update 533 * @return TODO 534 * @throws ScmException if any 535 */ 536 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, boolean runChangelog) 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 version use the version defined by the branch/tag/revision 544 * @param runChangelog Run the changelog command after the update 545 * @return TODO 546 * @throws ScmException if any 547 */ 548 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, ScmVersion version, boolean runChangelog) 549 throws ScmException; 550 551 /** 552 * Updates the copy on the local machine with the changes in the repository 553 * 554 * @param repository the source control system 555 * @param fileSet location of your local copy 556 * @param datePattern the date pattern use in changelog output returned by scm tool 557 * @return TODO 558 * @throws ScmException if any 559 */ 560 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, String datePattern) 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 version use the version defined by the branch/tag/revision 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, ScmVersion version, 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 lastUpdate TODO 581 * @return TODO 582 * @throws ScmException if any 583 */ 584 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, Date lastUpdate) throws ScmException; 585 586 /** 587 * Updates the copy on the local machine with the changes in the repository 588 * 589 * @param repository the source control system 590 * @param fileSet location of your local copy 591 * @param version use the version defined by the branch/tag/revision 592 * @param lastUpdate TODO 593 * @return TODO 594 * @throws ScmException if any 595 */ 596 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, ScmVersion version, 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 lastUpdate Date of last update 605 * @param datePattern the date pattern use in changelog output returned by scm tool 606 * @return TODO 607 * @throws ScmException if any 608 */ 609 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, Date lastUpdate, String datePattern) 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 version use the version defined by the branch/tag/revision 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( 624 ScmRepository repository, ScmFileSet fileSet, ScmVersion version, Date lastUpdate, String datePattern) 625 throws ScmException; 626 627 /** 628 * Returns the blame of specified file 629 * 630 * @param repository the source control system 631 * @param fileSet location of your local copy 632 * @param filename file 633 * @return blame for specified file 634 * @throws ScmException if any 635 * @since 1.4 636 */ 637 BlameScmResult blame(ScmRepository repository, ScmFileSet fileSet, String filename) throws ScmException; 638 639 /** 640 * @param blameScmRequest TODO 641 * @return blame for specified file 642 * @throws ScmException if any 643 * @since 1.4 644 */ 645 BlameScmResult blame(BlameScmRequest blameScmRequest) throws ScmException; 646}