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.manager;
20
21 import java.io.File;
22 import java.util.Date;
23 import java.util.List;
24 import java.util.Optional;
25
26 import org.apache.maven.scm.CommandParameters;
27 import org.apache.maven.scm.ScmBranch;
28 import org.apache.maven.scm.ScmException;
29 import org.apache.maven.scm.ScmFileSet;
30 import org.apache.maven.scm.ScmVersion;
31 import org.apache.maven.scm.command.add.AddScmResult;
32 import org.apache.maven.scm.command.blame.BlameScmRequest;
33 import org.apache.maven.scm.command.blame.BlameScmResult;
34 import org.apache.maven.scm.command.branch.BranchScmResult;
35 import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
36 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
37 import org.apache.maven.scm.command.checkin.CheckInScmResult;
38 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
39 import org.apache.maven.scm.command.diff.DiffScmResult;
40 import org.apache.maven.scm.command.edit.EditScmResult;
41 import org.apache.maven.scm.command.export.ExportScmResult;
42 import org.apache.maven.scm.command.list.ListScmResult;
43 import org.apache.maven.scm.command.mkdir.MkdirScmResult;
44 import org.apache.maven.scm.command.remove.RemoveScmResult;
45 import org.apache.maven.scm.command.status.StatusScmResult;
46 import org.apache.maven.scm.command.tag.TagScmResult;
47 import org.apache.maven.scm.command.unedit.UnEditScmResult;
48 import org.apache.maven.scm.command.update.UpdateScmResult;
49 import org.apache.maven.scm.provider.ScmProvider;
50 import org.apache.maven.scm.repository.ScmRepository;
51 import org.apache.maven.scm.repository.ScmRepositoryException;
52 import org.apache.maven.scm.repository.UnknownRepositoryStructure;
53
54 /**
55 * @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a>
56 * @author <a href="mailto:brett@apache.org">Brett Porter</a>
57 * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
58 * @author Olivier Lamy
59 */
60 public interface ScmManager {
61 // ----------------------------------------------------------------------
62 // Repository
63 // ----------------------------------------------------------------------
64
65 /**
66 * Generate a {@link ScmRepository} from an SCM URL.
67 *
68 * @param scmUrl the scm url
69 * @return the scm repository (never {@code null})
70 * @throws NoSuchScmProviderException if the provider doesn't exist
71 * @throws ScmRepositoryException if an error occurs in the scm repository construction
72 */
73 ScmRepository makeScmRepository(String scmUrl) throws ScmRepositoryException, NoSuchScmProviderException;
74
75 /**
76 * Generate a {@link ScmRepository} for a specific provider and a given checkout (working) directory
77 * @param providerType
78 * @param path the checkout (working) directory
79 * @return the SCM repository (never {@code null})
80 * @throws ScmRepositoryException if the provider does not recognize the directory
81 * @throws UnknownRepositoryStructure if the provider does not support this way of generating a {@link ScmRepository}
82 * @throws NoSuchScmProviderException if the given provider type does not have a provider implementation bound
83 */
84 ScmRepository makeProviderScmRepository(String providerType, File path)
85 throws ScmRepositoryException, UnknownRepositoryStructure, NoSuchScmProviderException;
86
87 /**
88 * Generate a {@link ScmRepository} for a given checkout (working) directory.
89 * Determines a suitable SCM provider for the directory by looking for SCM specific metadata files.
90 * @param path the checkout (working) directory
91 * @return the {@link ScmRepository} or empty if no suitable provider found
92 * @since 2.2.1
93 */
94 Optional<ScmRepository> makeProviderScmRepository(File path);
95
96 /**
97 * Validate a SCM URL.
98 *
99 * @param scmUrl the SCM URL to validate
100 * @return <code>List</code> of <code>String</code> objects with the messages returned by the SCM provider
101 */
102 List<String> validateScmRepository(String scmUrl);
103
104 ScmProvider getProviderByUrl(String scmUrl) throws ScmRepositoryException, NoSuchScmProviderException;
105
106 /**
107 * Returns the default provider registered for this providerType or a specific implementation if the
108 * 'maven.scm.provider.providerType.implementation' system property is defined. For example:
109 * maven.scm.provider.git.implementation=git.
110 *
111 * @param providerType the provider type (git, svn...)
112 * @return the scm provider
113 * @throws NoSuchScmProviderException if the provider doesn't exist
114 */
115 ScmProvider getProviderByType(String providerType) throws NoSuchScmProviderException;
116
117 ScmProvider getProviderByRepository(ScmRepository repository) throws NoSuchScmProviderException;
118
119 /**
120 * Set a provider to be used for a type of SCM. If there was already a designed provider for that type it will be
121 * replaced.
122 *
123 * @param providerType the type of SCM, e.g. <code>svn</code>, <code>git</code>
124 * @param provider the provider that will be used for that SCM type
125 */
126 void setScmProvider(String providerType, ScmProvider provider);
127
128 /**
129 * Set the provider implementation.
130 *
131 * @param providerType the provider type, e.g. <code>git</code>
132 * @param providerImplementation the provider implementation (the role-hint of the provider), e.g. <code>git</code>,
133 * <code>svn</code>
134 */
135 void setScmProviderImplementation(String providerType, String providerImplementation);
136
137 /**
138 * Adds the given files to the source control system.
139 *
140 * @param repository the source control system
141 * @param fileSet the files to be added
142 * @return an {@link AddScmResult} that contains the file paths (relative to {@code fileSet.getBasedir()}) that
143 * have been added
144 * @throws ScmException if any
145 */
146 AddScmResult add(ScmRepository repository, ScmFileSet fileSet) throws ScmException;
147
148 /**
149 * Adds the given files to the source control system.
150 *
151 * @param repository the source control system
152 * @param fileSet the files to be added
153 * @param message a string that is a comment on the new added file
154 * @return an {@link AddScmResult} that contains the file paths (relative to {@code fileSet.getBasedir()}) that
155 * have been added
156 * @throws ScmException if any
157 */
158 AddScmResult add(ScmRepository repository, ScmFileSet fileSet, String message) throws ScmException;
159
160 /**
161 * Branch (or label in some systems) will create a branch of the source file with a certain branch name.
162 *
163 * @param repository the source control system
164 * @param fileSet the files to branch. Implementations can also give the changes from the
165 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
166 * @param branchName the branch name to apply to the files
167 * @return TODO
168 * @throws ScmException if any
169 */
170 BranchScmResult branch(ScmRepository repository, ScmFileSet fileSet, String branchName) throws ScmException;
171
172 /**
173 * Branch (or label in some systems) will create a branch of the source file with a certain branch name.
174 *
175 * @param repository the source control system
176 * @param fileSet the files to branch. Implementations can also give the changes from the
177 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
178 * @param branchName the branch name to apply to the files
179 * @param message the commit message used for the tag creation
180 * @return TODO
181 * @throws ScmException if any
182 */
183 BranchScmResult branch(ScmRepository repository, ScmFileSet fileSet, String branchName, String message)
184 throws ScmException;
185
186 /**
187 * Returns the changes that have happend in the source control system in a certain period of time. This can be
188 * adding, removing, updating, ... of files.
189 *
190 * @param repository the source control system
191 * @param fileSet the files to know the changes about. Implementations can also give the changes from the
192 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
193 * @param startDate the start date of the period
194 * @param endDate the end date of the period
195 * @param numDays the number days before the current time if startdate and enddate are null
196 * @param branch the branch/tag
197 * @return the SCM result of the changelog command
198 * @throws ScmException if any
199 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
200 */
201 @Deprecated
202 ChangeLogScmResult changeLog(
203 ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate, int numDays, ScmBranch branch)
204 throws ScmException;
205
206 /**
207 * Returns the changes that have happend in the source control system in a certain period of time. This can be
208 * adding, removing, updating, ... of files.
209 *
210 * @param repository the source control system
211 * @param fileSet the files to know the changes about. Implementations can also give the changes from the
212 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
213 * @param startDate the start date of the period
214 * @param endDate the end date of the period
215 * @param numDays the number days before the current time if startdate and enddate are null
216 * @param branch the branch/tag
217 * @param datePattern the date pattern use in changelog output returned by scm tool
218 * @return the SCM result of the changelog command
219 * @throws ScmException if any
220 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
221 */
222 @Deprecated
223 ChangeLogScmResult changeLog(
224 ScmRepository repository,
225 ScmFileSet fileSet,
226 Date startDate,
227 Date endDate,
228 int numDays,
229 ScmBranch branch,
230 String datePattern)
231 throws ScmException;
232
233 /**
234 * Returns the changes that have happend in the source control system in a certain period of time. This can be
235 * adding, removing, updating, ... of files.
236 *
237 * @param scmRequest request wrapping detailed parameters for the changelog command
238 * @return the SCM result of the changelog command
239 * @throws ScmException if any
240 * @since 1.8
241 */
242 ChangeLogScmResult changeLog(ChangeLogScmRequest scmRequest) 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 startVersion the start branch/tag/revision
252 * @param endVersion the end branch/tag/revision
253 * @return the SCM result of the changelog command
254 * @throws ScmException if any
255 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
256 */
257 @Deprecated
258 ChangeLogScmResult changeLog(
259 ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion, ScmVersion endVersion)
260 throws ScmException;
261
262 /**
263 * Returns the changes that have happend in the source control system between two tags. This can be adding,
264 * removing, updating, ... of files.
265 *
266 * @param repository the source control system
267 * @param fileSet the files to know the changes about. Implementations can also give the changes from the
268 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
269 * @param startRevision the start revision
270 * @param endRevision the end revision
271 * @param datePattern the date pattern use in changelog output returned by scm tool
272 * @return TODO
273 * @throws ScmException if any
274 * @deprecated use {@link #changeLog(org.apache.maven.scm.command.changelog.ChangeLogScmRequest)} instead
275 */
276 @Deprecated
277 ChangeLogScmResult changeLog(
278 ScmRepository repository,
279 ScmFileSet fileSet,
280 ScmVersion startRevision,
281 ScmVersion endRevision,
282 String datePattern)
283 throws ScmException;
284
285 /**
286 * Save the changes you have done into the repository. This will create a new version of the file or directory in
287 * the repository.
288 * <p>
289 * When the fileSet has no entries, the {@code fileSet.getBasedir()} is recursively committed. When the fileSet
290 * has entries, the commit is non-recursive and only the elements in the fileSet are committed.
291 *
292 * @param repository the source control system
293 * @param fileSet the files to check in (sometimes called commit)
294 * @param message a string that is a comment on the changes that where done
295 * @return a {@link CheckInScmResult} that contains the file paths (relative to {@code fileSet.getBasedir()}) that
296 * have been checked in
297 * @throws ScmException if any
298 */
299 CheckInScmResult checkIn(ScmRepository repository, ScmFileSet fileSet, String message) throws ScmException;
300
301 /**
302 * Save the changes you have done into the repository. This will create a new version of the file or directory in
303 * the repository.
304 * <p>
305 * When the fileSet has no entries, the {@code fileSet.getBasedir()} is recursively committed. When the fileSet
306 * has entries, the commit is non-recursive and only the elements in the fileSet are committed.
307 *
308 * @param repository the source control system
309 * @param fileSet the files to check in (sometimes called commit)
310 * @param commandParameters parameters for the command, such as commit message and whether to sign the commit. {@link CommandParameters}
311 * @return a {@link CheckInScmResult} that contains the file paths (relative to {@code fileSet.getBasedir()}) that
312 * have been checked in
313 * @throws ScmException if any
314 */
315 CheckInScmResult checkIn(ScmRepository repository, ScmFileSet fileSet, CommandParameters commandParameters)
316 throws ScmException;
317
318 /**
319 * Save the changes you have done into the repository. This will create a new version of the file or directory in
320 * the repository.
321 * <p>
322 * When the fileSet has no entries, the {@code fileSet.getBasedir()} is recursively committed. When the fileSet
323 * has entries, the commit is non-recursive and only the elements in the fileSet are committed.
324 *
325 * @param repository the source control system
326 * @param fileSet the files to check in (sometimes called commit)
327 * @param revision branch/tag/revision
328 * @param message a string that is a comment on the changes that where done
329 * @return a {@link CheckInScmResult} that contains the file paths (relative to {@code fileSet.getBasedir()}) that
330 * have been checked in
331 * @throws ScmException if any
332 */
333 CheckInScmResult checkIn(ScmRepository repository, ScmFileSet fileSet, ScmVersion revision, String message)
334 throws ScmException;
335
336 /**
337 * Create a copy of the repository on your local machine.
338 *
339 * @param repository the source control system
340 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
341 * @return TODO
342 * @throws ScmException if any
343 */
344 CheckOutScmResult checkOut(ScmRepository repository, ScmFileSet fileSet) throws ScmException;
345
346 /**
347 * Create a copy of the repository on your local machine.
348 *
349 * @param repository the source control system
350 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
351 * @param version get the version defined by the revision, branch or tag
352 * @return TODO
353 * @throws ScmException if any
354 */
355 CheckOutScmResult checkOut(ScmRepository repository, ScmFileSet fileSet, ScmVersion version) throws ScmException;
356
357 /**
358 * Create a copy of the repository on your local machine.
359 *
360 * @param scmRepository the source control system
361 * @param scmFileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
362 * @param recursive whether to check out recursively
363 * @return TODO
364 * @throws ScmException if any
365 */
366 CheckOutScmResult checkOut(ScmRepository scmRepository, ScmFileSet scmFileSet, boolean recursive)
367 throws ScmException;
368
369 /**
370 * Create a copy of the repository on your local machine.
371 *
372 * @param scmRepository the source control system
373 * @param scmFileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
374 * @param version get the version defined by the revision, branch or tag
375 * @param recursive whether to check out recursively
376 * @return TODO
377 * @throws ScmException if any
378 */
379 CheckOutScmResult checkOut(
380 ScmRepository scmRepository, ScmFileSet scmFileSet, ScmVersion version, boolean recursive)
381 throws ScmException;
382
383 /**
384 * Create a diff between two branch/tag/revision.
385 *
386 * @param scmRepository the source control system
387 * @param scmFileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
388 * @param startVersion the start branch/tag/revision
389 * @param endVersion the end branch/tag/revision
390 * @return TODO
391 * @throws ScmException if any
392 */
393 DiffScmResult diff(
394 ScmRepository scmRepository, ScmFileSet scmFileSet, ScmVersion startVersion, ScmVersion endVersion)
395 throws ScmException;
396
397 /**
398 * Make a file editable. This is used in source control systems where you look at read-only files, and you need to
399 * make them writable before you can edit them. This can also mean that no other user in the system can
400 * make the file writable.
401 *
402 * @param repository the source control system
403 * @param fileSet the files to make editable
404 * @return TODO
405 * @throws ScmException if any
406 */
407 EditScmResult edit(ScmRepository repository, ScmFileSet fileSet) throws ScmException;
408
409 /**
410 * Create an exported copy of the repository on your local machine.
411 *
412 * @param repository the source control system
413 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
414 * @return TODO
415 * @throws ScmException if any
416 */
417 ExportScmResult export(ScmRepository repository, ScmFileSet fileSet) throws ScmException;
418
419 /**
420 * Create an exported copy of the repository on your local machine.
421 *
422 * @param repository the source control system
423 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
424 * @param version get the version defined by the branch/tag/revision
425 * @return TODO
426 * @throws ScmException if any
427 */
428 ExportScmResult export(ScmRepository repository, ScmFileSet fileSet, ScmVersion version) throws ScmException;
429
430 /**
431 * Create an exported copy of the repository on your local machine.
432 *
433 * @param repository the source control system
434 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
435 * @param outputDirectory the directory where the export will be stored
436 * @return TODO
437 * @throws ScmException if any
438 */
439 ExportScmResult export(ScmRepository repository, ScmFileSet fileSet, String outputDirectory) throws ScmException;
440
441 /**
442 * Create an exported copy of the repository on your local machine.
443 *
444 * @param repository the source control system
445 * @param fileSet the files are copied to the {@link org.apache.maven.scm.ScmFileSet#getBasedir()} location
446 * @param version get the version defined by the branch/tag/revision
447 * @param outputDirectory the directory where the export will be stored
448 * @return TODO
449 * @throws ScmException if any
450 */
451 ExportScmResult export(ScmRepository repository, ScmFileSet fileSet, ScmVersion version, String outputDirectory)
452 throws ScmException;
453
454 /**
455 * List each element (files and directories) of <B>fileSet</B> as they exist in the repository.
456 *
457 * @param repository the source control system
458 * @param fileSet the files to list
459 * @param recursive descend recursively
460 * @param version use the version defined by the branch/tag/revision
461 * @return the list of files in the repository
462 * @throws ScmException if any
463 */
464 ListScmResult list(ScmRepository repository, ScmFileSet fileSet, boolean recursive, ScmVersion version)
465 throws ScmException;
466
467 /**
468 * Create new directory/directories in the repository.
469 *
470 * @param repository TODO
471 * @param fileSet TODO
472 * @param message TODO
473 * @param createInLocal TODO
474 * @return TODO
475 * @throws ScmException if any
476 */
477 MkdirScmResult mkdir(ScmRepository repository, ScmFileSet fileSet, String message, boolean createInLocal)
478 throws ScmException;
479
480 /**
481 * Removes the given files from the source control system.
482 *
483 * @param repository the source control system
484 * @param fileSet the files to be removed
485 * @param message TODO
486 * @return a {@link RemoveScmResult} that contains the file paths (relative to {@code fileSet.getBasedir()}) that
487 * have been removed
488 * @throws ScmException if any
489 */
490 RemoveScmResult remove(ScmRepository repository, ScmFileSet fileSet, String message) throws ScmException;
491
492 /**
493 * Returns the status of the files in the source control system. The state of each file can be one of the
494 * {@link org.apache.maven.scm.ScmFileStatus} flags.
495 *
496 * @param repository the source control system
497 * @param fileSet the files to know the status about. Implementations can also give the changes from the
498 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
499 * @return TODO
500 * @throws ScmException if any
501 */
502 StatusScmResult status(ScmRepository repository, ScmFileSet fileSet) throws ScmException;
503
504 /**
505 * Tag (or label in some systems) will tag the source file with a certain tag.
506 *
507 * @param repository the source control system
508 * @param fileSet the files to tag. Implementations can also give the changes from the
509 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
510 * @param tagName the tag name to apply to the files
511 * @return TODO
512 * @throws ScmException if any
513 */
514 TagScmResult tag(ScmRepository repository, ScmFileSet fileSet, String tagName) throws ScmException;
515
516 /**
517 * Tag (or label in some systems) will tag the source file with a certain tag.
518 *
519 * @param repository the source control system
520 * @param fileSet the files to tag. Implementations can also give the changes from the
521 * {@link org.apache.maven.scm.ScmFileSet#getBasedir()} downwards.
522 * @param tagName the tag name to apply to the files
523 * @param message the commit message used for the tag creation
524 * @return TODO
525 * @throws ScmException if any
526 */
527 TagScmResult tag(ScmRepository repository, ScmFileSet fileSet, String tagName, String message) throws ScmException;
528
529 /**
530 * Make a file no longer editable. This is the conterpart of
531 * {@link #edit(org.apache.maven.scm.repository.ScmRepository, org.apache.maven.scm.ScmFileSet)}. It makes the file
532 * read-only again.
533 *
534 * @param repository the source control system
535 * @param fileSet the files to make uneditable
536 * @return TODO
537 * @throws ScmException if any
538 */
539 UnEditScmResult unedit(ScmRepository repository, ScmFileSet fileSet) throws ScmException;
540
541 /**
542 * Updates the copy on the local machine with the changes in the repository.
543 *
544 * @param repository the source control system
545 * @param fileSet location of your local copy
546 * @return TODO
547 * @throws ScmException if any
548 */
549 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet) 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 version use the version defined by the branch/tag/revision
557 * @return TODO
558 * @throws ScmException if any
559 */
560 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, ScmVersion version) 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 runChangelog run the changelog command after the update
568 * @return TODO
569 * @throws ScmException if any
570 */
571 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, boolean runChangelog) throws ScmException;
572
573 /**
574 * Updates the copy on the local machine with the changes in the repository.
575 *
576 * @param repository the source control system
577 * @param fileSet location of your local copy
578 * @param version use the version defined by the branch/tag/revision
579 * @param runChangelog run the changelog command after the update
580 * @return TODO
581 * @throws ScmException if any
582 */
583 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, ScmVersion version, boolean runChangelog)
584 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 datePattern the date pattern use in changelog output returned by scm tool
592 * @return TODO
593 * @throws ScmException if any
594 */
595 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, String datePattern) throws ScmException;
596
597 /**
598 * Updates the copy on the local machine with the changes in the repository.
599 *
600 * @param repository the source control system
601 * @param fileSet location of your local copy
602 * @param version use the version defined by the branch/tag/revision
603 * @param datePattern the date pattern use in changelog output returned by scm tool
604 * @return TODO
605 * @throws ScmException if any
606 */
607 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, ScmVersion version, String datePattern)
608 throws ScmException;
609
610 /**
611 * Updates the copy on the local machine with the changes in the repository.
612 *
613 * @param repository the source control system
614 * @param fileSet location of your local copy
615 * @param lastUpdate TODO
616 * @return TODO
617 * @throws ScmException if any
618 */
619 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, Date lastUpdate) throws ScmException;
620
621 /**
622 * Updates the copy on the local machine with the changes in the repository.
623 *
624 * @param repository the source control system
625 * @param fileSet location of your local copy
626 * @param version use the version defined by the branch/tag/revision
627 * @param lastUpdate TODO
628 * @return TODO
629 * @throws ScmException if any
630 */
631 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, ScmVersion version, Date lastUpdate)
632 throws ScmException;
633
634 /**
635 * Updates the copy on the local machine with the changes in the repository.
636 *
637 * @param repository the source control system
638 * @param fileSet location of your local copy
639 * @param lastUpdate date of last update
640 * @param datePattern the date pattern use in changelog output returned by scm tool
641 * @return TODO
642 * @throws ScmException if any
643 */
644 UpdateScmResult update(ScmRepository repository, ScmFileSet fileSet, Date lastUpdate, String datePattern)
645 throws ScmException;
646
647 /**
648 * Updates the copy on the local machine with the changes in the repository.
649 *
650 * @param repository the source control system
651 * @param fileSet location of your local copy
652 * @param version use the version defined by the branch/tag/revision
653 * @param lastUpdate date of last update
654 * @param datePattern the date pattern use in changelog output returned by scm tool
655 * @return TODO
656 * @throws ScmException if any
657 */
658 UpdateScmResult update(
659 ScmRepository repository, ScmFileSet fileSet, ScmVersion version, Date lastUpdate, String datePattern)
660 throws ScmException;
661
662 /**
663 * Returns the blame of specified file.
664 *
665 * @param repository the source control system
666 * @param fileSet location of your local copy
667 * @param filename file
668 * @return blame for specified file
669 * @throws ScmException if any
670 * @since 1.4
671 */
672 BlameScmResult blame(ScmRepository repository, ScmFileSet fileSet, String filename) throws ScmException;
673
674 /**
675 * @param blameScmRequest TODO
676 * @return blame for specified file
677 * @throws ScmException if any
678 * @since 1.4
679 */
680 BlameScmResult blame(BlameScmRequest blameScmRequest) throws ScmException;
681 }