Skip to content

Commit 77dd080

Browse files
committed
The Git branch name is now resolved using ScmManager.
By default the plugin now resolves the name of the current branch using ScmManager. This means that '${env.GIT_BRANCH}' is no longer the default value for gitBranchExpression, but can still be set explicitly, if necessary.
1 parent 7ef0217 commit 77dd080

File tree

4 files changed

+84
-1
lines changed

4 files changed

+84
-1
lines changed

pom.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,21 @@
9292
<artifactId>maven-plugin-api</artifactId>
9393
<version>3.1.0</version>
9494
</dependency>
95+
<dependency>
96+
<groupId>org.apache.maven.scm</groupId>
97+
<artifactId>maven-scm-api</artifactId>
98+
<version>1.9.5</version>
99+
</dependency>
100+
<dependency>
101+
<groupId>org.apache.maven.scm</groupId>
102+
<artifactId>maven-scm-manager-plexus</artifactId>
103+
<version>1.9.5</version>
104+
</dependency>
105+
<dependency>
106+
<groupId>org.apache.maven.scm</groupId>
107+
<artifactId>maven-scm-provider-gitexe</artifactId>
108+
<version>1.9.5</version>
109+
</dependency>
95110
<dependency>
96111
<groupId>org.apache.maven.plugin-tools</groupId>
97112
<artifactId>maven-plugin-annotations</artifactId>

src/main/java/com/e_gineering/maven/gitflowhelper/AbstractGitflowBranchMojo.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import org.apache.maven.plugins.annotations.Component;
99
import org.apache.maven.plugins.annotations.Parameter;
1010
import org.apache.maven.project.MavenProject;
11+
import org.apache.maven.scm.ScmException;
12+
import org.apache.maven.scm.manager.ScmManager;
1113
import org.codehaus.plexus.util.cli.CommandLineUtils;
1214

1315
import java.io.IOException;
@@ -26,6 +28,9 @@ public abstract class AbstractGitflowBranchMojo extends AbstractMojo {
2628
@Component
2729
protected MavenProject project;
2830

31+
@Component
32+
protected ScmManager scmManager;
33+
2934
@Parameter(defaultValue = "origin/master", property = "masterBranchPattern", required = true)
3035
private String masterBranchPattern;
3136

@@ -61,7 +66,7 @@ private void logExecute(final GitBranchType type, final String gitBranch, final
6166

6267
public void execute() throws MojoExecutionException, MojoFailureException {
6368
if (gitBranchExpression == null) {
64-
gitBranchExpression = "${env.GIT_BRANCH}";
69+
gitBranchExpression = getGitBranch();
6570
}
6671

6772
try {
@@ -100,4 +105,16 @@ public void execute() throws MojoExecutionException, MojoFailureException {
100105
logExecute(GitBranchType.UNDEFINED, gitBranch, null);
101106
}
102107
}
108+
109+
private String getGitBranch() throws MojoExecutionException {
110+
try {
111+
String branch = ScmUtils.getGitBranch(scmManager, project);
112+
if (branch == null) {
113+
throw new MojoExecutionException("gitflow-helper-maven-plugin requires a Git project, use gitBranchExpression to by-pass this check");
114+
}
115+
return branch;
116+
} catch (ScmException e) {
117+
throw new MojoExecutionException("Cannot get the branch information from the git repository: \n" + e.getLocalizedMessage(), e);
118+
}
119+
}
103120
}

src/main/java/com/e_gineering/maven/gitflowhelper/MasterPromoteExtension.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,17 @@
77
import org.apache.maven.lifecycle.internal.MojoDescriptorCreator;
88
import org.apache.maven.model.Plugin;
99
import org.apache.maven.plugin.prefix.NoPluginFoundForPrefixException;
10+
import org.apache.maven.plugins.annotations.Parameter;
1011
import org.apache.maven.project.MavenProject;
12+
import org.apache.maven.scm.ScmException;
13+
import org.apache.maven.scm.manager.ScmManager;
1114
import org.codehaus.plexus.component.annotations.Component;
1215
import org.codehaus.plexus.component.annotations.Requirement;
1316
import org.codehaus.plexus.logging.Logger;
1417
import org.codehaus.plexus.util.cli.CommandLineUtils;
1518
import org.codehaus.plexus.util.xml.Xpp3Dom;
1619

20+
import java.io.File;
1721
import java.io.IOException;
1822
import java.util.ArrayList;
1923
import java.util.HashMap;
@@ -34,6 +38,9 @@ public class MasterPromoteExtension extends AbstractMavenLifecycleParticipant {
3438
@Requirement
3539
private Logger logger;
3640

41+
@Requirement
42+
protected ScmManager scmManager;
43+
3744
@Override
3845
public void afterProjectsRead(MavenSession session) throws MavenExecutionException {
3946
Properties systemEnvVars = null;
@@ -97,6 +104,10 @@ public void afterProjectsRead(MavenSession session) throws MavenExecutionExcepti
97104
}
98105
}
99106

107+
if (gitBranchExpression == null) {
108+
gitBranchExpression = getGitBranch(project);
109+
}
110+
100111
pluginsToDrop.put(project, dropPlugins);
101112
}
102113

@@ -145,4 +156,16 @@ private String extractConfigValue(String parameter, Object configuration) {
145156
}
146157
return null;
147158
}
159+
160+
private String getGitBranch(MavenProject project) throws MavenExecutionException {
161+
try {
162+
String branch = ScmUtils.getGitBranch(scmManager, project);
163+
if (branch == null) {
164+
throw new MavenExecutionException("gitflow-helper-maven-plugin requires a Git project, use gitBranchExpression to by-pass this check", project.getFile());
165+
}
166+
return branch;
167+
} catch (ScmException e) {
168+
throw new MavenExecutionException("Cannot get the branch information from the git repository: \n" + e.getLocalizedMessage(), e);
169+
}
170+
}
148171
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.e_gineering.maven.gitflowhelper;
2+
3+
import org.apache.commons.lang.StringUtils;
4+
import org.apache.maven.project.MavenProject;
5+
import org.apache.maven.scm.ScmException;
6+
import org.apache.maven.scm.ScmFile;
7+
import org.apache.maven.scm.ScmFileSet;
8+
import org.apache.maven.scm.log.ScmLogDispatcher;
9+
import org.apache.maven.scm.manager.ScmManager;
10+
import org.apache.maven.scm.provider.ScmProvider;
11+
import org.apache.maven.scm.provider.git.gitexe.command.branch.GitBranchCommand;
12+
import org.apache.maven.scm.provider.git.repository.GitScmProviderRepository;
13+
import org.apache.maven.scm.repository.ScmRepository;
14+
15+
public abstract class ScmUtils {
16+
public static String getGitBranch(ScmManager scmManager, MavenProject project) throws ScmException {
17+
String scmConnectionUrl = project.getScm().getConnection();
18+
String scmDeveloperConnectionUrl = project.getScm().getDeveloperConnection();
19+
ScmRepository repository = scmManager.makeScmRepository(StringUtils.isNotBlank(scmDeveloperConnectionUrl) ? scmDeveloperConnectionUrl : scmConnectionUrl);
20+
ScmProvider provider = scmManager.getProviderByRepository(repository);
21+
if (!GitScmProviderRepository.PROTOCOL_GIT.equals(provider.getScmType())) {
22+
return null;
23+
} else {
24+
ScmFileSet fileSet = new ScmFileSet(project.getBasedir());
25+
return GitBranchCommand.getCurrentBranch(new ScmLogDispatcher(), (GitScmProviderRepository)repository.getProviderRepository(), fileSet);
26+
}
27+
}
28+
}

0 commit comments

Comments
 (0)