This is an automated email from the ASF dual-hosted git repository.
michaelo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-scm.git
The following commit(s) were added to refs/heads/master by this push:
new d77b92ef8 [SCM-1022] jgit push failure is not failing the build
d77b92ef8 is described below
commit d77b92ef8b3baa0e9ae3c60d25ee526291faa3c6
Author: Mattias Andersson <[email protected]>
AuthorDate: Thu Apr 4 09:25:16 2024 +0200
[SCM-1022] jgit push failure is not failing the build
This closes #203
---
.../command/checkin/GitCheckInCommandTckTest.java | 65 ++++++++++++++++++++++
.../jgit/command/checkin/JGitCheckInCommand.java | 22 +++++++-
2 files changed, 86 insertions(+), 1 deletion(-)
diff --git
a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/checkin/GitCheckInCommandTckTest.java
b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/checkin/GitCheckInCommandTckTest.java
index ce6e5938e..53e612a15 100644
---
a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/checkin/GitCheckInCommandTckTest.java
+++
b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-gittest/src/main/java/org/apache/maven/scm/provider/git/command/checkin/GitCheckInCommandTckTest.java
@@ -19,11 +19,19 @@
package org.apache.maven.scm.provider.git.command.checkin;
import java.io.File;
+import java.io.IOException;
+import org.apache.maven.scm.PlexusJUnit4TestSupport;
+import org.apache.maven.scm.ScmFileSet;
+import org.apache.maven.scm.command.checkin.CheckInScmResult;
import org.apache.maven.scm.command.checkout.CheckOutScmResult;
import org.apache.maven.scm.provider.git.GitScmTestUtils;
import org.apache.maven.scm.repository.ScmRepository;
import org.apache.maven.scm.tck.command.checkin.CheckInCommandTckTest;
+import org.codehaus.plexus.util.FileUtils;
+import org.junit.Test;
+
+import static org.junit.Assert.assertFalse;
/**
* @author <a href="mailto:[email protected]">Mark Struberg</a>
@@ -44,4 +52,61 @@ public abstract class GitCheckInCommandTckTest extends
CheckInCommandTckTest {
GitScmTestUtils.setDefaulGitConfig(workingDirectory);
}
}
+
+ @Test
+ public void testUpToDatePush() throws Exception {
+ File checkedOutRepo = getWorkingCopy();
+
+ ScmRepository scmRepository =
getScmManager().makeScmRepository(getScmUrl());
+ checkoutRepoInto(checkedOutRepo, scmRepository);
+
+ // Add a default user to the config
+ GitScmTestUtils.setDefaulGitConfig(checkedOutRepo);
+
+ CheckInScmResult result =
+ getScmManager().checkIn(scmRepository, new
ScmFileSet(checkedOutRepo), "No change commit message");
+
+ assertResultIsSuccess(result);
+ }
+
+ @Test
+ public void testRejectedNonFastForwardPush() throws Exception {
+ File blockingRepo =
PlexusJUnit4TestSupport.getTestFile("target/scm-test/blocking-repo");
+ File rejectedRepo =
PlexusJUnit4TestSupport.getTestFile("target/scm-test/rejected-repo");
+
+ ScmRepository scmRepository =
getScmManager().makeScmRepository(getScmUrl());
+ checkoutRepoInto(rejectedRepo, scmRepository);
+ checkoutRepoInto(blockingRepo, scmRepository);
+
+ // Add a default user to the config
+ GitScmTestUtils.setDefaulGitConfig(rejectedRepo);
+ GitScmTestUtils.setDefaulGitConfig(blockingRepo);
+
+ ScmFileSet blockingFileSet = createWorkspaceChange(rejectedRepo);
+
+ CheckInScmResult blockingResult =
getScmManager().checkIn(scmRepository, blockingFileSet, "Blocking commit");
+ assertResultIsSuccess(blockingResult);
+
+ ScmFileSet rejectedFileSet = createWorkspaceChange(blockingRepo);
+
+ CheckInScmResult checkInScmResult =
getScmManager().checkIn(scmRepository, rejectedFileSet, "Rejected commit");
+ assertFalse(
+ "check-in should have been rejected since fast forward was not
possible", checkInScmResult.isSuccess());
+ }
+
+ private CheckOutScmResult checkoutRepoInto(File workingCopy, ScmRepository
scmRepository) throws Exception {
+ FileUtils.deleteDirectory(workingCopy);
+ workingCopy.mkdir();
+
+ CheckOutScmResult result = getScmManager().checkOut(scmRepository, new
ScmFileSet(workingCopy), null);
+
+ assertResultIsSuccess(result);
+ return result;
+ }
+
+ private ScmFileSet createWorkspaceChange(File repo) throws IOException {
+ File beerFile = new File(repo.getAbsolutePath(), "beer.xml");
+ FileUtils.fileWrite(beerFile.getAbsolutePath(), "1 litre");
+ return new ScmFileSet(repo, beerFile.getName());
+ }
}
diff --git
a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommand.java
b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommand.java
index 762b936d2..3b123904f 100644
---
a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommand.java
+++
b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkin/JGitCheckInCommand.java
@@ -43,7 +43,9 @@ import org.eclipse.jgit.api.Status;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.UserConfig;
import org.eclipse.jgit.revwalk.RevCommit;
+import org.eclipse.jgit.transport.PushResult;
import org.eclipse.jgit.transport.RefSpec;
+import org.eclipse.jgit.transport.RemoteRefUpdate;
/**
* This provider uses the following strategy to discover the committer and
author name/mail for a commit:
@@ -139,7 +141,19 @@ public class JGitCheckInCommand extends
AbstractCheckInCommand implements GitCom
}
RefSpec refSpec = new RefSpec(Constants.R_HEADS + branch + ":"
+ Constants.R_HEADS + branch);
logger.info("push changes to remote... " + refSpec);
- JGitUtils.push(git, (GitScmProviderRepository) repo, refSpec);
+ Iterable<PushResult> pushResultList = JGitUtils.push(git,
(GitScmProviderRepository) repo, refSpec);
+
+ for (PushResult pushResult : pushResultList) {
+ for (RemoteRefUpdate remoteRefUpdate :
pushResult.getRemoteUpdates()) {
+ if (!isSuccessStatus(remoteRefUpdate.getStatus())) {
+ return new CheckInScmResult(
+ "JGit checkin",
+ "The git-push command failed, with status:
" + remoteRefUpdate.getStatus(),
+ remoteRefUpdate.getMessage(),
+ false);
+ }
+ }
+ }
}
return new CheckInScmResult("JGit checkin", checkedInFiles);
@@ -150,7 +164,13 @@ public class JGitCheckInCommand extends
AbstractCheckInCommand implements GitCom
}
}
+ private boolean isSuccessStatus(RemoteRefUpdate.Status
remoteRefUpdateStatus) {
+ return remoteRefUpdateStatus == RemoteRefUpdate.Status.OK
+ || remoteRefUpdateStatus == RemoteRefUpdate.Status.UP_TO_DATE;
+ }
+
private static final class UserInfo {
+
final String name;
final String email;