diff options
author | Simon Bowly <simon.bowly@gmail.com> | 2021-05-07 11:21:55 +1000 |
---|---|---|
committer | Simon Bowly <simon.bowly@gmail.com> | 2021-05-07 01:48:29 +0000 |
commit | 4b0797f008f6cd4b53d1a44fd1bc83c32537d90d (patch) | |
tree | 9c679a23496cd64d49d3caa5e2478f76c4eb9998 | |
parent | 54cedeb6b36e96ac00bea75fe1141ee1680d4387 (diff) | |
download | alembic-4b0797f008f6cd4b53d1a44fd1bc83c32537d90d.tar.gz |
Move empty downgrade revisions check to make it specific to branch filtering case as intended.
Fixed regression in new versioning traversal where "alembic downgrade head" (or equivalent) fails instead of iterating no revisions.
Fixes: #839
Change-Id: I9e8463ee067761ee4588c2ccc1b1009e2be97c38
-rw-r--r-- | alembic/script/revision.py | 10 | ||||
-rw-r--r-- | docs/build/unreleased/839.rst | 6 | ||||
-rw-r--r-- | tests/test_version_traversal.py | 29 |
3 files changed, 31 insertions, 14 deletions
diff --git a/alembic/script/revision.py b/alembic/script/revision.py index 7fbd670..ef03d2e 100644 --- a/alembic/script/revision.py +++ b/alembic/script/revision.py @@ -1206,11 +1206,11 @@ class RevisionMap(object): ) ) - # Ensure we didn't throw everything away. - if len(roots) == 0: - raise RevisionError( - "Not a valid downgrade target from current heads" - ) + # Ensure we didn't throw everything away when filtering branches. + if len(roots) == 0: + raise RevisionError( + "Not a valid downgrade target from current heads" + ) heads = self.get_revisions(upper) diff --git a/docs/build/unreleased/839.rst b/docs/build/unreleased/839.rst new file mode 100644 index 0000000..85b0a48 --- /dev/null +++ b/docs/build/unreleased/839.rst @@ -0,0 +1,6 @@ +.. change:: + :tags: bug, versioning, regression + :tickets: 839 + + Fixed regression in new versioning traversal where "alembic downgrade head" + (or equivalent) fails instead of iterating no revisions. diff --git a/tests/test_version_traversal.py b/tests/test_version_traversal.py index f224731..bdc7f65 100644 --- a/tests/test_version_traversal.py +++ b/tests/test_version_traversal.py @@ -58,6 +58,11 @@ class RevisionPathTest(MigrationTest): self.a.revision, [self.a.revision], [], {self.a.revision} ) + def test_downgrade_to_existing_head(self): + self._assert_downgrade( + self.e.revision, [self.e.revision], [], {self.e.revision} + ) + def test_upgrade_path(self): self._assert_upgrade( self.e.revision, @@ -511,15 +516,6 @@ class BranchedPathTest(MigrationTest): [self.c1.revision, self.c2.revision], ) - def test_not_a_downgrade(self): - assert_raises_message( - util.CommandError, - "Not a valid downgrade target from current heads", - self.env._downgrade_revs, - self.d2.revision, - [self.d1.revision, self.d2.revision], - ) - def test_upgrade_from_base(self): self._assert_upgrade( "base+1", [], [self.up_(self.a)], set([self.a.revision]) @@ -544,6 +540,21 @@ class BranchedPathTest(MigrationTest): [], ) + def test_downgrade_no_effect_branched(self): + """Added for good measure when there are multiple branches. """ + self._assert_downgrade( + self.c2.revision, + [self.d1.revision, self.c2.revision], + [], + set([self.d1.revision, self.c2.revision]), + ) + self._assert_downgrade( + self.d1.revision, + [self.d1.revision, self.c2.revision], + [], + set([self.d1.revision, self.c2.revision]), + ) + class BranchFromMergepointTest(MigrationTest): |