package liquibase.changelog.filter; import java.util.List; import liquibase.change.Change; import liquibase.change.core.TagDatabaseChange; import liquibase.changelog.ChangeSet; import liquibase.changelog.RanChangeSet; public class UpToTagChangeSetFilter implements ChangeSetFilter { private final String tag; private boolean seenTag = false; public UpToTagChangeSetFilter(String tag, List<RanChangeSet> ranChangeSets) { this.tag = tag; for (RanChangeSet ranChangeSet : ranChangeSets) { if (tag.equalsIgnoreCase(ranChangeSet.getTag())) { seenTag = true; break; } } } @Override public ChangeSetFilterResult accepts(ChangeSet changeSet) { if (seenTag) { return new ChangeSetFilterResult(false, "Change set is after tag '" + this.tag + "'", this.getClass()); } String tag = null; for (Change change : changeSet.getChanges()) { if (change instanceof TagDatabaseChange) { tag = ((TagDatabaseChange) change).getTag(); } } if (this.tag.equals(tag)) { seenTag = true; } return new ChangeSetFilterResult(true, "Change set is at or before tag '" + this.tag + "'", this.getClass()); } }