1 package org.apache.maven.scm.provider.git.jgit.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.ScmFile;
24 import org.apache.maven.scm.ScmFileSet;
25 import org.apache.maven.scm.ScmFileStatus;
26 import org.apache.maven.scm.command.status.AbstractStatusCommand;
27 import org.apache.maven.scm.command.status.StatusScmResult;
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.jgit.command.JGitUtils;
31 import org.eclipse.jgit.api.Git;
32 import org.eclipse.jgit.api.Status;
33
34 import java.util.ArrayList;
35 import java.util.Collection;
36 import java.util.List;
37
38
39
40
41
42
43 public class JGitStatusCommand
44 extends AbstractStatusCommand
45 implements GitCommand
46 {
47
48
49
50 protected StatusScmResult executeStatusCommand( ScmProviderRepository repo, ScmFileSet fileSet )
51 throws ScmException
52 {
53 Git git = null;
54 try
55 {
56 git = JGitUtils.openRepo( fileSet.getBasedir() );
57 Status status = git.status().call();
58 List<ScmFile> changedFiles = getFileStati( status );
59
60 return new StatusScmResult( "JGit status", changedFiles );
61 }
62 catch ( Exception e )
63 {
64 throw new ScmException( "JGit status failure!", e );
65 }
66 finally
67 {
68 JGitUtils.closeRepo( git );
69 }
70 }
71
72 private List<ScmFile> getFileStati( Status status )
73 {
74 List<ScmFile> all = new ArrayList<ScmFile>();
75 addAsScmFiles( all, status.getAdded(), ScmFileStatus.ADDED );
76 addAsScmFiles( all, status.getChanged(), ScmFileStatus.UPDATED );
77 addAsScmFiles( all, status.getConflicting(), ScmFileStatus.CONFLICT );
78 addAsScmFiles( all, status.getModified(), ScmFileStatus.MODIFIED );
79 addAsScmFiles( all, status.getRemoved(), ScmFileStatus.DELETED );
80 return all;
81 }
82
83 private void addAsScmFiles( Collection<ScmFile> all, Collection<String> files, ScmFileStatus status )
84 {
85 for ( String f : files )
86 {
87 all.add( new ScmFile( f, status ) );
88 }
89 }
90 }