1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.scm.provider.git.jgit.command.status;
20
21 import java.io.IOException;
22 import java.util.ArrayList;
23 import java.util.Collection;
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.command.status.AbstractStatusCommand;
31 import org.apache.maven.scm.command.status.StatusScmResult;
32 import org.apache.maven.scm.provider.ScmProviderRepository;
33 import org.apache.maven.scm.provider.git.command.GitCommand;
34 import org.apache.maven.scm.provider.git.jgit.command.JGitUtils;
35 import org.eclipse.jgit.api.Git;
36 import org.eclipse.jgit.api.Status;
37 import org.eclipse.jgit.api.errors.GitAPIException;
38
39
40
41
42
43
44 public class JGitStatusCommand extends AbstractStatusCommand implements GitCommand {
45
46
47
48 protected StatusScmResult executeStatusCommand(ScmProviderRepository repo, ScmFileSet fileSet) throws ScmException {
49 Git git = null;
50 try {
51 git = JGitUtils.openRepo(fileSet.getBasedir());
52 Status status = git.status().call();
53 List<ScmFile> changedFiles = getFileStati(status);
54
55 return new StatusScmResult("JGit status", changedFiles);
56 } catch (IOException | GitAPIException e) {
57 throw new ScmException("JGit status failure!", e);
58 } finally {
59 JGitUtils.closeRepo(git);
60 }
61 }
62
63 private List<ScmFile> getFileStati(Status status) {
64 List<ScmFile> all = new ArrayList<>();
65 addAsScmFiles(all, status.getAdded(), ScmFileStatus.ADDED);
66 addAsScmFiles(all, status.getChanged(), ScmFileStatus.UPDATED);
67 addAsScmFiles(all, status.getConflicting(), ScmFileStatus.CONFLICT);
68 addAsScmFiles(all, status.getModified(), ScmFileStatus.MODIFIED);
69 addAsScmFiles(all, status.getRemoved(), ScmFileStatus.DELETED);
70 return all;
71 }
72
73 private void addAsScmFiles(Collection<ScmFile> all, Collection<String> files, ScmFileStatus status) {
74 for (String f : files) {
75 all.add(new ScmFile(f, status));
76 }
77 }
78 }