001 package org.apache.maven.scm.provider;
002
003 /*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements. See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership. The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License. You may obtain a copy of the License at
011 *
012 * http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied. See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022 import org.apache.maven.scm.CommandParameter;
023 import org.apache.maven.scm.CommandParameters;
024 import org.apache.maven.scm.NoSuchCommandScmException;
025 import org.apache.maven.scm.ScmBranch;
026 import org.apache.maven.scm.ScmBranchParameters;
027 import org.apache.maven.scm.ScmException;
028 import org.apache.maven.scm.ScmFileSet;
029 import org.apache.maven.scm.ScmRevision;
030 import org.apache.maven.scm.ScmTagParameters;
031 import org.apache.maven.scm.ScmVersion;
032 import org.apache.maven.scm.command.add.AddScmResult;
033 import org.apache.maven.scm.command.blame.BlameScmRequest;
034 import org.apache.maven.scm.command.blame.BlameScmResult;
035 import org.apache.maven.scm.command.branch.BranchScmResult;
036 import org.apache.maven.scm.command.changelog.ChangeLogScmRequest;
037 import org.apache.maven.scm.command.changelog.ChangeLogScmResult;
038 import org.apache.maven.scm.command.checkin.CheckInScmResult;
039 import org.apache.maven.scm.command.checkout.CheckOutScmResult;
040 import org.apache.maven.scm.command.diff.DiffScmResult;
041 import org.apache.maven.scm.command.edit.EditScmResult;
042 import org.apache.maven.scm.command.export.ExportScmResult;
043 import org.apache.maven.scm.command.info.InfoScmResult;
044 import org.apache.maven.scm.command.list.ListScmResult;
045 import org.apache.maven.scm.command.login.LoginScmResult;
046 import org.apache.maven.scm.command.mkdir.MkdirScmResult;
047 import org.apache.maven.scm.command.remoteinfo.RemoteInfoScmResult;
048 import org.apache.maven.scm.command.remove.RemoveScmResult;
049 import org.apache.maven.scm.command.status.StatusScmResult;
050 import org.apache.maven.scm.command.tag.TagScmResult;
051 import org.apache.maven.scm.command.unedit.UnEditScmResult;
052 import org.apache.maven.scm.command.update.UpdateScmResult;
053 import org.apache.maven.scm.log.ScmLogDispatcher;
054 import org.apache.maven.scm.log.ScmLogger;
055 import org.apache.maven.scm.repository.ScmRepository;
056 import org.apache.maven.scm.repository.ScmRepositoryException;
057 import org.apache.maven.scm.repository.UnknownRepositoryStructure;
058 import org.codehaus.plexus.util.StringUtils;
059
060 import java.io.File;
061 import java.util.ArrayList;
062 import java.util.Date;
063 import java.util.List;
064
065 /**
066 * @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a>
067 * @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
068 * @author Olivier Lamy
069 *
070 */
071 public abstract class AbstractScmProvider
072 implements ScmProvider
073 {
074 private ScmLogDispatcher logDispatcher = new ScmLogDispatcher();
075
076 // ----------------------------------------------------------------------
077 //
078 // ----------------------------------------------------------------------
079
080 /**
081 * {@inheritDoc}
082 */
083 public String getScmSpecificFilename()
084 {
085 return null;
086 }
087
088 /**
089 * {@inheritDoc}
090 */
091 public String sanitizeTagName( String tag )
092 {
093 /* by default, we assume all tags are valid. */
094 return tag;
095 }
096
097 /**
098 * {@inheritDoc}
099 */
100 public boolean validateTagName( String tag )
101 {
102 /* by default, we assume all tags are valid. */
103 return true;
104 }
105
106 /**
107 * {@inheritDoc}
108 */
109 public List<String> validateScmUrl( String scmSpecificUrl, char delimiter )
110 {
111 List<String> messages = new ArrayList<String>();
112
113 try
114 {
115 makeProviderScmRepository( scmSpecificUrl, delimiter );
116 }
117 catch ( ScmRepositoryException e )
118 {
119 messages.add( e.getMessage() );
120 }
121
122 return messages;
123 }
124
125 /**
126 * {@inheritDoc}
127 */
128 public boolean requiresEditMode()
129 {
130 return false;
131 }
132
133 // ----------------------------------------------------------------------
134 // Scm Implementation
135 // ----------------------------------------------------------------------
136
137 /**
138 * {@inheritDoc}
139 */
140 public AddScmResult add( ScmRepository repository, ScmFileSet fileSet )
141 throws ScmException
142 {
143 return add( repository, fileSet, (String) null );
144 }
145
146 /**
147 * {@inheritDoc}
148 */
149 public AddScmResult add( ScmRepository repository, ScmFileSet fileSet, String message )
150 throws ScmException
151 {
152 login( repository, fileSet );
153
154 CommandParameters parameters = new CommandParameters();
155
156 parameters.setString( CommandParameter.MESSAGE, message == null ? "" : message );
157
158 // TODO: binary may be dependant on particular files though
159 // TODO: set boolean?
160 parameters.setString( CommandParameter.BINARY, "false" );
161
162 return add( repository.getProviderRepository(), fileSet, parameters );
163 }
164
165 public AddScmResult add( ScmRepository repository, ScmFileSet fileSet, CommandParameters parameters )
166 throws ScmException
167 {
168 login( repository, fileSet );
169
170 // TODO: binary may be dependant on particular files though
171 // TODO: set boolean?
172 parameters.setString( CommandParameter.BINARY, "false" );
173
174 return add( repository.getProviderRepository(), fileSet, parameters );
175 }
176
177 public AddScmResult add( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
178 throws ScmException
179 {
180 throw new NoSuchCommandScmException( "add" );
181 }
182
183 /**
184 * {@inheritDoc}
185 */
186 public BranchScmResult branch( ScmRepository repository, ScmFileSet fileSet, String branchName )
187 throws ScmException
188 {
189 return branch( repository, fileSet, branchName, new ScmBranchParameters() );
190 }
191
192 /**
193 * {@inheritDoc}
194 */
195 public BranchScmResult branch( ScmRepository repository, ScmFileSet fileSet, String branchName, String message )
196 throws ScmException
197 {
198 ScmBranchParameters scmBranchParameters = new ScmBranchParameters();
199
200 if ( StringUtils.isNotEmpty( message ) )
201 {
202 scmBranchParameters.setMessage( message );
203 }
204
205 return branch( repository, fileSet, branchName, scmBranchParameters );
206 }
207
208 public BranchScmResult branch( ScmRepository repository, ScmFileSet fileSet, String branchName,
209 ScmBranchParameters scmBranchParameters )
210 throws ScmException
211 {
212 login( repository, fileSet );
213
214 CommandParameters parameters = new CommandParameters();
215
216 parameters.setString( CommandParameter.BRANCH_NAME, branchName );
217
218 parameters.setScmBranchParameters( CommandParameter.SCM_BRANCH_PARAMETERS, scmBranchParameters );
219
220 return branch( repository.getProviderRepository(), fileSet, parameters );
221 }
222
223 protected BranchScmResult branch( ScmProviderRepository repository, ScmFileSet fileSet,
224 CommandParameters parameters )
225 throws ScmException
226 {
227 throw new NoSuchCommandScmException( "branch" );
228 }
229
230 /**
231 * {@inheritDoc}
232 *
233 * @deprecated
234 */
235 public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
236 int numDays, String branch )
237 throws ScmException
238 {
239 return changeLog( repository, fileSet, startDate, endDate, numDays, branch, null );
240 }
241
242 /**
243 * {@inheritDoc}
244 *
245 * @deprecated
246 */
247 public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
248 int numDays, String branch, String datePattern )
249 throws ScmException
250 {
251 ScmBranch scmBranch = null;
252
253 if ( StringUtils.isNotEmpty( branch ) )
254 {
255 scmBranch = new ScmBranch( branch );
256 }
257 return changeLog( repository, fileSet, startDate, endDate, numDays, scmBranch, null );
258
259 }
260
261 /**
262 * {@inheritDoc}
263 */
264 public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
265 int numDays, ScmBranch branch )
266 throws ScmException
267 {
268 return changeLog( repository, fileSet, startDate, endDate, numDays, branch, null );
269 }
270
271 /**
272 * {@inheritDoc}
273 */
274 public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
275 int numDays, ScmBranch branch, String datePattern )
276 throws ScmException
277 {
278 final ChangeLogScmRequest request = new ChangeLogScmRequest( repository, fileSet );
279 request.setDateRange( startDate, endDate );
280 request.setNumDays( numDays );
281 request.setScmBranch( branch );
282 request.setDatePattern( datePattern );
283 return changeLog( request );
284 }
285
286 /**
287 * {@inheritDoc}
288 */
289 public ChangeLogScmResult changeLog( ChangeLogScmRequest request )
290 throws ScmException
291 {
292 final ScmRepository scmRepository = request.getScmRepository();
293 final ScmFileSet scmFileSet = request.getScmFileSet();
294 login( scmRepository, scmFileSet );
295 return changelog( scmRepository.getProviderRepository(), scmFileSet, request.getCommandParameters() );
296 }
297
298
299 /**
300 * {@inheritDoc}
301 *
302 * @deprecated
303 */
304 public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, String startTag, String endTag )
305 throws ScmException
306 {
307 return changeLog( repository, fileSet, startTag, endTag, null );
308 }
309
310 /**
311 * {@inheritDoc}
312 *
313 * @deprecated
314 */
315 public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, String startTag, String endTag,
316 String datePattern )
317 throws ScmException
318 {
319 ScmVersion startRevision = null;
320 ScmVersion endRevision = null;
321
322 if ( StringUtils.isNotEmpty( startTag ) )
323 {
324 startRevision = new ScmRevision( startTag );
325 }
326
327 if ( StringUtils.isNotEmpty( endTag ) )
328 {
329 endRevision = new ScmRevision( endTag );
330 }
331
332 return changeLog( repository, fileSet, startRevision, endRevision, null );
333 }
334
335 /**
336 * {@inheritDoc}
337 */
338 public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion,
339 ScmVersion endVersion )
340 throws ScmException
341 {
342 return changeLog( repository, fileSet, startVersion, endVersion, null );
343 }
344
345 /**
346 * {@inheritDoc}
347 */
348 public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion,
349 ScmVersion endVersion, String datePattern )
350 throws ScmException
351 {
352 login( repository, fileSet );
353
354 CommandParameters parameters = new CommandParameters();
355
356 parameters.setScmVersion( CommandParameter.START_SCM_VERSION, startVersion );
357
358 parameters.setScmVersion( CommandParameter.END_SCM_VERSION, endVersion );
359
360 parameters.setString( CommandParameter.CHANGELOG_DATE_PATTERN, datePattern );
361
362 return changelog( repository.getProviderRepository(), fileSet, parameters );
363 }
364
365 protected ChangeLogScmResult changelog( ScmProviderRepository repository, ScmFileSet fileSet,
366 CommandParameters parameters )
367 throws ScmException
368 {
369 throw new NoSuchCommandScmException( "changelog" );
370 }
371
372
373 /**
374 * {@inheritDoc}
375 *
376 * @deprecated
377 */
378 public CheckInScmResult checkIn( ScmRepository repository, ScmFileSet fileSet, String tag, String message )
379 throws ScmException
380 {
381 ScmVersion scmVersion = null;
382
383 if ( StringUtils.isNotEmpty( tag ) )
384 {
385 scmVersion = new ScmBranch( tag );
386 }
387
388 return checkIn( repository, fileSet, scmVersion, message );
389 }
390
391 /**
392 * {@inheritDoc}
393 */
394 public CheckInScmResult checkIn( ScmRepository repository, ScmFileSet fileSet, String message )
395 throws ScmException
396 {
397 return checkIn( repository, fileSet, (ScmVersion) null, message );
398 }
399
400 /**
401 * {@inheritDoc}
402 */
403 public CheckInScmResult checkIn( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion,
404 String message )
405 throws ScmException
406 {
407 login( repository, fileSet );
408
409 CommandParameters parameters = new CommandParameters();
410
411 parameters.setScmVersion( CommandParameter.SCM_VERSION, scmVersion );
412
413 parameters.setString( CommandParameter.MESSAGE, message );
414
415 return checkin( repository.getProviderRepository(), fileSet, parameters );
416 }
417
418 protected CheckInScmResult checkin( ScmProviderRepository repository, ScmFileSet fileSet,
419 CommandParameters parameters )
420 throws ScmException
421 {
422 throw new NoSuchCommandScmException( "checkin" );
423 }
424
425
426 /**
427 * {@inheritDoc}
428 *
429 * @deprecated
430 */
431 public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, String tag )
432 throws ScmException
433 {
434 return checkOut( repository, fileSet, tag, true );
435 }
436
437 /**
438 * {@inheritDoc}
439 *
440 * @deprecated
441 */
442 public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, String tag, boolean recursive )
443 throws ScmException
444 {
445 ScmVersion scmVersion = null;
446
447 if ( StringUtils.isNotEmpty( tag ) )
448 {
449 scmVersion = new ScmBranch( tag );
450 }
451
452 return checkOut( repository, fileSet, scmVersion, recursive );
453 }
454
455 /**
456 * {@inheritDoc}
457 */
458 public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet )
459 throws ScmException
460 {
461 return checkOut( repository, fileSet, (ScmVersion) null, true );
462 }
463
464 /**
465 * {@inheritDoc}
466 */
467 public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion )
468 throws ScmException
469 {
470 return checkOut( repository, fileSet, scmVersion, true );
471 }
472
473 /**
474 * {@inheritDoc}
475 */
476 public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, boolean recursive )
477 throws ScmException
478 {
479 return checkOut( repository, fileSet, (ScmVersion) null, recursive );
480 }
481
482 /**
483 * {@inheritDoc}
484 */
485 public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion,
486 boolean recursive )
487 throws ScmException
488 {
489 login( repository, fileSet );
490
491 CommandParameters parameters = new CommandParameters();
492
493 parameters.setScmVersion( CommandParameter.SCM_VERSION, scmVersion );
494
495 parameters.setString( CommandParameter.RECURSIVE, Boolean.toString( recursive ) );
496
497 return checkout( repository.getProviderRepository(), fileSet, parameters );
498 }
499
500 protected CheckOutScmResult checkout( ScmProviderRepository repository, ScmFileSet fileSet,
501 CommandParameters parameters )
502 throws ScmException
503 {
504 throw new NoSuchCommandScmException( "checkout" );
505 }
506
507 /**
508 * {@inheritDoc}
509 *
510 * @deprecated
511 */
512 public DiffScmResult diff( ScmRepository repository, ScmFileSet fileSet, String startRevision, String endRevision )
513 throws ScmException
514 {
515 ScmVersion startVersion = null;
516 ScmVersion endVersion = null;
517
518 if ( StringUtils.isNotEmpty( startRevision ) )
519 {
520 startVersion = new ScmRevision( startRevision );
521 }
522
523 if ( StringUtils.isNotEmpty( endRevision ) )
524 {
525 endVersion = new ScmRevision( endRevision );
526 }
527
528 return diff( repository, fileSet, startVersion, endVersion );
529 }
530
531 /**
532 * {@inheritDoc}
533 */
534 public DiffScmResult diff( ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion,
535 ScmVersion endVersion )
536 throws ScmException
537 {
538 login( repository, fileSet );
539
540 CommandParameters parameters = new CommandParameters();
541
542 parameters.setScmVersion( CommandParameter.START_SCM_VERSION, startVersion );
543
544 parameters.setScmVersion( CommandParameter.END_SCM_VERSION, endVersion );
545
546 return diff( repository.getProviderRepository(), fileSet, parameters );
547 }
548
549 protected DiffScmResult diff( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
550 throws ScmException
551 {
552 throw new NoSuchCommandScmException( "diff" );
553 }
554
555 /**
556 * {@inheritDoc}
557 */
558 public EditScmResult edit( ScmRepository repository, ScmFileSet fileSet )
559 throws ScmException
560 {
561 login( repository, fileSet );
562
563 CommandParameters parameters = new CommandParameters();
564
565 return edit( repository.getProviderRepository(), fileSet, parameters );
566 }
567
568 protected EditScmResult edit( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
569 throws ScmException
570 {
571 if ( getLogger().isWarnEnabled() )
572 {
573 getLogger().warn( "Provider " + this.getScmType() + " does not support edit operation." );
574 }
575
576 return new EditScmResult( "", null, null, true );
577 }
578
579 /**
580 * {@inheritDoc}
581 *
582 * @deprecated
583 */
584 public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, String tag )
585 throws ScmException
586 {
587 return export( repository, fileSet, tag, null );
588 }
589
590 /**
591 * {@inheritDoc}
592 *
593 * @deprecated
594 */
595 public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, String tag, String outputDirectory )
596 throws ScmException
597 {
598 ScmVersion scmVersion = null;
599
600 if ( StringUtils.isNotEmpty( tag ) )
601 {
602 scmVersion = new ScmRevision( tag );
603 }
604
605 return export( repository, fileSet, scmVersion, outputDirectory );
606 }
607
608 /**
609 * {@inheritDoc}
610 */
611 public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet )
612 throws ScmException
613 {
614 return export( repository, fileSet, (ScmVersion) null, null );
615 }
616
617 /**
618 * {@inheritDoc}
619 */
620 public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion )
621 throws ScmException
622 {
623 return export( repository, fileSet, scmVersion, null );
624 }
625
626 /**
627 * {@inheritDoc}
628 */
629 public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion,
630 String outputDirectory )
631 throws ScmException
632 {
633 login( repository, fileSet );
634
635 CommandParameters parameters = new CommandParameters();
636
637 parameters.setScmVersion( CommandParameter.SCM_VERSION, scmVersion );
638
639 parameters.setString( CommandParameter.OUTPUT_DIRECTORY, outputDirectory );
640
641 return export( repository.getProviderRepository(), fileSet, parameters );
642 }
643
644 protected ExportScmResult export( ScmProviderRepository repository, ScmFileSet fileSet,
645 CommandParameters parameters )
646 throws ScmException
647 {
648 throw new NoSuchCommandScmException( "export" );
649 }
650
651 /**
652 * {@inheritDoc}
653 */
654 public ListScmResult list( ScmRepository repository, ScmFileSet fileSet, boolean recursive, String tag )
655 throws ScmException
656 {
657 ScmVersion scmVersion = null;
658
659 if ( StringUtils.isNotEmpty( tag ) )
660 {
661 scmVersion = new ScmRevision( tag );
662 }
663
664 return list( repository, fileSet, recursive, scmVersion );
665 }
666
667 /**
668 * {@inheritDoc}
669 */
670 public ListScmResult list( ScmRepository repository, ScmFileSet fileSet, boolean recursive, ScmVersion scmVersion )
671 throws ScmException
672 {
673 login( repository, fileSet );
674
675 CommandParameters parameters = new CommandParameters();
676
677 parameters.setString( CommandParameter.RECURSIVE, Boolean.toString( recursive ) );
678
679 if ( scmVersion != null )
680 {
681 parameters.setScmVersion( CommandParameter.SCM_VERSION, scmVersion );
682 }
683
684 return list( repository.getProviderRepository(), fileSet, parameters );
685 }
686
687 /**
688 * List each element (files and directories) of <B>fileSet</B> as they exist in the repository.
689 *
690 * @param repository the source control system
691 * @param fileSet the files to list
692 * @param parameters
693 * @return The list of files in the repository
694 * @throws NoSuchCommandScmException unless overriden by subclass
695 * @throws ScmException if any
696 */
697 protected ListScmResult list( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
698 throws ScmException
699 {
700 throw new NoSuchCommandScmException( "list" );
701 }
702
703 /**
704 * {@inheritDoc}
705 */
706 public MkdirScmResult mkdir( ScmRepository repository, ScmFileSet fileSet, String message, boolean createInLocal )
707 throws ScmException
708 {
709 login( repository, fileSet );
710
711 CommandParameters parameters = new CommandParameters();
712
713 if ( message == null )
714 {
715 message = "";
716 if ( !createInLocal )
717 {
718 getLogger().warn( "Commit message is empty!" );
719 }
720 }
721
722 parameters.setString( CommandParameter.MESSAGE, message );
723
724 parameters.setString( CommandParameter.SCM_MKDIR_CREATE_IN_LOCAL, Boolean.toString( createInLocal ) );
725
726 return mkdir( repository.getProviderRepository(), fileSet, parameters );
727 }
728
729 /**
730 * Create directory/directories in the repository.
731 *
732 * @param repository
733 * @param fileSet
734 * @param parameters
735 * @return
736 * @throws ScmException
737 */
738 protected MkdirScmResult mkdir( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
739 throws ScmException
740 {
741 throw new NoSuchCommandScmException( "mkdir" );
742 }
743
744 private void login( ScmRepository repository, ScmFileSet fileSet )
745 throws ScmException
746 {
747 LoginScmResult result = login( repository.getProviderRepository(), fileSet, new CommandParameters() );
748
749 if ( !result.isSuccess() )
750 {
751 throw new ScmException( "Can't login.\n" + result.getCommandOutput() );
752 }
753 }
754
755 protected LoginScmResult login( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
756 throws ScmException
757 {
758 return new LoginScmResult( null, null, null, true );
759 }
760
761 /**
762 * {@inheritDoc}
763 */
764 public RemoveScmResult remove( ScmRepository repository, ScmFileSet fileSet, String message )
765 throws ScmException
766 {
767 login( repository, fileSet );
768
769 CommandParameters parameters = new CommandParameters();
770
771 parameters.setString( CommandParameter.MESSAGE, message == null ? "" : message );
772
773 return remove( repository.getProviderRepository(), fileSet, parameters );
774 }
775
776 protected RemoveScmResult remove( ScmProviderRepository repository, ScmFileSet fileSet,
777 CommandParameters parameters )
778 throws ScmException
779 {
780 throw new NoSuchCommandScmException( "remove" );
781 }
782
783 /**
784 * {@inheritDoc}
785 */
786 public StatusScmResult status( ScmRepository repository, ScmFileSet fileSet )
787 throws ScmException
788 {
789 login( repository, fileSet );
790
791 CommandParameters parameters = new CommandParameters();
792
793 return status( repository.getProviderRepository(), fileSet, parameters );
794 }
795
796 protected StatusScmResult status( ScmProviderRepository repository, ScmFileSet fileSet,
797 CommandParameters parameters )
798 throws ScmException
799 {
800 throw new NoSuchCommandScmException( "status" );
801 }
802
803 /**
804 * {@inheritDoc}
805 */
806 public TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName )
807 throws ScmException
808 {
809 return tag( repository, fileSet, tagName, new ScmTagParameters() );
810 }
811
812 /**
813 * {@inheritDoc}
814 */
815 public TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName, String message )
816 throws ScmException
817 {
818 login( repository, fileSet );
819
820 CommandParameters parameters = new CommandParameters();
821
822 parameters.setString( CommandParameter.TAG_NAME, tagName );
823
824 if ( StringUtils.isNotEmpty( message ) )
825 {
826 parameters.setString( CommandParameter.MESSAGE, message );
827 }
828
829 ScmTagParameters scmTagParameters = new ScmTagParameters( message );
830
831 parameters.setScmTagParameters( CommandParameter.SCM_TAG_PARAMETERS, scmTagParameters );
832
833 return tag( repository.getProviderRepository(), fileSet, parameters );
834 }
835
836 /**
837 * {@inheritDoc}
838 */
839 public TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName,
840 ScmTagParameters scmTagParameters )
841 throws ScmException
842 {
843 login( repository, fileSet );
844
845 CommandParameters parameters = new CommandParameters();
846
847 parameters.setString( CommandParameter.TAG_NAME, tagName );
848
849 parameters.setScmTagParameters( CommandParameter.SCM_TAG_PARAMETERS, scmTagParameters );
850
851 return tag( repository.getProviderRepository(), fileSet, parameters );
852 }
853
854 protected TagScmResult tag( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
855 throws ScmException
856 {
857 throw new NoSuchCommandScmException( "tag" );
858 }
859
860 /**
861 * {@inheritDoc}
862 */
863 public UnEditScmResult unedit( ScmRepository repository, ScmFileSet fileSet )
864 throws ScmException
865 {
866 login( repository, fileSet );
867
868 CommandParameters parameters = new CommandParameters();
869
870 return unedit( repository.getProviderRepository(), fileSet, parameters );
871 }
872
873 protected UnEditScmResult unedit( ScmProviderRepository repository, ScmFileSet fileSet,
874 CommandParameters parameters )
875 throws ScmException
876 {
877 if ( getLogger().isWarnEnabled() )
878 {
879 getLogger().warn( "Provider " + this.getScmType() + " does not support unedit operation." );
880 }
881
882 return new UnEditScmResult( "", null, null, true );
883 }
884
885 /**
886 * {@inheritDoc}
887 *
888 * @deprecated
889 */
890 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag )
891 throws ScmException
892 {
893 return update( repository, fileSet, tag, true );
894 }
895
896 /**
897 * {@inheritDoc}
898 *
899 * @deprecated
900 */
901 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag, boolean runChangelog )
902 throws ScmException
903 {
904 return update( repository, fileSet, tag, "", runChangelog );
905 }
906
907 /**
908 * {@inheritDoc}
909 */
910 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet )
911 throws ScmException
912 {
913 return update( repository, fileSet, (ScmVersion) null, true );
914 }
915
916 /**
917 * {@inheritDoc}
918 */
919 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion )
920 throws ScmException
921 {
922 return update( repository, fileSet, scmVersion, true );
923 }
924
925 /**
926 * {@inheritDoc}
927 */
928 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, boolean runChangelog )
929 throws ScmException
930 {
931 return update( repository, fileSet, (ScmVersion) null, "", runChangelog );
932 }
933
934 /**
935 * {@inheritDoc}
936 */
937 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion,
938 boolean runChangelog )
939 throws ScmException
940 {
941 return update( repository, fileSet, scmVersion, "", runChangelog );
942 }
943
944 /**
945 * {@inheritDoc}
946 *
947 * @deprecated
948 */
949 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag, String datePattern )
950 throws ScmException
951 {
952 return update( repository, fileSet, tag, datePattern, true );
953 }
954
955 /**
956 * {@inheritDoc}
957 */
958 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion,
959 String datePattern )
960 throws ScmException
961 {
962 return update( repository, fileSet, scmVersion, datePattern, true );
963 }
964
965 /**
966 * @deprecated
967 */
968 private UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag, String datePattern,
969 boolean runChangelog )
970 throws ScmException
971 {
972 ScmBranch scmBranch = null;
973
974 if ( StringUtils.isNotEmpty( tag ) )
975 {
976 scmBranch = new ScmBranch( tag );
977 }
978
979 return update( repository, fileSet, scmBranch, datePattern, runChangelog );
980 }
981
982 private UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion,
983 String datePattern, boolean runChangelog )
984 throws ScmException
985 {
986 login( repository, fileSet );
987
988 CommandParameters parameters = new CommandParameters();
989
990 parameters.setScmVersion( CommandParameter.SCM_VERSION, scmVersion );
991
992 parameters.setString( CommandParameter.CHANGELOG_DATE_PATTERN, datePattern );
993
994 parameters.setString( CommandParameter.RUN_CHANGELOG_WITH_UPDATE, String.valueOf( runChangelog ) );
995
996 return update( repository.getProviderRepository(), fileSet, parameters );
997 }
998
999 /**
1000 * {@inheritDoc}
1001 *
1002 * @deprecated
1003 */
1004 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag, Date lastUpdate )
1005 throws ScmException
1006 {
1007 return update( repository, fileSet, tag, lastUpdate, null );
1008 }
1009
1010 /**
1011 * {@inheritDoc}
1012 */
1013 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion,
1014 Date lastUpdate )
1015 throws ScmException
1016 {
1017 return update( repository, fileSet, scmVersion, lastUpdate, null );
1018 }
1019
1020 /**
1021 * {@inheritDoc}
1022 *
1023 * @deprecated
1024 */
1025 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag, Date lastUpdate,
1026 String datePattern )
1027 throws ScmException
1028 {
1029 ScmBranch scmBranch = null;
1030
1031 if ( StringUtils.isNotEmpty( tag ) )
1032 {
1033 scmBranch = new ScmBranch( tag );
1034 }
1035
1036 return update( repository, fileSet, scmBranch, lastUpdate, datePattern );
1037 }
1038
1039 /**
1040 * {@inheritDoc}
1041 */
1042 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion, Date lastUpdate,
1043 String datePattern )
1044 throws ScmException
1045 {
1046 login( repository, fileSet );
1047
1048 CommandParameters parameters = new CommandParameters();
1049
1050 parameters.setScmVersion( CommandParameter.SCM_VERSION, scmVersion );
1051
1052 if ( lastUpdate != null )
1053 {
1054 parameters.setDate( CommandParameter.START_DATE, lastUpdate );
1055 }
1056
1057 parameters.setString( CommandParameter.CHANGELOG_DATE_PATTERN, datePattern );
1058
1059 parameters.setString( CommandParameter.RUN_CHANGELOG_WITH_UPDATE, "true" );
1060
1061 return update( repository.getProviderRepository(), fileSet, parameters );
1062 }
1063
1064 protected UpdateScmResult update( ScmProviderRepository repository, ScmFileSet fileSet,
1065 CommandParameters parameters )
1066 throws ScmException
1067 {
1068 throw new NoSuchCommandScmException( "update" );
1069 }
1070
1071 /**
1072 * {@inheritDoc}
1073 */
1074 public BlameScmResult blame( ScmRepository repository, ScmFileSet fileSet, String filename )
1075 throws ScmException
1076 {
1077 login( repository, fileSet );
1078
1079 CommandParameters parameters = new CommandParameters();
1080
1081 parameters.setString( CommandParameter.FILE, filename );
1082
1083 return blame( repository.getProviderRepository(), fileSet, parameters );
1084 }
1085
1086 protected BlameScmResult blame( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
1087 throws ScmException
1088 {
1089 throw new NoSuchCommandScmException( "blame" );
1090 }
1091
1092 public BlameScmResult blame( BlameScmRequest blameScmRequest )
1093 throws ScmException
1094 {
1095 return blame( blameScmRequest.getScmRepository().getProviderRepository(), blameScmRequest.getScmFileSet(),
1096 blameScmRequest.getCommandParameters() );
1097 }
1098
1099 public InfoScmResult info( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
1100 throws ScmException
1101 {
1102 return null;
1103 }
1104
1105 public RemoteInfoScmResult remoteInfo( ScmProviderRepository repository, ScmFileSet fileSet,
1106 CommandParameters parameters )
1107 throws ScmException
1108 {
1109 return null;
1110 }
1111
1112 // ----------------------------------------------------------------------
1113 //
1114 // ----------------------------------------------------------------------
1115
1116 /**
1117 * {@inheritDoc}
1118 */
1119 public void addListener( ScmLogger logger )
1120 {
1121 logDispatcher.addListener( logger );
1122 }
1123
1124 public ScmLogger getLogger()
1125 {
1126 return logDispatcher;
1127 }
1128
1129 /**
1130 * {@inheritDoc}
1131 */
1132 public ScmProviderRepository makeProviderScmRepository( File path )
1133 throws ScmRepositoryException, UnknownRepositoryStructure
1134 {
1135 throw new UnknownRepositoryStructure();
1136 }
1137 }