Return false from MergeUtil.canMerge on LargeObjectException
JGit's merge code depends on ObjectLoader.getCachedBytes(), which may
throw LargeObjectException, in which case it can't attempt a content
merge. For non-content merges (no difference from one parent), we
should not hit this case.
Change-Id: I8c4c42d8cd2234e6d3b8e38d9c08b8b89e82e37b
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeUtil.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeUtil.java
index b9b5621..8902af9 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeUtil.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MergeUtil.java
@@ -38,6 +38,7 @@
import com.google.inject.assistedinject.AssistedInject;
import org.eclipse.jgit.errors.IncorrectObjectTypeException;
+import org.eclipse.jgit.errors.LargeObjectException;
import org.eclipse.jgit.errors.MissingObjectException;
import org.eclipse.jgit.errors.NoMergeBaseException;
import org.eclipse.jgit.errors.NoMergeBaseException.MergeBaseFailureReason;
@@ -395,6 +396,9 @@
final ThreeWayMerger m = newThreeWayMerger(repo, createDryRunInserter());
try {
return m.merge(new AnyObjectId[] {mergeTip, toMerge});
+ } catch (LargeObjectException e) {
+ log.warn("Cannot merge due to LargeObjectException: " + toMerge.name());
+ return false;
} catch (NoMergeBaseException e) {
return false;
} catch (IOException e) {