1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the 7 * "License"); you may not use this file except in compliance 8 * with the License. You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, 13 * software distributed under the License is distributed on an 14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 15 * KIND, either express or implied. See the License for the 16 * specific language governing permissions and limitations 17 * under the License. 18 */ 19 package org.apache.maven.scm.provider; 20 21 import java.io.File; 22 import java.util.Date; 23 import java.util.List; 24 25 import org.apache.maven.scm.CommandParameters; 26 import org.apache.maven.scm.ScmBranch; 27 import org.apache.maven.scm.ScmBranchParameters; 28 import org.apache.maven.scm.ScmException; 29 import org.apache.maven.scm.ScmFileSet; 30 import org.apache.maven.scm.ScmTagParameters; 31 import org.apache.maven.scm.ScmVersion; 32 import org.apache.maven.scm.command.add.AddScmResult; 33 import org.apache.maven.scm.command.blame.BlameScmRequest; 34 import org.apache.maven.scm.command.blame.BlameScmResult; 35 import org.apache.maven.scm.command.branch.BranchScmResult; 36 import org.apache.maven.scm.command.changelog.ChangeLogScmRequest; 37 import org.apache.maven.scm.command.changelog.ChangeLogScmResult; 38 import org.apache.maven.scm.command.checkin.CheckInScmResult; 39 import org.apache.maven.scm.command.checkout.CheckOutScmResult; 40 import org.apache.maven.scm.command.diff.DiffScmResult; 41 import org.apache.maven.scm.command.edit.EditScmResult; 42 import org.apache.maven.scm.command.export.ExportScmResult; 43 import org.apache.maven.scm.command.info.InfoScmResult; 44 import org.apache.maven.scm.command.list.ListScmResult; 45 import org.apache.maven.scm.command.mkdir.MkdirScmResult; 46 import org.apache.maven.scm.command.remoteinfo.RemoteInfoScmResult; 47 import org.apache.maven.scm.command.remove.RemoveScmResult; 48 import org.apache.maven.scm.command.status.StatusScmResult; 49 import org.apache.maven.scm.command.tag.TagScmResult; 50 import org.apache.maven.scm.command.unedit.UnEditScmResult; 51 import org.apache.maven.scm.command.untag.UntagScmResult; 52 import org.apache.maven.scm.command.update.UpdateScmResult; 53 import org.apache.maven.scm.repository.ScmRepository; 54 import org.apache.maven.scm.repository.ScmRepositoryException; 55 import org.apache.maven.scm.repository.UnknownRepositoryStructure; 56 57 /** 58 * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a> 59 * 60 */ 61 public interface ScmProvider { 62 String getScmType(); 63 64 boolean requiresEditMode(); 65 66 ScmProviderRepository makeProviderScmRepository(String scmSpecificUrl, char delimiter) 67 throws ScmRepositoryException; 68 69 ScmProviderRepository makeProviderScmRepository(File path) 70 throws ScmRepositoryException, UnknownRepositoryStructure; 71 72 /** 73 * Sets the interactive mode, which by default (i.e. if not called) is assumed to be {@code true} by providers. 74 * As providers are usually singletons, this affects every usage of this provider. 75 * 76 * @param interactive either {@code true} in case user may be prompted for information, otherwise {@code false}. The default is {@code true}. 77 * @since 2.0.0-M2 78 */ 79 default void setInteractive(boolean interactive) {} 80 81 /** 82 * Validate the scm url. 83 * 84 * @param scmSpecificUrl The SCM url 85 * @param delimiter The delimiter used in the SCM url 86 * @return Returns a list of messages if the validation failed 87 */ 88 List<String> validateScmUrl(String scmSpecificUrl, char delimiter); 89 90 /** 91 * Returns the scm reserved file name where the SCM stores information like '.git', '.svn'. 92 * 93 * @return the scm reserved file name 94 */ 95 String getScmSpecificFilename(); 96 97 /** 98 * Check if this tag is valid for this SCM provider. 99 * 100 * @param tag tag name to check 101 * @return true if tag is valid 102 */ 103 boolean validateTagName(String tag); 104 105 /** 106 * Given a tag name, make it suitable for this SCM provider. 107 * 108 * @param tag input tag name 109 * @return sanitized tag name 110 */ 111 String sanitizeTagName(String tag); 112 113 /** 114 * Adds the given files to the source control system 115 * 116 * @param repository the source control system 117 * @param fileSet the files to be added 118 * @return an {@link AddScmResult} that contains the files that have been added 119 * @throws ScmException if any 120 */ 121 AddScmResult add(ScmRepository repository, ScmFileSet fileSet) throws ScmException; 122 123 /** 124 * Adds the given files to the source control system 125 * 126 * @param repository the source control system 127 * @param fileSet the files to be added 128 * @param message a string that is a comment on the new added file 129 * @return an {@link AddScmResult} that contains the files that have been added 130 * @throws ScmException if any 131 */ 132 AddScmResult add(ScmRepository repository, ScmFileSet fileSet, String message) throws ScmException; 133 134 /** 135 * Adds the given files to the source control system 136 * 137 * @param repository the source control system 138 * @param fileSet the files to be added 139 * @param commandParameters {@link CommandParameters} 140 * @return an {@link AddScmResult} that contains the files that have been added 141 * @throws ScmException if any 142 */ 143 AddScmResult add(ScmRepository repository, ScmFileSet fileSet, CommandParameters commandParameters) 144 throws ScmException; 145 146 /** 147 * Branch (or label in some systems) will create a branch of the source file with a certain branch name 148 * 149 * @param repository the source control system 150 * @param fileSet the files to branch. Implementations can also give the changes 151 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 152 * @param branchName the branch name to apply to the files 153 * @return TODO 154 * @throws ScmException if any 155 * @deprecated use {@link #branch(ScmRepository, ScmFileSet, String, ScmBranchParameters)} 156 */ 157 BranchScmResult branch(ScmRepository repository, ScmFileSet fileSet, String branchName) throws ScmException; 158 159 /** 160 * Branch (or label in some systems) will create a branch of the source file with a certain branch name 161 * 162 * @param repository the source control system 163 * @param fileSet the files to branch. Implementations can also give the changes 164 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 165 * @param branchName the branch name to apply to the files 166 * @param message the commit message used for the tag creation 167 * @return TODO 168 * @throws ScmException if any 169 * @deprecated use {@link #branch(ScmRepository, ScmFileSet, String, ScmBranchParameters)} 170 */ 171 BranchScmResult branch(ScmRepository repository, ScmFileSet fileSet, String branchName, String message) 172 throws ScmException; 173 174 /** 175 * Branch (or label in some systems) will create a branch of the source file with a certain 176 * branch name 177 * 178 * @param repository the source control system 179 * @param fileSet the files to branch. Implementations can also give the changes from the 180 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 181 * @param branchName the branch name to apply to the files 182 * @param scmBranchParameters TODO 183 * @return TODO 184 * @throws ScmException if any 185 * @since 1.3 186 */ 187 BranchScmResult branch( 188 ScmRepository repository, ScmFileSet fileSet, String branchName, ScmBranchParameters scmBranchParameters) 189 throws ScmException; 190 191 /** 192 * Returns the changes that have happened in the source control system in a certain period of time. 193 * This can be adding, removing, updating, ... of files 194 * 195 * @param repository the source control system 196 * @param fileSet the files to know the changes about. Implementations can also give the changes 197 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 198 * @param startDate the start date of the period 199 * @param endDate the end date of the period 200 * @param numDays the number days before the current time if startdate and enddate are null 201 * @param branch the branch/tag name 202 * @return The SCM result of the changelog command 203 * @throws ScmException if any 204 * @deprecated you must use {@link ScmProvider#changeLog(org.apache.maven.scm.repository.ScmRepository, 205 * org.apache.maven.scm.ScmFileSet, java.util.Date, java.util.Date, int, 206 * org.apache.maven.scm.ScmBranch)} 207 */ 208 ChangeLogScmResult changeLog( 209 ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate, int numDays, String branch) 210 throws ScmException; 211 212 /** 213 * Returns the changes that have happened in the source control system in a certain period of time. 214 * This can be adding, removing, updating, ... of files 215 * 216 * @param repository the source control system 217 * @param fileSet the files to know the changes about. Implementations can also give the changes 218 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 219 * @param startDate the start date of the period 220 * @param endDate the end date of the period 221 * @param numDays the number days before the current time if startdate and enddate are null 222 * @param branch the branch/tag 223 * @return The SCM result of the changelog command 224 * @throws ScmException if any 225 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead 226 */ 227 @Deprecated 228 ChangeLogScmResult changeLog( 229 ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate, int numDays, ScmBranch branch) 230 throws ScmException; 231 232 /** 233 * Returns the changes that have happened in the source control system in a certain period of time. 234 * This can be adding, removing, updating, ... of files 235 * 236 * @param repository the source control system 237 * @param fileSet the files to know the changes about. Implementations can also give the changes 238 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 239 * @param startDate the start date of the period 240 * @param endDate the end date of the period 241 * @param numDays the number days before the current time if startdate and enddate are null 242 * @param branch the branch/tag name 243 * @param datePattern the date pattern use in changelog output returned by scm tool 244 * @return The SCM result of the changelog command 245 * @throws ScmException if any 246 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead 247 */ 248 @Deprecated 249 ChangeLogScmResult changeLog( 250 ScmRepository repository, 251 ScmFileSet fileSet, 252 Date startDate, 253 Date endDate, 254 int numDays, 255 String branch, 256 String datePattern) 257 throws ScmException; 258 259 /** 260 * Returns the changes that have happened in the source control system in a certain period of time. 261 * This can be adding, removing, updating, ... of files 262 * 263 * @param repository the source control system 264 * @param fileSet the files to know the changes about. Implementations can also give the changes 265 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 266 * @param startDate the start date of the period 267 * @param endDate the end date of the period 268 * @param numDays the number days before the current time if startDate and endDate are null 269 * @param branch the branch/tag 270 * @param datePattern the date pattern use in changelog output returned by scm tool 271 * @return The SCM result of the changelog command 272 * @throws ScmException if any 273 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead 274 */ 275 ChangeLogScmResult changeLog( 276 ScmRepository repository, 277 ScmFileSet fileSet, 278 Date startDate, 279 Date endDate, 280 int numDays, 281 ScmBranch branch, 282 String datePattern) 283 throws ScmException; 284 285 /** 286 * Returns the changes that have happened in the source control system in a certain period of time. 287 * This can be adding, removing, updating, ... of files 288 * 289 * @param scmRequest request wrapping detailed parameters for the changelog command 290 * @return The SCM result of the changelog command 291 * @throws ScmException if any 292 * @since 1.8 293 */ 294 ChangeLogScmResult changeLog(ChangeLogScmRequest scmRequest) throws ScmException; 295 296 /** 297 * Returns the changes that have happened in the source control system between two tags. 298 * This can be adding, removing, updating, ... of files 299 * 300 * @param repository the source control system 301 * @param fileSet the files to know the changes about. Implementations can also give the changes 302 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 303 * @param startTag the start tag 304 * @param endTag the end tag 305 * @return The SCM result of the changelog command 306 * @throws ScmException if any 307 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead 308 */ 309 @Deprecated 310 ChangeLogScmResult changeLog(ScmRepository repository, ScmFileSet fileSet, String startTag, String endTag) 311 throws ScmException; 312 313 /** 314 * Returns the changes that have happened in the source control system between two tags. 315 * This can be adding, removing, updating, ... of files 316 * 317 * @param repository the source control system 318 * @param fileSet the files to know the changes about. Implementations can also give the changes 319 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 320 * @param startVersion the start branch/tag/revision 321 * @param endVersion the end branch/tag/revision 322 * @return The SCM result of the changelog command 323 * @throws ScmException if any 324 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead 325 */ 326 @Deprecated 327 ChangeLogScmResult changeLog( 328 ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion, ScmVersion endVersion) 329 throws ScmException; 330 331 /** 332 * Returns the changes that have happened in the source control system between two tags. 333 * This can be adding, removing, updating, ... of files 334 * 335 * @param repository the source control system 336 * @param fileSet the files to know the changes about. Implementations can also give the changes 337 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 338 * @param startTag the start tag 339 * @param endTag the end tag 340 * @param datePattern the date pattern use in changelog output returned by scm tool 341 * @return TODO 342 * @throws ScmException if any 343 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead 344 */ 345 @Deprecated 346 ChangeLogScmResult changeLog( 347 ScmRepository repository, ScmFileSet fileSet, String startTag, String endTag, String datePattern) 348 throws ScmException; 349 350 /** 351 * Returns the changes that have happened in the source control system between two tags. 352 * This can be adding, removing, updating, ... of files 353 * 354 * @param repository the source control system 355 * @param fileSet the files to know the changes about. Implementations can also give the changes 356 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 357 * @param startRevision the start revision 358 * @param endRevision the end revision 359 * @param datePattern the date pattern use in changelog output returned by scm tool 360 * @return TODO 361 * @throws ScmException if any 362 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead 363 */ 364 @Deprecated 365 ChangeLogScmResult changeLog( 366 ScmRepository repository, 367 ScmFileSet fileSet, 368 ScmVersion startRevision, 369 ScmVersion endRevision, 370 String datePattern) 371 throws ScmException; 372 373 /** 374 * Save the changes you have done into the repository. This will create a new version of the file or 375 * directory in the repository. 376 * <p> 377 * When the fileSet has no entries, the fileSet.getBaseDir() is recursively committed. 378 * When the fileSet has entries, the commit is non-recursive and only the elements in the fileSet 379 * are committed. 380 * 381 * @param repository the source control system 382 * @param fileSet the files to check in (sometimes called commit) 383 * @param tag tag or revision 384 * @param message a string that is a comment on the changes that where done 385 * @return TODO 386 * @throws ScmException if any 387 * @deprecated you must use {@link ScmProvider#checkIn(org.apache.maven.scm.repository.ScmRepository, 388 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion, String)} 389 */ 390 CheckInScmResult checkIn(ScmRepository repository, ScmFileSet fileSet, String tag, String message) 391 throws ScmException; 392 393 /** 394 * Save the changes you have done into the repository. This will create a new version of the file or 395 * directory in the repository. 396 * <p> 397 * When the fileSet has no entries, the fileSet.getBaseDir() is recursively committed. 398 * When the fileSet has entries, the commit is non-recursive and only the elements in the fileSet 399 * are committed. 400 * 401 * @param repository the source control system 402 * @param fileSet the files to check in (sometimes called commit) 403 * @param message a string that is a comment on the changes that where done 404 * @return TODO 405 * @throws ScmException if any 406 */ 407 CheckInScmResult checkIn(ScmRepository repository, ScmFileSet fileSet, String message) throws ScmException; 408 409 /** 410 * Save the changes you have done into the repository. This will create a new version of the file or 411 * directory in the repository. 412 * <p> 413 * When the fileSet has no entries, the fileSet.getBaseDir() is recursively committed. 414 * When the fileSet has entries, the commit is non-recursive and only the elements in the fileSet 415 * are committed. 416 * 417 * @param repository the source control system 418 * @param fileSet the files to check in (sometimes called commit) 419 * @param parameters {@link CommandParameters} 420 * @return TODO 421 * @throws ScmException if any 422 */ 423 CheckInScmResult checkIn(ScmRepository repository, ScmFileSet fileSet, CommandParameters parameters) 424 throws ScmException; 425 426 /** 427 * Save the changes you have done into the repository. This will create a new version of the file or 428 * directory in the repository. 429 * <p> 430 * When the fileSet has no entries, the fileSet.getBaseDir() is recursively committed. 431 * When the fileSet has entries, the commit is non-recursive and only the elements in the fileSet 432 * are committed. 433 * 434 * @param repository the source control system 435 * @param fileSet the files to check in (sometimes called commit) 436 * @param revision branch/tag/revision 437 * @param message a string that is a comment on the changes that where done 438 * @return TODO 439 * @throws ScmException if any 440 */ 441 CheckInScmResult checkIn(ScmRepository repository, ScmFileSet fileSet, ScmVersion revision, String message) 442 throws ScmException; 443 444 /** 445 * Create a copy of the repository on your local machine 446 * 447 * @param repository the source control system 448 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location 449 * @param tag get the version defined by the tag 450 * @return TODO 451 * @throws ScmException if any 452 * @deprecated you must use {@link ScmProvider#checkOut(org.apache.maven.scm.repository.ScmRepository, 453 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion)} 454 */ 455 CheckOutScmResult checkOut(ScmRepository repository, ScmFileSet fileSet, String tag) throws ScmException; 456 457 /** 458 * Create a copy of the repository on your local machine 459 * 460 * @param repository the source control system 461 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location 462 * @return TODO 463 * @throws ScmException if any 464 */ 465 CheckOutScmResult checkOut(ScmRepository repository, ScmFileSet fileSet) throws ScmException; 466 467 /** 468 * Create a copy of the repository on your local machine 469 * 470 * @param repository the source control system 471 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location 472 * @param version get the version defined by the revision, branch or tag 473 * @return TODO 474 * @throws ScmException if any 475 */ 476 CheckOutScmResult checkOut(ScmRepository repository, ScmFileSet fileSet, ScmVersion version) throws ScmException; 477 478 /** 479 * Create a copy of the repository on your local machine. 480 * 481 * @param scmRepository the source control system 482 * @param scmFileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location 483 * @param tag tag or revision 484 * @param recursive whether to check out recursively 485 * @return TODO 486 * @throws ScmException if any 487 * @deprecated you must use {@link ScmProvider#checkOut(org.apache.maven.scm.repository.ScmRepository, 488 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion, boolean)} 489 */ 490 CheckOutScmResult checkOut(ScmRepository scmRepository, ScmFileSet scmFileSet, String tag, boolean recursive) 491 throws ScmException; 492 493 /** 494 * Create a copy of the repository on your local machine. 495 * 496 * @param scmRepository the source control system 497 * @param scmFileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location 498 * @param recursive whether to check out recursively 499 * @return TODO 500 * @throws ScmException if any 501 */ 502 CheckOutScmResult checkOut(ScmRepository scmRepository, ScmFileSet scmFileSet, boolean recursive) 503 throws ScmException; 504 505 /** 506 * Create a copy of the repository on your local machine. 507 * 508 * @param scmRepository the source control system 509 * @param scmFileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location 510 * @param version get the version defined by the revision, branch or tag 511 * @param recursive whether to check out recursively 512 * @return TODO 513 * @throws ScmException if any 514 */ 515 CheckOutScmResult checkOut( 516 ScmRepository scmRepository, ScmFileSet scmFileSet, ScmVersion version, boolean recursive) 517 throws ScmException; 518 519 /** 520 * Create a copy of the repository on your local machine. 521 * 522 * @param scmRepository the source control system 523 * @param scmFileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} 524 * location 525 * @param version get the version defined by the revision, branch or tag 526 * @param commandParameters parameters 527 * @return TODO 528 * @throws ScmException if any 529 * @since 1.9.6 530 */ 531 CheckOutScmResult checkOut( 532 ScmRepository scmRepository, 533 ScmFileSet scmFileSet, 534 ScmVersion version, // 535 CommandParameters commandParameters) 536 throws ScmException; 537 538 /** 539 * Create a diff between two branch/tag/revision. 540 * 541 * @param scmRepository the source control system 542 * @param scmFileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location 543 * @param startRevision the start revision 544 * @param endRevision the end revision 545 * @return TODO 546 * @throws ScmException if any 547 * @deprecated you must use {@link ScmProvider#diff(org.apache.maven.scm.repository.ScmRepository, 548 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion, org.apache.maven.scm.ScmVersion)} 549 */ 550 DiffScmResult diff(ScmRepository scmRepository, ScmFileSet scmFileSet, String startRevision, String endRevision) 551 throws ScmException; 552 553 /** 554 * Create a diff between two branch/tag/revision. 555 * 556 * @param scmRepository the source control system 557 * @param scmFileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location 558 * @param startVersion the start branch/tag/revision 559 * @param endVersion the end branch/tag/revision 560 * @return TODO 561 * @throws ScmException if any 562 */ 563 DiffScmResult diff( 564 ScmRepository scmRepository, ScmFileSet scmFileSet, ScmVersion startVersion, ScmVersion endVersion) 565 throws ScmException; 566 567 /** 568 * Create an exported copy of the repository on your local machine 569 * 570 * @param repository the source control system 571 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location 572 * @param tag get the version defined by the tag 573 * @return TODO 574 * @throws ScmException if any 575 * @deprecated you must use {@link ScmProvider#export(org.apache.maven.scm.repository.ScmRepository, 576 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion)} 577 */ 578 ExportScmResult export(ScmRepository repository, ScmFileSet fileSet, String tag) throws ScmException; 579 580 /** 581 * Create an exported copy of the repository on your local machine 582 * 583 * @param repository the source control system 584 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location 585 * @return TODO 586 * @throws ScmException if any 587 */ 588 ExportScmResult export(ScmRepository repository, ScmFileSet fileSet) throws ScmException; 589 590 /** 591 * Create an exported copy of the repository on your local machine 592 * 593 * @param repository the source control system 594 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location 595 * @param version get the version defined by the branch/tag/revision 596 * @return TODO 597 * @throws ScmException if any 598 */ 599 ExportScmResult export(ScmRepository repository, ScmFileSet fileSet, ScmVersion version) throws ScmException; 600 601 /** 602 * Create an exported copy of the repository on your local machine 603 * 604 * @param repository the source control system 605 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location 606 * @param tag get the version defined by the tag 607 * @param outputDirectory the directory where the export will be stored 608 * @return TODO 609 * @throws ScmException if any 610 * @deprecated you must use {@link ScmProvider#export(org.apache.maven.scm.repository.ScmRepository, 611 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion, String)} 612 */ 613 ExportScmResult export(ScmRepository repository, ScmFileSet fileSet, String tag, String outputDirectory) 614 throws ScmException; 615 616 /** 617 * Create an exported copy of the repository on your local machine 618 * 619 * @param repository the source control system 620 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location 621 * @param version get the version defined by the branch/tag/revision 622 * @param outputDirectory the directory where the export will be stored 623 * @return TODO 624 * @throws ScmException if any 625 */ 626 ExportScmResult export(ScmRepository repository, ScmFileSet fileSet, ScmVersion version, String outputDirectory) 627 throws ScmException; 628 629 /** 630 * Removes the given files from the source control system 631 * 632 * @param repository the source control system 633 * @param fileSet the files to be removed 634 * @param message TODO 635 * @return TODO 636 * @throws ScmException if any 637 */ 638 RemoveScmResult remove(ScmRepository repository, ScmFileSet fileSet, String message) throws ScmException; 639 640 /** 641 * Returns the status of the files in the source control system. The state of each file can be one 642 * of the {@link org.apache.maven.scm.ScmFileStatus} flags. 643 * 644 * @param repository the source control system 645 * @param fileSet the files to know the status about. Implementations can also give the changes 646 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 647 * @return TODO 648 * @throws ScmException if any 649 */ 650 StatusScmResult status(ScmRepository repository, ScmFileSet fileSet) throws ScmException; 651 652 /** 653 * Tag (or label in some systems) will tag the source file with a certain tag 654 * 655 * @param repository the source control system 656 * @param fileSet the files to tag. Implementations can also give the changes 657 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 658 * @param tagName the tag name to apply to the files 659 * @return TODO 660 * @throws ScmException if any 661 * @deprecated use {@link #tag(ScmRepository, ScmFileSet, String, ScmTagParameters)} 662 */ 663 TagScmResult tag(ScmRepository repository, ScmFileSet fileSet, String tagName) throws ScmException; 664 665 /** 666 * Deletes a tag. 667 * 668 * @param repository the source control system 669 * @param fileSet a fileset with the relevant working directory as basedir 670 * @param parameters TODO 671 * @return TODO 672 * @throws ScmException if any 673 */ 674 UntagScmResult untag(ScmRepository repository, ScmFileSet fileSet, CommandParameters parameters) 675 throws ScmException; 676 677 /** 678 * Tag (or label in some systems) will tag the source file with a certain tag 679 * 680 * @param repository the source control system 681 * @param fileSet the files to tag. Implementations can also give the changes 682 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 683 * @param tagName the tag name to apply to the files 684 * @param message the commit message used for the tag creation 685 * @return TODO 686 * @throws ScmException if any 687 * @deprecated use {@link #tag(ScmRepository, ScmFileSet, String, ScmTagParameters)} 688 */ 689 TagScmResult tag(ScmRepository repository, ScmFileSet fileSet, String tagName, String message) throws ScmException; 690 691 /** 692 * Tag (or label in some systems) will tag the source file with a certain tag 693 * 694 * @param repository the source control system 695 * @param fileSet the files to tag. Implementations can also give the changes 696 * from the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards. 697 * @param tagName the tag name to apply to the files 698 * @param scmTagParameters bean to pass some paramters for tagging {@link ScmTagParameters} 699 * @return TODO 700 * @throws ScmException if any 701 * @since 1.2 702 */ 703 TagScmResult tag(ScmRepository repository, ScmFileSet fileSet, String tagName, ScmTagParameters scmTagParameters) 704 throws ScmException; 705 706 /** 707 * Updates the copy on the local machine with the changes in the repository 708 * 709 * @param repository the source control system 710 * @param fileSet location of your local copy 711 * @return TODO 712 * @throws ScmException if any 713 */ 714 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet) throws ScmException; 715 716 /** 717 * Updates the copy on the local machine with the changes in the repository 718 * 719 * @param repository the source control system 720 * @param fileSet location of your local copy 721 * @param tag use the version defined by the tag 722 * @return TODO 723 * @throws ScmException if any 724 * @deprecated you must use {@link ScmProvider#update(org.apache.maven.scm.repository.ScmRepository, 725 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion)} 726 */ 727 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, String tag) throws ScmException; 728 729 /** 730 * Updates the copy on the local machine with the changes in the repository 731 * 732 * @param repository the source control system 733 * @param fileSet location of your local copy 734 * @param version use the version defined by the branch/tag/revision 735 * @return TODO 736 * @throws ScmException if any 737 */ 738 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, ScmVersion version) throws ScmException; 739 740 /** 741 * Updates the copy on the local machine with the changes in the repository 742 * 743 * @param repository the source control system 744 * @param fileSet location of your local copy 745 * @param tag use the version defined by the tag 746 * @param runChangelog Run the changelog command after the update 747 * @return TODO 748 * @throws ScmException if any 749 * @deprecated you must use {@link ScmProvider#update(org.apache.maven.scm.repository.ScmRepository, 750 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion, boolean)} 751 */ 752 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, String tag, boolean runChangelog) 753 throws ScmException; 754 755 /** 756 * Updates the copy on the local machine with the changes in the repository 757 * 758 * @param repository the source control system 759 * @param fileSet location of your local copy 760 * @param runChangelog Run the changelog command after the update 761 * @return TODO 762 * @throws ScmException if any 763 */ 764 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, boolean runChangelog) throws ScmException; 765 766 /** 767 * Updates the copy on the local machine with the changes in the repository 768 * 769 * @param repository the source control system 770 * @param fileSet location of your local copy 771 * @param version use the version defined by the branch/tag/revision 772 * @param runChangelog Run the changelog command after the update 773 * @return TODO 774 * @throws ScmException if any 775 */ 776 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, ScmVersion version, boolean runChangelog) 777 throws ScmException; 778 779 /** 780 * Updates the copy on the local machine with the changes in the repository 781 * 782 * @param repository the source control system 783 * @param fileSet location of your local copy 784 * @param tag use the version defined by the tag 785 * @param datePattern the date pattern use in changelog output returned by scm tool 786 * @return TODO 787 * @throws ScmException if any 788 * @deprecated you must use {@link ScmProvider#update(org.apache.maven.scm.repository.ScmRepository, 789 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion, String)} 790 */ 791 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, String tag, String datePattern) 792 throws ScmException; 793 794 /** 795 * Updates the copy on the local machine with the changes in the repository 796 * 797 * @param repository the source control system 798 * @param fileSet location of your local copy 799 * @param version use the version defined by the branch/tag/revision 800 * @param datePattern the date pattern use in changelog output returned by scm tool 801 * @return TODO 802 * @throws ScmException if any 803 */ 804 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, ScmVersion version, String datePattern) 805 throws ScmException; 806 807 /** 808 * Updates the copy on the local machine with the changes in the repository 809 * 810 * @param repository the source control system 811 * @param fileSet location of your local copy 812 * @param tag use the version defined by the tag 813 * @param lastUpdate TODO 814 * @return TODO 815 * @throws ScmException if any 816 * @deprecated you must use {@link ScmProvider#update(org.apache.maven.scm.repository.ScmRepository, 817 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion, java.util.Date)} 818 */ 819 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, String tag, Date lastUpdate) 820 throws ScmException; 821 822 /** 823 * Updates the copy on the local machine with the changes in the repository 824 * 825 * @param repository the source control system 826 * @param fileSet location of your local copy 827 * @param version use the version defined by the branch/tag/revision 828 * @param lastUpdate TODO 829 * @return TODO 830 * @throws ScmException if any 831 */ 832 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, ScmVersion version, Date lastUpdate) 833 throws ScmException; 834 835 /** 836 * Updates the copy on the local machine with the changes in the repository 837 * 838 * @param repository the source control system 839 * @param fileSet location of your local copy 840 * @param tag use the version defined by the tag 841 * @param lastUpdate Date of last update 842 * @param datePattern the date pattern use in changelog output returned by scm tool 843 * @return TODO 844 * @throws ScmException if any 845 * @deprecated you must use {@link ScmProvider#update(org.apache.maven.scm.repository.ScmRepository, 846 * org.apache.maven.scm.ScmFileSet, org.apache.maven.scm.ScmVersion, java.util.Date, String)} 847 */ 848 UpdateScmResult update( 849 ScmRepository repository, ScmFileSet fileSet, String tag, Date lastUpdate, String datePattern) 850 throws ScmException; 851 852 /** 853 * Updates the copy on the local machine with the changes in the repository 854 * 855 * @param repository the source control system 856 * @param fileSet location of your local copy 857 * @param version use the version defined by the branch/tag/revision 858 * @param lastUpdate Date of last update 859 * @param datePattern the date pattern use in changelog output returned by scm tool 860 * @return TODO 861 * @throws ScmException if any 862 */ 863 UpdateScmResult update( 864 ScmRepository repository, ScmFileSet fileSet, ScmVersion version, Date lastUpdate, String datePattern) 865 throws ScmException; 866 867 /** 868 * Make a file editable. This is used in source control systems where you look at read-only files 869 * and you need to make them not read-only anymore before you can edit them. This can also mean 870 * that no other user in the system can make the file not read-only anymore. 871 * 872 * @param repository the source control system 873 * @param fileSet the files to make editable 874 * @return TODO 875 * @throws ScmException if any 876 */ 877 EditScmResult edit(ScmRepository repository, ScmFileSet fileSet) throws ScmException; 878 879 /** 880 * Make a file no longer editable. This is the conterpart of {@link #edit( 881 *org.apache.maven.scm.repository.ScmRepository, org.apache.maven.scm.ScmFileSet)}. 882 * It makes the file read-only again. 883 * 884 * @param repository the source control system 885 * @param fileSet the files to make uneditable 886 * @return TODO 887 * @throws ScmException if any 888 */ 889 UnEditScmResult unedit(ScmRepository repository, ScmFileSet fileSet) throws ScmException; 890 891 /** 892 * List each element (files and directories) of <B>fileSet</B> as they exist in the repository. 893 * 894 * @param repository the source control system 895 * @param fileSet the files to list 896 * @param recursive descend recursively 897 * @param tag use the version defined by the tag 898 * @return the list of files in the repository 899 * @throws ScmException if any 900 * @deprecated you must use {@link ScmProvider#list(org.apache.maven.scm.repository.ScmRepository, 901 * org.apache.maven.scm.ScmFileSet, boolean, org.apache.maven.scm.ScmVersion)} 902 */ 903 ListScmResult list(ScmRepository repository, ScmFileSet fileSet, boolean recursive, String tag) throws ScmException; 904 905 /** 906 * List each element (files and directories) of <B>fileSet</B> as they exist in the repository. 907 * 908 * @param repository the source control system 909 * @param fileSet the files to list 910 * @param recursive descend recursively 911 * @param version use the version defined by the branch/tag/revision 912 * @return the list of files in the repository 913 * @throws ScmException if any 914 */ 915 ListScmResult list(ScmRepository repository, ScmFileSet fileSet, boolean recursive, ScmVersion version) 916 throws ScmException; 917 918 /** 919 * Returns the blame of specified file 920 * 921 * @param repository the source control system 922 * @param fileSet location of your local copy 923 * @param filename file 924 * @return blame for specified file 925 * @throws ScmException if any 926 * @since 1.4 927 * @deprecated use blame with {@link BlameScmRequest} parameter 928 */ 929 BlameScmResult blame(ScmRepository repository, ScmFileSet fileSet, String filename) throws ScmException; 930 931 /** 932 * 933 * @param blameScmRequest TODO 934 * @return blame for the file specified in the request 935 * @throws ScmException if any 936 * @since 1.8 937 */ 938 BlameScmResult blame(BlameScmRequest blameScmRequest) throws ScmException; 939 940 /** 941 * Create directory/directories in the repository. 942 * 943 * @param repository TODO 944 * @param fileSet TODO 945 * @param createInLocal TODO 946 * @param message TODO 947 * @return TODO 948 * @throws ScmException if any 949 */ 950 MkdirScmResult mkdir(ScmRepository repository, ScmFileSet fileSet, String message, boolean createInLocal) 951 throws ScmException; 952 953 /** 954 * @param repository the source control system 955 * @param fileSet location of your local copy 956 * @param parameters some parameters (not use currently but for future use) 957 * @return if the scm implementation doesn't support "info" result will <code>null</code> 958 * @throws ScmException if any 959 * @since 1.5 960 */ 961 InfoScmResult info(ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters) 962 throws ScmException; 963 964 /** 965 * @param repository the source control system 966 * @param fileSet not use currently but for future use 967 * @param parameters some parameters (not use currently but for future use) 968 * @return if the scm implementation doesn't support "info" result will <code>null</code> 969 * @throws ScmException if any 970 * @since 1.6 971 */ 972 RemoteInfoScmResult remoteInfo(ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters) 973 throws ScmException; 974 }