1 package org.apache.maven.scm.provider.git.gitexe.command.list;
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.ScmFileStatus;
25 import org.apache.maven.scm.ScmVersion;
26 import org.apache.maven.scm.command.list.AbstractListCommand;
27 import org.apache.maven.scm.command.list.ListScmResult;
28 import org.apache.maven.scm.provider.ScmProviderRepository;
29 import org.apache.maven.scm.provider.git.command.GitCommand;
30 import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
31 import org.apache.maven.scm.provider.git.gitexe.command.GitCommandLineUtils;
32 import org.codehaus.plexus.util.cli.CommandLineUtils;
33 import org.codehaus.plexus.util.cli.Commandline;
34
35 import java.io.File;
36
37
38
39
40
41 public class GitListCommand
42 extends AbstractListCommand
43 implements GitCommand
44 {
45
46 protected ListScmResult executeListCommand( ScmProviderRepository repo, ScmFileSet fileSet, boolean recursive,
47 ScmVersion scmVersion )
48 throws ScmException
49 {
50 GitScmProviderRepository repository = (GitScmProviderRepository) repo;
51
52 if ( GitScmProviderRepository.PROTOCOL_FILE.equals( repository.getFetchInfo().getProtocol() )
53 && repository.getFetchInfo().getPath().indexOf( fileSet.getBasedir().getPath() ) >= 0 )
54 {
55 throw new ScmException( "remote repository must not be the working directory" );
56 }
57
58 int exitCode;
59
60 CommandLineUtils.StringStreamConsumer stderr = new CommandLineUtils.StringStreamConsumer();
61 GitListConsumer consumer = new GitListConsumer( getLogger(), fileSet.getBasedir().getParentFile(),
62 ScmFileStatus.CHECKED_IN );
63
64 Commandline cl = createCommandLine( repository, fileSet.getBasedir() );
65
66 exitCode = GitCommandLineUtils.execute( cl, consumer, stderr, getLogger() );
67 if ( exitCode != 0 )
68 {
69 return new ListScmResult( cl.toString(), "The git-ls-files command failed.", stderr.getOutput(), false );
70 }
71
72 return new ListScmResult( cl.toString(), consumer.getListedFiles() );
73 }
74
75
76
77
78
79 public static Commandline createCommandLine( GitScmProviderRepository repository, File workingDirectory )
80 {
81 Commandline cl = GitCommandLineUtils.getBaseGitCommandLine( workingDirectory, "ls-files" );
82
83 return cl;
84 }
85
86 }