1 package org.apache.maven.scm.provider.starteam.command.status;
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.ScmException;
23 import org.apache.maven.scm.ScmFileSet;
24 import org.apache.maven.scm.command.status.AbstractStatusCommand;
25 import org.apache.maven.scm.command.status.StatusScmResult;
26 import org.apache.maven.scm.provider.ScmProviderRepository;
27 import org.apache.maven.scm.provider.starteam.command.StarteamCommand;
28 import org.apache.maven.scm.provider.starteam.command.StarteamCommandLineUtils;
29 import org.apache.maven.scm.provider.starteam.repository.StarteamScmProviderRepository;
30 import org.codehaus.plexus.util.cli.CommandLineUtils;
31 import org.codehaus.plexus.util.cli.Commandline;
32
33
34
35
36
37 public class StarteamStatusCommand
38 extends AbstractStatusCommand
39 implements StarteamCommand
40 {
41
42
43
44
45
46 protected StatusScmResult executeStatusCommand( ScmProviderRepository repo, ScmFileSet fileSet )
47 throws ScmException
48 {
49 if ( getLogger().isInfoEnabled() )
50 {
51 getLogger().info( "Working directory: " + fileSet.getBasedir().getAbsolutePath() );
52 }
53
54 if ( fileSet.getFileList().size() != 0 )
55 {
56 throw new ScmException( "This provider doesn't support checking status of a subsets of a directory" );
57 }
58
59 StarteamScmProviderRepository repository = (StarteamScmProviderRepository) repo;
60
61 StarteamStatusConsumer consumer = new StarteamStatusConsumer( getLogger(), fileSet.getBasedir() );
62
63 CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
64
65 Commandline cl = createCommandLine( repository, fileSet );
66
67 int exitCode = StarteamCommandLineUtils.executeCommandline( cl, consumer, stderr, getLogger() );
68
69 if ( exitCode != 0 )
70 {
71 return new StatusScmResult( cl.toString(), "The starteam command failed.", stderr.getOutput(), false );
72 }
73
74 return new StatusScmResult( cl.toString(), consumer.getChangedFiles() );
75 }
76
77
78
79
80
81 public static Commandline createCommandLine( StarteamScmProviderRepository repo, ScmFileSet workingDirectory )
82 {
83 return StarteamCommandLineUtils.createStarteamCommandLine( "hist", null, workingDirectory, repo );
84 }
85 }