diff --git a/jOOQ-migrations-maven/src/main/java/org/jooq/migrations/maven/AbstractMigrationsMojo.java b/jOOQ-migrations-maven/src/main/java/org/jooq/migrations/maven/AbstractMigrationsMojo.java index 6b946e5c92..efd156845a 100644 --- a/jOOQ-migrations-maven/src/main/java/org/jooq/migrations/maven/AbstractMigrationsMojo.java +++ b/jOOQ-migrations-maven/src/main/java/org/jooq/migrations/maven/AbstractMigrationsMojo.java @@ -170,8 +170,6 @@ abstract class AbstractMigrationsMojo extends AbstractMojo { // [#2886] Add the surrounding project's dependencies to the current classloader Thread.currentThread().setContextClassLoader(pluginClassLoader); - project.getRuntimeClasspathElements().forEach(System.out::println); - if (jdbc == null || jdbc.url == null) throw new MojoExecutionException("JDBC URL is required"); 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 91f2e8d092..567bb8ddfd 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 @@ -226,7 +226,8 @@ public final class GitCommitProvider implements CommitProvider { del(files, status.getMissing()); del(files, status.getRemoved()); - return commit.commit("uncommitted", "uncommitted", files); + // [#9506] TODO: It should be possible to migrate to uncommitted changes in dev mode. + return commit.commit("uncommitted", "uncommitted", files).valid(false); } private void add(List files, Set paths) { diff --git a/jOOQ/src/main/java/org/jooq/Commit.java b/jOOQ/src/main/java/org/jooq/Commit.java index 046fe114e0..26a3c45b0e 100644 --- a/jOOQ/src/main/java/org/jooq/Commit.java +++ b/jOOQ/src/main/java/org/jooq/Commit.java @@ -52,6 +52,17 @@ import org.jetbrains.annotations.NotNull; @Experimental public interface Commit extends Node { + /** + * Whether this commit is a valid commit that can be migrated to. + */ + boolean valid(); + + /** + * Set the new {@link #valid()} flag for this commit, returning a copy of + * the commit itself. + */ + Commit valid(boolean valid); + /** * The files affected by this commit, in no particular order. */ diff --git a/jOOQ/src/main/java/org/jooq/impl/CommitImpl.java b/jOOQ/src/main/java/org/jooq/impl/CommitImpl.java index 5809215163..e7bbfe7a43 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CommitImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/CommitImpl.java @@ -82,6 +82,7 @@ final class CommitImpl extends AbstractNode implements Commit { final List tags; final Map delta; final Map files; + final boolean valid; CommitImpl( Configuration configuration, @@ -90,7 +91,8 @@ final class CommitImpl extends AbstractNode implements Commit { String author, Commit root, List parents, - Collection delta + Collection delta, + boolean valid ) { super(configuration, id, message, author, root); @@ -102,9 +104,10 @@ final class CommitImpl extends AbstractNode implements Commit { this.tags = new ArrayList<>(); this.delta = map(delta, false); this.files = initFiles(); + this.valid = valid; } - private CommitImpl(CommitImpl copy) { + private CommitImpl(CommitImpl copy, boolean newValid) { super(copy.configuration(), copy.id(), copy.message(), copy.author(), copy.root); this.ctx = copy.ctx; @@ -112,6 +115,7 @@ final class CommitImpl extends AbstractNode implements Commit { this.tags = new ArrayList<>(copy.tags); this.delta = copy.delta; this.files = copy.files; + this.valid = newValid; } // TODO extract this Map type to new type @@ -144,6 +148,16 @@ final class CommitImpl extends AbstractNode implements Commit { return apply(map(parent.files(), true), delta(), true); } + @Override + public final boolean valid() { + return valid; + } + + @Override + public final Commit valid(boolean newValid) { + return new CommitImpl(this, newValid); + } + @Override public final List parents() { return Collections.unmodifiableList(parents); @@ -155,14 +169,14 @@ final class CommitImpl extends AbstractNode implements Commit { } @Override - public final Commit tag(String id) { - return tag(id, null); + public final Commit tag(String tagId) { + return tag(tagId, null); } @Override - public final Commit tag(String id, String message) { - CommitImpl result = new CommitImpl(this); - result.tags.add(new TagImpl(id, message)); + public final Commit tag(String tagId, String tagMessage) { + CommitImpl result = new CommitImpl(this, valid); + result.tags.add(new TagImpl(tagId, tagMessage)); return result; } @@ -212,7 +226,7 @@ final class CommitImpl extends AbstractNode implements Commit { @Override public final Commit commit(String newId, String newMessage, String newAuthor, Collection newFiles) { - return new CommitImpl(configuration(), newId, newMessage, newAuthor, root, Arrays.asList(this), newFiles); + return new CommitImpl(configuration(), newId, newMessage, newAuthor, root, Arrays.asList(this), newFiles, valid); } @Override @@ -242,7 +256,7 @@ final class CommitImpl extends AbstractNode implements Commit { @Override public final Commit merge(String newId, String newMessage, String newAuthor, Commit with, Collection newFiles) { - return new CommitImpl(configuration(), newId, newMessage, newAuthor, root, Arrays.asList(this, with), newFiles); + return new CommitImpl(configuration(), newId, newMessage, newAuthor, root, Arrays.asList(this, with), newFiles, valid); } @Override diff --git a/jOOQ/src/main/java/org/jooq/impl/MigrationImpl.java b/jOOQ/src/main/java/org/jooq/impl/MigrationImpl.java index fa464d3c30..602ba54ffd 100644 --- a/jOOQ/src/main/java/org/jooq/impl/MigrationImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/MigrationImpl.java @@ -174,6 +174,10 @@ final class MigrationImpl extends AbstractScope implements Migration { validateCommitProvider(ctx, from()); validateCommitProvider(ctx, to()); revertUntracked(ctx, null, currentRecord); + + // [#9506] TODO: Better error handling helping the understand see their mistake + if (!to().valid()) + throw new DataMigrationVerificationException("Commit is not a valid commit to migrate to: " + to()); } private final void validateCommitProvider(DefaultMigrationContext ctx, Commit commit) { diff --git a/jOOQ/src/main/java/org/jooq/impl/MigrationsImpl.java b/jOOQ/src/main/java/org/jooq/impl/MigrationsImpl.java index 887fdbd225..7f6da3050f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/MigrationsImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/MigrationsImpl.java @@ -76,7 +76,7 @@ final class MigrationsImpl extends AbstractScope implements Migrations { @Override public final Commits commits() { - return new CommitsImpl(configuration(), new CommitImpl(configuration(), ROOT, null, null, null, emptyList(), emptyList())); + return new CommitsImpl(configuration(), new CommitImpl(configuration(), ROOT, null, null, null, emptyList(), emptyList(), true)); } @Override