1 package org.apache.maven.scm.provider;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.scm.CommandParameter;
23 import org.apache.maven.scm.CommandParameters;
24 import org.apache.maven.scm.NoSuchCommandScmException;
25 import org.apache.maven.scm.ScmBranch;
26 import org.apache.maven.scm.ScmBranchParameters;
27 import org.apache.maven.scm.ScmException;
28 import org.apache.maven.scm.ScmFileSet;
29 import org.apache.maven.scm.ScmRevision;
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.login.LoginScmResult;
46 import org.apache.maven.scm.command.mkdir.MkdirScmResult;
47 import org.apache.maven.scm.command.remoteinfo.RemoteInfoScmResult;
48 import org.apache.maven.scm.command.remove.RemoveScmResult;
49 import org.apache.maven.scm.command.status.StatusScmResult;
50 import org.apache.maven.scm.command.tag.TagScmResult;
51 import org.apache.maven.scm.command.unedit.UnEditScmResult;
52 import org.apache.maven.scm.command.update.UpdateScmResult;
53 import org.apache.maven.scm.log.ScmLogDispatcher;
54 import org.apache.maven.scm.log.ScmLogger;
55 import org.apache.maven.scm.repository.ScmRepository;
56 import org.apache.maven.scm.repository.ScmRepositoryException;
57 import org.apache.maven.scm.repository.UnknownRepositoryStructure;
58 import org.codehaus.plexus.util.StringUtils;
59
60 import java.io.File;
61 import java.util.ArrayList;
62 import java.util.Date;
63 import java.util.List;
64
65
66
67
68
69
70
71 public abstract class AbstractScmProvider
72 implements ScmProvider
73 {
74 private ScmLogDispatcher logDispatcher = new ScmLogDispatcher();
75
76
77
78
79
80
81
82
83 public String getScmSpecificFilename()
84 {
85 return null;
86 }
87
88
89
90
91 public String sanitizeTagName( String tag )
92 {
93
94 return tag;
95 }
96
97
98
99
100 public boolean validateTagName( String tag )
101 {
102
103 return true;
104 }
105
106
107
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
127
128 public boolean requiresEditMode()
129 {
130 return false;
131 }
132
133
134
135
136
137
138
139
140 public AddScmResult add( ScmRepository repository, ScmFileSet fileSet )
141 throws ScmException
142 {
143 return add( repository, fileSet, (String) null );
144 }
145
146
147
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
159
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 if ( parameters.getString( CommandParameter.BINARY , null ) == null )
171 {
172
173
174 parameters.setString( CommandParameter.BINARY, "false" );
175 }
176
177 return add( repository.getProviderRepository(), fileSet, parameters );
178 }
179
180 public AddScmResult add( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
181 throws ScmException
182 {
183 throw new NoSuchCommandScmException( "add" );
184 }
185
186
187
188
189 public BranchScmResult branch( ScmRepository repository, ScmFileSet fileSet, String branchName )
190 throws ScmException
191 {
192 return branch( repository, fileSet, branchName, new ScmBranchParameters() );
193 }
194
195
196
197
198 public BranchScmResult branch( ScmRepository repository, ScmFileSet fileSet, String branchName, String message )
199 throws ScmException
200 {
201 ScmBranchParameters scmBranchParameters = new ScmBranchParameters();
202
203 if ( StringUtils.isNotEmpty( message ) )
204 {
205 scmBranchParameters.setMessage( message );
206 }
207
208 return branch( repository, fileSet, branchName, scmBranchParameters );
209 }
210
211 public BranchScmResult branch( ScmRepository repository, ScmFileSet fileSet, String branchName,
212 ScmBranchParameters scmBranchParameters )
213 throws ScmException
214 {
215 login( repository, fileSet );
216
217 CommandParameters parameters = new CommandParameters();
218
219 parameters.setString( CommandParameter.BRANCH_NAME, branchName );
220
221 parameters.setScmBranchParameters( CommandParameter.SCM_BRANCH_PARAMETERS, scmBranchParameters );
222
223 return branch( repository.getProviderRepository(), fileSet, parameters );
224 }
225
226 protected BranchScmResult branch( ScmProviderRepository repository, ScmFileSet fileSet,
227 CommandParameters parameters )
228 throws ScmException
229 {
230 throw new NoSuchCommandScmException( "branch" );
231 }
232
233
234
235
236
237
238 public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
239 int numDays, String branch )
240 throws ScmException
241 {
242 return changeLog( repository, fileSet, startDate, endDate, numDays, branch, null );
243 }
244
245
246
247
248
249
250 public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
251 int numDays, String branch, String datePattern )
252 throws ScmException
253 {
254 ScmBranch scmBranch = null;
255
256 if ( StringUtils.isNotEmpty( branch ) )
257 {
258 scmBranch = new ScmBranch( branch );
259 }
260 return changeLog( repository, fileSet, startDate, endDate, numDays, scmBranch, null );
261
262 }
263
264
265
266
267 public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
268 int numDays, ScmBranch branch )
269 throws ScmException
270 {
271 return changeLog( repository, fileSet, startDate, endDate, numDays, branch, null );
272 }
273
274
275
276
277 public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, Date startDate, Date endDate,
278 int numDays, ScmBranch branch, String datePattern )
279 throws ScmException
280 {
281 final ChangeLogScmRequest request = new ChangeLogScmRequest( repository, fileSet );
282 request.setDateRange( startDate, endDate );
283 request.setNumDays( numDays );
284 request.setScmBranch( branch );
285 request.setDatePattern( datePattern );
286 return changeLog( request );
287 }
288
289
290
291
292 public ChangeLogScmResult changeLog( ChangeLogScmRequest request )
293 throws ScmException
294 {
295 final ScmRepository scmRepository = request.getScmRepository();
296 final ScmFileSet scmFileSet = request.getScmFileSet();
297 login( scmRepository, scmFileSet );
298 return changelog( scmRepository.getProviderRepository(), scmFileSet, request.getCommandParameters() );
299 }
300
301
302
303
304
305
306
307 public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, String startTag, String endTag )
308 throws ScmException
309 {
310 return changeLog( repository, fileSet, startTag, endTag, null );
311 }
312
313
314
315
316
317
318 public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, String startTag, String endTag,
319 String datePattern )
320 throws ScmException
321 {
322 ScmVersion startRevision = null;
323 ScmVersion endRevision = null;
324
325 if ( StringUtils.isNotEmpty( startTag ) )
326 {
327 startRevision = new ScmRevision( startTag );
328 }
329
330 if ( StringUtils.isNotEmpty( endTag ) )
331 {
332 endRevision = new ScmRevision( endTag );
333 }
334
335 return changeLog( repository, fileSet, startRevision, endRevision, null );
336 }
337
338
339
340
341 public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion,
342 ScmVersion endVersion )
343 throws ScmException
344 {
345 return changeLog( repository, fileSet, startVersion, endVersion, null );
346 }
347
348
349
350
351 public ChangeLogScmResult changeLog( ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion,
352 ScmVersion endVersion, String datePattern )
353 throws ScmException
354 {
355 login( repository, fileSet );
356
357 CommandParameters parameters = new CommandParameters();
358
359 parameters.setScmVersion( CommandParameter.START_SCM_VERSION, startVersion );
360
361 parameters.setScmVersion( CommandParameter.END_SCM_VERSION, endVersion );
362
363 parameters.setString( CommandParameter.CHANGELOG_DATE_PATTERN, datePattern );
364
365 return changelog( repository.getProviderRepository(), fileSet, parameters );
366 }
367
368 protected ChangeLogScmResult changelog( ScmProviderRepository repository, ScmFileSet fileSet,
369 CommandParameters parameters )
370 throws ScmException
371 {
372 throw new NoSuchCommandScmException( "changelog" );
373 }
374
375
376
377
378
379
380
381 public CheckInScmResult checkIn( ScmRepository repository, ScmFileSet fileSet, String tag, String message )
382 throws ScmException
383 {
384 ScmVersion scmVersion = null;
385
386 if ( StringUtils.isNotEmpty( tag ) )
387 {
388 scmVersion = new ScmBranch( tag );
389 }
390
391 return checkIn( repository, fileSet, scmVersion, message );
392 }
393
394
395
396
397 public CheckInScmResult checkIn( ScmRepository repository, ScmFileSet fileSet, String message )
398 throws ScmException
399 {
400 return checkIn( repository, fileSet, (ScmVersion) null, message );
401 }
402
403
404
405
406 public CheckInScmResult checkIn( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion,
407 String message )
408 throws ScmException
409 {
410 login( repository, fileSet );
411
412 CommandParameters parameters = new CommandParameters();
413
414 parameters.setScmVersion( CommandParameter.SCM_VERSION, scmVersion );
415
416 parameters.setString( CommandParameter.MESSAGE, message );
417
418 return checkin( repository.getProviderRepository(), fileSet, parameters );
419 }
420
421 protected CheckInScmResult checkin( ScmProviderRepository repository, ScmFileSet fileSet,
422 CommandParameters parameters )
423 throws ScmException
424 {
425 throw new NoSuchCommandScmException( "checkin" );
426 }
427
428
429
430
431
432
433
434 public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, String tag )
435 throws ScmException
436 {
437 return checkOut( repository, fileSet, tag, true );
438 }
439
440
441
442
443
444
445 public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, String tag, boolean recursive )
446 throws ScmException
447 {
448 ScmVersion scmVersion = null;
449
450 if ( StringUtils.isNotEmpty( tag ) )
451 {
452 scmVersion = new ScmBranch( tag );
453 }
454
455 return checkOut( repository, fileSet, scmVersion, recursive );
456 }
457
458
459
460
461 public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet )
462 throws ScmException
463 {
464 return checkOut( repository, fileSet, (ScmVersion) null, true );
465 }
466
467
468
469
470 public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion )
471 throws ScmException
472 {
473 return checkOut( repository, fileSet, scmVersion, true );
474 }
475
476
477
478
479 public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, boolean recursive )
480 throws ScmException
481 {
482 return checkOut( repository, fileSet, (ScmVersion) null, recursive );
483 }
484
485
486
487
488 public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion,
489 boolean recursive )
490 throws ScmException
491 {
492 login( repository, fileSet );
493
494 CommandParameters parameters = new CommandParameters();
495
496 parameters.setScmVersion( CommandParameter.SCM_VERSION, scmVersion );
497
498 parameters.setString( CommandParameter.RECURSIVE, Boolean.toString( recursive ) );
499
500 return checkout( repository.getProviderRepository(), fileSet, parameters );
501 }
502
503 @Override
504 public CheckOutScmResult checkOut( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion,
505 CommandParameters commandParameters )
506 throws ScmException
507 {
508 login( repository, fileSet );
509 if ( scmVersion != null && commandParameters.getScmVersion( CommandParameter.SCM_VERSION, null ) == null )
510 {
511 commandParameters.setScmVersion( CommandParameter.SCM_VERSION, scmVersion );
512 }
513
514 return checkout( repository.getProviderRepository(), fileSet, commandParameters );
515 }
516
517 protected CheckOutScmResult checkout( ScmProviderRepository repository, ScmFileSet fileSet,
518 CommandParameters parameters )
519 throws ScmException
520 {
521 throw new NoSuchCommandScmException( "checkout" );
522 }
523
524
525
526
527
528
529 public DiffScmResult diff( ScmRepository repository, ScmFileSet fileSet, String startRevision, String endRevision )
530 throws ScmException
531 {
532 ScmVersion startVersion = null;
533 ScmVersion endVersion = null;
534
535 if ( StringUtils.isNotEmpty( startRevision ) )
536 {
537 startVersion = new ScmRevision( startRevision );
538 }
539
540 if ( StringUtils.isNotEmpty( endRevision ) )
541 {
542 endVersion = new ScmRevision( endRevision );
543 }
544
545 return diff( repository, fileSet, startVersion, endVersion );
546 }
547
548
549
550
551 public DiffScmResult diff( ScmRepository repository, ScmFileSet fileSet, ScmVersion startVersion,
552 ScmVersion endVersion )
553 throws ScmException
554 {
555 login( repository, fileSet );
556
557 CommandParameters parameters = new CommandParameters();
558
559 parameters.setScmVersion( CommandParameter.START_SCM_VERSION, startVersion );
560
561 parameters.setScmVersion( CommandParameter.END_SCM_VERSION, endVersion );
562
563 return diff( repository.getProviderRepository(), fileSet, parameters );
564 }
565
566 protected DiffScmResult diff( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
567 throws ScmException
568 {
569 throw new NoSuchCommandScmException( "diff" );
570 }
571
572
573
574
575 public EditScmResult edit( ScmRepository repository, ScmFileSet fileSet )
576 throws ScmException
577 {
578 login( repository, fileSet );
579
580 CommandParameters parameters = new CommandParameters();
581
582 return edit( repository.getProviderRepository(), fileSet, parameters );
583 }
584
585 protected EditScmResult edit( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
586 throws ScmException
587 {
588 if ( getLogger().isWarnEnabled() )
589 {
590 getLogger().warn( "Provider " + this.getScmType() + " does not support edit operation." );
591 }
592
593 return new EditScmResult( "", null, null, true );
594 }
595
596
597
598
599
600
601 public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, String tag )
602 throws ScmException
603 {
604 return export( repository, fileSet, tag, null );
605 }
606
607
608
609
610
611
612 public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, String tag, String outputDirectory )
613 throws ScmException
614 {
615 ScmVersion scmVersion = null;
616
617 if ( StringUtils.isNotEmpty( tag ) )
618 {
619 scmVersion = new ScmRevision( tag );
620 }
621
622 return export( repository, fileSet, scmVersion, outputDirectory );
623 }
624
625
626
627
628 public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet )
629 throws ScmException
630 {
631 return export( repository, fileSet, (ScmVersion) null, null );
632 }
633
634
635
636
637 public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion )
638 throws ScmException
639 {
640 return export( repository, fileSet, scmVersion, null );
641 }
642
643
644
645
646 public ExportScmResult export( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion,
647 String outputDirectory )
648 throws ScmException
649 {
650 login( repository, fileSet );
651
652 CommandParameters parameters = new CommandParameters();
653
654 parameters.setScmVersion( CommandParameter.SCM_VERSION, scmVersion );
655
656 parameters.setString( CommandParameter.OUTPUT_DIRECTORY, outputDirectory );
657
658 return export( repository.getProviderRepository(), fileSet, parameters );
659 }
660
661 protected ExportScmResult export( ScmProviderRepository repository, ScmFileSet fileSet,
662 CommandParameters parameters )
663 throws ScmException
664 {
665 throw new NoSuchCommandScmException( "export" );
666 }
667
668
669
670
671 public ListScmResult list( ScmRepository repository, ScmFileSet fileSet, boolean recursive, String tag )
672 throws ScmException
673 {
674 ScmVersion scmVersion = null;
675
676 if ( StringUtils.isNotEmpty( tag ) )
677 {
678 scmVersion = new ScmRevision( tag );
679 }
680
681 return list( repository, fileSet, recursive, scmVersion );
682 }
683
684
685
686
687 public ListScmResult list( ScmRepository repository, ScmFileSet fileSet, boolean recursive, ScmVersion scmVersion )
688 throws ScmException
689 {
690 login( repository, fileSet );
691
692 CommandParameters parameters = new CommandParameters();
693
694 parameters.setString( CommandParameter.RECURSIVE, Boolean.toString( recursive ) );
695
696 if ( scmVersion != null )
697 {
698 parameters.setScmVersion( CommandParameter.SCM_VERSION, scmVersion );
699 }
700
701 return list( repository.getProviderRepository(), fileSet, parameters );
702 }
703
704
705
706
707
708
709
710
711
712
713
714 protected ListScmResult list( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
715 throws ScmException
716 {
717 throw new NoSuchCommandScmException( "list" );
718 }
719
720
721
722
723 public MkdirScmResult mkdir( ScmRepository repository, ScmFileSet fileSet, String message, boolean createInLocal )
724 throws ScmException
725 {
726 login( repository, fileSet );
727
728 CommandParameters parameters = new CommandParameters();
729
730 if ( message == null )
731 {
732 message = "";
733 if ( !createInLocal )
734 {
735 getLogger().warn( "Commit message is empty!" );
736 }
737 }
738
739 parameters.setString( CommandParameter.MESSAGE, message );
740
741 parameters.setString( CommandParameter.SCM_MKDIR_CREATE_IN_LOCAL, Boolean.toString( createInLocal ) );
742
743 return mkdir( repository.getProviderRepository(), fileSet, parameters );
744 }
745
746
747
748
749
750
751
752
753
754
755 protected MkdirScmResult mkdir( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
756 throws ScmException
757 {
758 throw new NoSuchCommandScmException( "mkdir" );
759 }
760
761 private void login( ScmRepository repository, ScmFileSet fileSet )
762 throws ScmException
763 {
764 LoginScmResult result = login( repository.getProviderRepository(), fileSet, new CommandParameters() );
765
766 if ( !result.isSuccess() )
767 {
768 throw new ScmException( "Can't login.\n" + result.getCommandOutput() );
769 }
770 }
771
772 protected LoginScmResult login( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
773 throws ScmException
774 {
775 return new LoginScmResult( null, null, null, true );
776 }
777
778
779
780
781 public RemoveScmResult remove( ScmRepository repository, ScmFileSet fileSet, String message )
782 throws ScmException
783 {
784 login( repository, fileSet );
785
786 CommandParameters parameters = new CommandParameters();
787
788 parameters.setString( CommandParameter.MESSAGE, message == null ? "" : message );
789
790 return remove( repository.getProviderRepository(), fileSet, parameters );
791 }
792
793 protected RemoveScmResult remove( ScmProviderRepository repository, ScmFileSet fileSet,
794 CommandParameters parameters )
795 throws ScmException
796 {
797 throw new NoSuchCommandScmException( "remove" );
798 }
799
800
801
802
803 public StatusScmResult status( ScmRepository repository, ScmFileSet fileSet )
804 throws ScmException
805 {
806 login( repository, fileSet );
807
808 CommandParameters parameters = new CommandParameters();
809
810 return status( repository.getProviderRepository(), fileSet, parameters );
811 }
812
813 protected StatusScmResult status( ScmProviderRepository repository, ScmFileSet fileSet,
814 CommandParameters parameters )
815 throws ScmException
816 {
817 throw new NoSuchCommandScmException( "status" );
818 }
819
820
821
822
823 public TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName )
824 throws ScmException
825 {
826 return tag( repository, fileSet, tagName, new ScmTagParameters() );
827 }
828
829
830
831
832 public TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName, String message )
833 throws ScmException
834 {
835 login( repository, fileSet );
836
837 CommandParameters parameters = new CommandParameters();
838
839 parameters.setString( CommandParameter.TAG_NAME, tagName );
840
841 if ( StringUtils.isNotEmpty( message ) )
842 {
843 parameters.setString( CommandParameter.MESSAGE, message );
844 }
845
846 ScmTagParameters scmTagParameters = new ScmTagParameters( message );
847
848 parameters.setScmTagParameters( CommandParameter.SCM_TAG_PARAMETERS, scmTagParameters );
849
850 return tag( repository.getProviderRepository(), fileSet, parameters );
851 }
852
853
854
855
856 public TagScmResult tag( ScmRepository repository, ScmFileSet fileSet, String tagName,
857 ScmTagParameters scmTagParameters )
858 throws ScmException
859 {
860 login( repository, fileSet );
861
862 CommandParameters parameters = new CommandParameters();
863
864 parameters.setString( CommandParameter.TAG_NAME, tagName );
865
866 parameters.setScmTagParameters( CommandParameter.SCM_TAG_PARAMETERS, scmTagParameters );
867
868 return tag( repository.getProviderRepository(), fileSet, parameters );
869 }
870
871 protected TagScmResult tag( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
872 throws ScmException
873 {
874 throw new NoSuchCommandScmException( "tag" );
875 }
876
877
878
879
880 public UnEditScmResult unedit( ScmRepository repository, ScmFileSet fileSet )
881 throws ScmException
882 {
883 login( repository, fileSet );
884
885 CommandParameters parameters = new CommandParameters();
886
887 return unedit( repository.getProviderRepository(), fileSet, parameters );
888 }
889
890 protected UnEditScmResult unedit( ScmProviderRepository repository, ScmFileSet fileSet,
891 CommandParameters parameters )
892 throws ScmException
893 {
894 if ( getLogger().isWarnEnabled() )
895 {
896 getLogger().warn( "Provider " + this.getScmType() + " does not support unedit operation." );
897 }
898
899 return new UnEditScmResult( "", null, null, true );
900 }
901
902
903
904
905
906
907 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag )
908 throws ScmException
909 {
910 return update( repository, fileSet, tag, true );
911 }
912
913
914
915
916
917
918 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag, boolean runChangelog )
919 throws ScmException
920 {
921 return update( repository, fileSet, tag, "", runChangelog );
922 }
923
924
925
926
927 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet )
928 throws ScmException
929 {
930 return update( repository, fileSet, (ScmVersion) null, true );
931 }
932
933
934
935
936 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion )
937 throws ScmException
938 {
939 return update( repository, fileSet, scmVersion, true );
940 }
941
942
943
944
945 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, boolean runChangelog )
946 throws ScmException
947 {
948 return update( repository, fileSet, (ScmVersion) null, "", runChangelog );
949 }
950
951
952
953
954 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion,
955 boolean runChangelog )
956 throws ScmException
957 {
958 return update( repository, fileSet, scmVersion, "", runChangelog );
959 }
960
961
962
963
964
965
966 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag, String datePattern )
967 throws ScmException
968 {
969 return update( repository, fileSet, tag, datePattern, true );
970 }
971
972
973
974
975 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion,
976 String datePattern )
977 throws ScmException
978 {
979 return update( repository, fileSet, scmVersion, datePattern, true );
980 }
981
982
983
984
985 private UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag, String datePattern,
986 boolean runChangelog )
987 throws ScmException
988 {
989 ScmBranch scmBranch = null;
990
991 if ( StringUtils.isNotEmpty( tag ) )
992 {
993 scmBranch = new ScmBranch( tag );
994 }
995
996 return update( repository, fileSet, scmBranch, datePattern, runChangelog );
997 }
998
999 private UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion,
1000 String datePattern, boolean runChangelog )
1001 throws ScmException
1002 {
1003 login( repository, fileSet );
1004
1005 CommandParameters parameters = new CommandParameters();
1006
1007 parameters.setScmVersion( CommandParameter.SCM_VERSION, scmVersion );
1008
1009 parameters.setString( CommandParameter.CHANGELOG_DATE_PATTERN, datePattern );
1010
1011 parameters.setString( CommandParameter.RUN_CHANGELOG_WITH_UPDATE, String.valueOf( runChangelog ) );
1012
1013 return update( repository.getProviderRepository(), fileSet, parameters );
1014 }
1015
1016
1017
1018
1019
1020
1021 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag, Date lastUpdate )
1022 throws ScmException
1023 {
1024 return update( repository, fileSet, tag, lastUpdate, null );
1025 }
1026
1027
1028
1029
1030 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion,
1031 Date lastUpdate )
1032 throws ScmException
1033 {
1034 return update( repository, fileSet, scmVersion, lastUpdate, null );
1035 }
1036
1037
1038
1039
1040
1041
1042 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, String tag, Date lastUpdate,
1043 String datePattern )
1044 throws ScmException
1045 {
1046 ScmBranch scmBranch = null;
1047
1048 if ( StringUtils.isNotEmpty( tag ) )
1049 {
1050 scmBranch = new ScmBranch( tag );
1051 }
1052
1053 return update( repository, fileSet, scmBranch, lastUpdate, datePattern );
1054 }
1055
1056
1057
1058
1059 public UpdateScmResult update( ScmRepository repository, ScmFileSet fileSet, ScmVersion scmVersion, Date lastUpdate,
1060 String datePattern )
1061 throws ScmException
1062 {
1063 login( repository, fileSet );
1064
1065 CommandParameters parameters = new CommandParameters();
1066
1067 parameters.setScmVersion( CommandParameter.SCM_VERSION, scmVersion );
1068
1069 if ( lastUpdate != null )
1070 {
1071 parameters.setDate( CommandParameter.START_DATE, lastUpdate );
1072 }
1073
1074 parameters.setString( CommandParameter.CHANGELOG_DATE_PATTERN, datePattern );
1075
1076 parameters.setString( CommandParameter.RUN_CHANGELOG_WITH_UPDATE, "true" );
1077
1078 return update( repository.getProviderRepository(), fileSet, parameters );
1079 }
1080
1081 protected UpdateScmResult update( ScmProviderRepository repository, ScmFileSet fileSet,
1082 CommandParameters parameters )
1083 throws ScmException
1084 {
1085 throw new NoSuchCommandScmException( "update" );
1086 }
1087
1088
1089
1090
1091 public BlameScmResult blame( ScmRepository repository, ScmFileSet fileSet, String filename )
1092 throws ScmException
1093 {
1094 login( repository, fileSet );
1095
1096 CommandParameters parameters = new CommandParameters();
1097
1098 parameters.setString( CommandParameter.FILE, filename );
1099
1100 return blame( repository.getProviderRepository(), fileSet, parameters );
1101 }
1102
1103 protected BlameScmResult blame( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
1104 throws ScmException
1105 {
1106 throw new NoSuchCommandScmException( "blame" );
1107 }
1108
1109 public BlameScmResult blame( BlameScmRequest blameScmRequest )
1110 throws ScmException
1111 {
1112 return blame( blameScmRequest.getScmRepository().getProviderRepository(), blameScmRequest.getScmFileSet(),
1113 blameScmRequest.getCommandParameters() );
1114 }
1115
1116 public InfoScmResult info( ScmProviderRepository repository, ScmFileSet fileSet, CommandParameters parameters )
1117 throws ScmException
1118 {
1119 return null;
1120 }
1121
1122 public RemoteInfoScmResult remoteInfo( ScmProviderRepository repository, ScmFileSet fileSet,
1123 CommandParameters parameters )
1124 throws ScmException
1125 {
1126 return null;
1127 }
1128
1129
1130
1131
1132
1133
1134
1135
1136 public void addListener( ScmLogger logger )
1137 {
1138 logDispatcher.addListener( logger );
1139 }
1140
1141 public ScmLogger getLogger()
1142 {
1143 return logDispatcher;
1144 }
1145
1146
1147
1148
1149 public ScmProviderRepository makeProviderScmRepository( File path )
1150 throws ScmRepositoryException, UnknownRepositoryStructure
1151 {
1152 throw new UnknownRepositoryStructure();
1153 }
1154 }