Skip to content

Commit

Permalink
Traverse parent changelogs for rollbacks
Browse files Browse the repository at this point in the history
  • Loading branch information
christophercurrie committed Jul 2, 2016
1 parent cddc01b commit 39b9e0d
Showing 1 changed file with 9 additions and 5 deletions.
14 changes: 9 additions & 5 deletions liquibase-core/src/main/java/liquibase/changelog/ChangeSet.java
Original file line number Diff line number Diff line change
Expand Up @@ -377,13 +377,17 @@ protected void handleRollbackNode(ParsedNode rollbackNode, ResourceAccessor reso
String changeSetAuthor = rollbackNode.getChildValue(null, "changeSetAuthor", String.class);
String changeSetPath = rollbackNode.getChildValue(null, "changeSetPath", getFilePath());

ChangeSet changeSet = this.getChangeLog().getChangeSet(changeSetPath, changeSetAuthor, changeSetId);
if (changeSet == null) { //check from root
changeSet = getChangeLog().getRootChangeLog().getChangeSet(changeSetPath, changeSetAuthor, changeSetId);
if (changeSet == null) {
throw new ParsedNodeException("Change set " + new ChangeSet(changeSetId, changeSetAuthor, false, false, changeSetPath, null, null, null).toString(false) + " does not exist");
DatabaseChangeLog changeLog = this.getChangeLog();
ChangeSet changeSet = changeLog.getChangeSet(changeSetPath, changeSetAuthor, changeSetId);
while (changeSet == null && changeLog != null) {
changeLog = changeLog.getParentChangeLog();
if (changeLog != null) {
changeSet = changeLog.getChangeSet(changeSetPath, changeSetAuthor, changeSetId);
}
}
if (changeSet == null) {
throw new ParsedNodeException("Change set " + new ChangeSet(changeSetId, changeSetAuthor, false, false, changeSetPath, null, null, null).toString(false) + " does not exist");
}
for (Change change : changeSet.getChanges()) {
rollback.getChanges().add(change);
}
Expand Down

0 comments on commit 39b9e0d

Please sign in to comment.