1 package org.apache.maven.scm.provider.bazaar.command.tag;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23
24 import org.apache.maven.scm.ScmException;
25 import org.apache.maven.scm.ScmFileSet;
26 import org.apache.maven.scm.ScmFileStatus;
27 import org.apache.maven.scm.ScmResult;
28 import org.apache.maven.scm.ScmTagParameters;
29 import org.apache.maven.scm.command.tag.AbstractTagCommand;
30 import org.apache.maven.scm.command.tag.TagScmResult;
31 import org.apache.maven.scm.provider.ScmProviderRepository;
32 import org.apache.maven.scm.provider.bazaar.BazaarUtils;
33 import org.apache.maven.scm.provider.bazaar.command.BazaarConstants;
34 import org.apache.maven.scm.provider.bazaar.command.BazaarConsumer;
35 import org.apache.maven.scm.provider.bazaar.repository.BazaarScmProviderRepository;
36 import org.codehaus.plexus.util.StringUtils;
37
38
39
40
41
42 public class BazaarTagCommand
43 extends AbstractTagCommand
44 {
45 protected ScmResult executeTagCommand( ScmProviderRepository repository, ScmFileSet fileSet, String tagName,
46 ScmTagParameters scmTagParameters )
47 throws ScmException
48 {
49 if ( tagName == null || StringUtils.isEmpty( tagName.trim() ) )
50 {
51 throw new ScmException( "tag name must be specified" );
52 }
53
54 if ( !fileSet.getFileList().isEmpty() )
55 {
56 throw new ScmException( "tagging specific files is not allowed" );
57 }
58
59
60 File bazaarRoot = fileSet.getBasedir();
61 BazaarConsumer consumer = new BazaarConsumer( getLogger() );
62 String[] tagCmd = new String[] { BazaarConstants.TAG_CMD, tagName };
63 ScmResult tagResult = BazaarUtils.execute( consumer, getLogger(), bazaarRoot, tagCmd );
64 if ( !tagResult.isSuccess() )
65 {
66 return new TagScmResult( null, tagResult );
67 }
68
69
70 BazaarLsConsumer lsConsumer = new BazaarLsConsumer( getLogger(), bazaarRoot, ScmFileStatus.TAGGED );
71 String[] lsCmd = new String[] {
72 BazaarConstants.LS_CMD,
73 BazaarConstants.RECURSIVE_OPTION,
74 BazaarConstants.REVISION_OPTION,
75 "tag:" + tagName
76 };
77 ScmResult lsResult = BazaarUtils.execute( lsConsumer, getLogger(), bazaarRoot, lsCmd );
78 if ( !lsResult.isSuccess() )
79 {
80 return new TagScmResult( null, lsResult );
81 }
82
83
84 BazaarScmProviderRepository bazaarRepository = (BazaarScmProviderRepository) repository;
85 if ( !bazaarRepository.getURI().equals( fileSet.getBasedir().getAbsolutePath() ) && repository.isPushChanges() )
86 {
87 String[] pushCmd = new String[] { BazaarConstants.PUSH_CMD, bazaarRepository.getURI() };
88 ScmResult pushResult =
89 BazaarUtils.execute( new BazaarConsumer( getLogger() ), getLogger(), fileSet.getBasedir(), pushCmd );
90 if ( !pushResult.isSuccess() )
91 {
92 return new TagScmResult( null, pushResult );
93 }
94 }
95
96 return new TagScmResult( lsConsumer.getListedFiles(), tagResult );
97 }
98 }