summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Bowly <simon.bowly@gmail.com>2021-05-07 11:21:55 +1000
committerSimon Bowly <simon.bowly@gmail.com>2021-05-07 01:48:29 +0000
commit4b0797f008f6cd4b53d1a44fd1bc83c32537d90d (patch)
tree9c679a23496cd64d49d3caa5e2478f76c4eb9998
parent54cedeb6b36e96ac00bea75fe1141ee1680d4387 (diff)
downloadalembic-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.py10
-rw-r--r--docs/build/unreleased/839.rst6
-rw-r--r--tests/test_version_traversal.py29
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):