1 package org.apache.maven.scm.provider.hg.command.checkin;
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 import java.util.ArrayList;
24 import java.util.List;
25
26 import org.apache.maven.scm.ScmException;
27 import org.apache.maven.scm.ScmFile;
28 import org.apache.maven.scm.ScmFileSet;
29 import org.apache.maven.scm.ScmFileStatus;
30 import org.apache.maven.scm.ScmResult;
31 import org.apache.maven.scm.ScmVersion;
32 import org.apache.maven.scm.command.checkin.AbstractCheckInCommand;
33 import org.apache.maven.scm.command.checkin.CheckInScmResult;
34 import org.apache.maven.scm.command.status.StatusScmResult;
35 import org.apache.maven.scm.provider.ScmProviderRepository;
36 import org.apache.maven.scm.provider.hg.HgUtils;
37 import org.apache.maven.scm.provider.hg.command.HgCommandConstants;
38 import org.apache.maven.scm.provider.hg.command.HgConsumer;
39 import org.apache.maven.scm.provider.hg.command.status.HgStatusCommand;
40 import org.apache.maven.scm.provider.hg.repository.HgScmProviderRepository;
41 import org.codehaus.plexus.util.StringUtils;
42
43
44
45
46
47
48 public class HgCheckInCommand
49 extends AbstractCheckInCommand
50 {
51
52
53
54 protected CheckInScmResult executeCheckInCommand( ScmProviderRepository repo, ScmFileSet fileSet, String message,
55 ScmVersion tag )
56 throws ScmException
57 {
58 if ( tag != null && !StringUtils.isEmpty( tag.getName() ) )
59 {
60 throw new ScmException( "This provider can't handle tags for this operation" );
61 }
62
63
64 File workingDir = fileSet.getBasedir();
65 String branchName = HgUtils.getCurrentBranchName( getLogger(), workingDir );
66 boolean differentOutgoingBranch =
67 repo.isPushChanges() ? HgUtils.differentOutgoingBranchFound( getLogger(), workingDir, branchName ) : false;
68
69
70 List<ScmFile> commitedFiles = new ArrayList<ScmFile>();
71 List<File> files = fileSet.getFileList();
72 if ( files.isEmpty() )
73 {
74 HgStatusCommand statusCmd = new HgStatusCommand();
75 statusCmd.setLogger( getLogger() );
76 StatusScmResult status = statusCmd.executeStatusCommand( repo, fileSet );
77 List<ScmFile> statusFiles = status.getChangedFiles();
78 for ( ScmFile file : statusFiles )
79 {
80 if ( file.getStatus() == ScmFileStatus.ADDED || file.getStatus() == ScmFileStatus.DELETED
81 || file.getStatus() == ScmFileStatus.MODIFIED )
82 {
83 commitedFiles.add( new ScmFile( file.getPath(), ScmFileStatus.CHECKED_IN ) );
84 }
85 }
86
87 }
88 else
89 {
90 for ( File file : files )
91 {
92 commitedFiles.add( new ScmFile( file.getPath(), ScmFileStatus.CHECKED_IN ) );
93 }
94 }
95
96
97 String[] commitCmd = new String[]{ HgCommandConstants.COMMIT_CMD, HgCommandConstants.MESSAGE_OPTION, message };
98 commitCmd = HgUtils.expandCommandLine( commitCmd, fileSet );
99 ScmResult result =
100 HgUtils.execute( new HgConsumer( getLogger() ), getLogger(), fileSet.getBasedir(), commitCmd );
101
102
103 HgScmProviderRepository repository = (HgScmProviderRepository) repo;
104
105 if ( repo.isPushChanges() )
106 {
107
108 if ( !repository.getURI().equals( fileSet.getBasedir().getAbsolutePath() ) )
109 {
110 String[] pushCmd = new String[]{ HgCommandConstants.PUSH_CMD,
111 differentOutgoingBranch ? HgCommandConstants.REVISION_OPTION + branchName : null,
112 repository.getURI() };
113
114 result = HgUtils.execute( new HgConsumer( getLogger() ), getLogger(), fileSet.getBasedir(), pushCmd );
115 }
116
117 return new CheckInScmResult( commitedFiles, result );
118 }
119
120 return new CheckInScmResult( commitedFiles, result );
121 }
122
123
124 }