Skip to content

Commit d24ee95

Browse files
authored
Merge pull request #53 from raehalme/feature/52
Issue #52: The Git branch name is now resolved using ScmManager, falling back to '${env.GIT_BRANCH}' if it cannot be resolved by the scmManager.
2 parents 7ef0217 + db919f6 commit d24ee95

File tree

4 files changed

+89
-1
lines changed

4 files changed

+89
-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: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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+
String connectionUrl = StringUtils.isNotBlank(scmDeveloperConnectionUrl) ? scmDeveloperConnectionUrl : scmConnectionUrl;
20+
if (StringUtils.isBlank(connectionUrl)) {
21+
return "${env.GIT_BRANCH}";
22+
}
23+
24+
ScmRepository repository = scmManager.makeScmRepository(connectionUrl);
25+
ScmProvider provider = scmManager.getProviderByRepository(repository);
26+
if (!GitScmProviderRepository.PROTOCOL_GIT.equals(provider.getScmType())) {
27+
return null;
28+
} else {
29+
ScmFileSet fileSet = new ScmFileSet(project.getBasedir());
30+
return GitBranchCommand.getCurrentBranch(new ScmLogDispatcher(), (GitScmProviderRepository)repository.getProviderRepository(), fileSet);
31+
}
32+
}
33+
}

0 commit comments

Comments
 (0)