Skip to content

Commit b61033b

Browse files
authored
Merge pull request #424 from hgschmie/offline-mode
Introduce "offline" mode
2 parents fc4f5e8 + c1bff7b commit b61033b

File tree

6 files changed

+53
-5
lines changed

6 files changed

+53
-5
lines changed

docs/using-the-plugin.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,18 @@ It's really simple to setup this plugin; below is a sample pom that you may base
234234
-->
235235
<skip>false</skip>
236236

237+
<!-- @since 3.0.1 -->
238+
<--
239+
Default (optional):
240+
false
241+
242+
Explanation:
243+
When set to `true`, the plugin will not try to contact any remote repositories.
244+
Any operations will only use the local state of the repo. If set to `false`, it will execute `git fetch` operations
245+
e.g. to determine the `ahead` and `behind` branch information.
246+
-->
247+
<offline>false</offline>
248+
237249
<!-- @since 2.1.12 -->
238250
<!--
239251
Default (optional):

src/main/java/pl/project13/maven/git/GitCommitIdMojo.java

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.apache.maven.plugins.annotations.Mojo;
3535
import org.apache.maven.plugins.annotations.Parameter;
3636
import org.apache.maven.project.MavenProject;
37+
import org.apache.maven.settings.Settings;
3738
import org.sonatype.plexus.build.incremental.BuildContext;
3839

3940
import pl.project13.maven.git.build.BuildServerDataProvider;
@@ -70,6 +71,12 @@ public class GitCommitIdMojo extends AbstractMojo {
7071
@Parameter(property = "session", required = true, readonly = true)
7172
MavenSession session;
7273

74+
/**
75+
* The Maven settings.
76+
*/
77+
@Parameter(property = "settings", required = true, readonly = true)
78+
Settings settings;
79+
7380
/**
7481
* <p>Set this to {@code 'true'} to inject git properties into all reactor projects, not just the current one.</p>
7582
*
@@ -331,7 +338,15 @@ public class GitCommitIdMojo extends AbstractMojo {
331338
*/
332339
@Parameter(defaultValue = "true")
333340
boolean injectIntoSysProperties;
334-
341+
342+
/**
343+
* Controls whether the git plugin tries to access remote repos to fetch latest information
344+
* or only use local information.
345+
* @since 3.0.1
346+
*/
347+
@Parameter(defaultValue = "false")
348+
boolean offline;
349+
335350
/**
336351
* Injected {@link BuildContext} to recognize incremental builds.
337352
*/
@@ -563,7 +578,8 @@ private void loadGitDataWithNativeGit(@Nonnull Properties properties) throws Git
563578
.setCommitIdGenerationMode(commitIdGenerationModeEnum)
564579
.setUseBranchNameFromBuildEnvironment(useBranchNameFromBuildEnvironment)
565580
.setExcludeProperties(excludeProperties)
566-
.setIncludeOnlyProperties(includeOnlyProperties);
581+
.setIncludeOnlyProperties(includeOnlyProperties)
582+
.setOffline(offline || settings.isOffline());
567583

568584
nativeGitProvider.loadGitData(evaluateOnCommit, properties);
569585
} catch (IOException e) {
@@ -582,7 +598,8 @@ private void loadGitDataWithJGit(@Nonnull Properties properties) throws GitCommi
582598
.setCommitIdGenerationMode(commitIdGenerationModeEnum)
583599
.setUseBranchNameFromBuildEnvironment(useBranchNameFromBuildEnvironment)
584600
.setExcludeProperties(excludeProperties)
585-
.setIncludeOnlyProperties(includeOnlyProperties);
601+
.setIncludeOnlyProperties(includeOnlyProperties)
602+
.setOffline(offline || settings.isOffline());
586603

587604
jGitProvider.loadGitData(evaluateOnCommit, properties);
588605
}

src/main/java/pl/project13/maven/git/GitDataProvider.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ public abstract class GitDataProvider implements GitProvider {
6060

6161
protected List<String> includeOnlyProperties;
6262

63+
protected boolean offline;
64+
6365
public GitDataProvider(@Nonnull LoggerBridge log) {
6466
this.log = log;
6567
}
@@ -109,6 +111,11 @@ public GitDataProvider setIncludeOnlyProperties(List<String> includeOnlyProperti
109111
return this;
110112
}
111113

114+
public GitDataProvider setOffline(boolean offline) {
115+
this.offline = offline;
116+
return this;
117+
}
118+
112119
public void loadGitData(@Nonnull String evaluateOnCommit, @Nonnull Properties properties) throws GitCommitIdExecutionException {
113120
this.evaluateOnCommit = evaluateOnCommit;
114121
init();

src/main/java/pl/project13/maven/git/JGitProvider.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,7 +335,9 @@ private Repository getGitRepository() throws GitCommitIdExecutionException {
335335
@Override
336336
public AheadBehind getAheadBehind() throws GitCommitIdExecutionException {
337337
try {
338-
fetch();
338+
if (!offline) {
339+
fetch();
340+
}
339341
Optional<BranchTrackingStatus> branchTrackingStatus = Optional.ofNullable(BranchTrackingStatus.of(git, getBranchName()));
340342
return branchTrackingStatus.map(bts -> AheadBehind.of(bts.getAheadCount(), bts.getBehindCount()))
341343
.orElse(AheadBehind.NO_REMOTE);

src/main/java/pl/project13/maven/git/NativeGitProvider.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,9 @@ public AheadBehind getAheadBehind() throws GitCommitIdExecutionException {
552552
if (!remoteBranch.isPresent()) {
553553
return AheadBehind.NO_REMOTE;
554554
}
555-
fetch(remoteBranch.get());
555+
if (!offline) {
556+
fetch(remoteBranch.get());
557+
}
556558
String localBranchName = getBranchName();
557559
String ahead = runQuietGitCommand(canonical, nativeGitTimeoutInMs, "rev-list --right-only --count " + remoteBranch.get() + "..." + localBranchName);
558560
String behind = runQuietGitCommand(canonical, nativeGitTimeoutInMs, "rev-list --left-only --count " + remoteBranch.get() + "..." + localBranchName);

src/test/java/pl/project13/maven/git/GitIntegrationTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.apache.commons.io.FileUtils;
2121
import org.apache.maven.execution.MavenSession;
2222
import org.apache.maven.project.MavenProject;
23+
import org.apache.maven.settings.Settings;
2324
import org.eclipse.jgit.api.Git;
2425
import org.junit.After;
2526
import org.junit.Before;
@@ -116,6 +117,7 @@ public static void initializeMojoWithDefaults(GitCommitIdMojo mojo) {
116117
mojo.evaluateOnCommit = evaluateOnCommit;
117118
mojo.nativeGitTimeoutInMs = (30 * 1000);
118119
mojo.session = mockSession();
120+
mojo.settings = mockSettings();
119121
}
120122

121123
public void setProjectToExecuteMojoIn(@Nonnull MavenProject project) {
@@ -131,6 +133,12 @@ private static MavenSession mockSession() {
131133
return session;
132134
}
133135

136+
private static Settings mockSettings() {
137+
Settings settings = mock(Settings.class);
138+
when(settings.isOffline()).thenReturn(false);
139+
return settings;
140+
}
141+
134142
private static List<MavenProject> getReactorProjects(@Nonnull MavenProject project) {
135143
List<MavenProject> reactorProjects = new ArrayList<>();
136144
MavenProject mavenProject = project;

0 commit comments

Comments
 (0)