From 54607c31057ccdaa7dd0ef599a1a8901a95a4fa0 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 30 Oct 2020 15:54:45 +0100 Subject: [PATCH] [jOOQ/jOOQ#9684] Order parents deterministically --- .../jooq/migrations/jgit/GitCommitProvider.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/jOOQ-migrations/src/main/java/org/jooq/migrations/jgit/GitCommitProvider.java b/jOOQ-migrations/src/main/java/org/jooq/migrations/jgit/GitCommitProvider.java index 738316c318..ca304a88c2 100644 --- a/jOOQ-migrations/src/main/java/org/jooq/migrations/jgit/GitCommitProvider.java +++ b/jOOQ-migrations/src/main/java/org/jooq/migrations/jgit/GitCommitProvider.java @@ -37,6 +37,7 @@ */ package org.jooq.migrations.jgit; +import static java.util.Arrays.asList; import static org.eclipse.jgit.diff.DiffEntry.ChangeType.ADD; import static org.eclipse.jgit.diff.DiffEntry.ChangeType.DELETE; import static org.eclipse.jgit.diff.DiffEntry.ChangeType.RENAME; @@ -46,7 +47,9 @@ import static org.jooq.ContentType.SCHEMA; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; +import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.Set; @@ -140,6 +143,10 @@ public final class GitCommitProvider implements CommitProvider { else { Commit[] parents = new Commit[revCommit.getParentCount()]; + // It seems the parents are not ordered deterministically in the order of which they were merged + List l = new ArrayList<>(asList(revCommit.getParents())); + l.sort(COMMIT_COMPARATOR); + for (int i = 0; i < parents.length; i++) if ((parents[i] = commits.get(revCommit.getParents()[i].getName())) == null) continue commitLoop; @@ -167,6 +174,13 @@ public final class GitCommitProvider implements CommitProvider { return commits; } + private static final Comparator COMMIT_COMPARATOR = new Comparator() { + @Override + public int compare(RevCommit o1, RevCommit o2) { + return o1.getCommitTime() - o2.getCommitTime(); + } + }; + private final Commit commit(Commit commit, Status status) { List files = new ArrayList<>();