]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
Move empty downgrade revisions check to make it specific to branch filtering case...
authorSimon Bowly <simon.bowly@gmail.com>
Fri, 7 May 2021 01:21:55 +0000 (11:21 +1000)
committerSimon Bowly <simon.bowly@gmail.com>
Fri, 7 May 2021 01:48:29 +0000 (01:48 +0000)
Fixed regression in new versioning traversal where "alembic downgrade head" (or equivalent) fails instead of iterating no revisions.

Fixes: #839
Change-Id: I9e8463ee067761ee4588c2ccc1b1009e2be97c38

alembic/script/revision.py
docs/build/unreleased/839.rst [new file with mode: 0644]
tests/test_version_traversal.py

index 7fbd670a89c3da1b92e49713d2d2e1c73faa0e02..ef03d2e54ab2c6f9ab0f17b72be2e6bd050ba478 100644 (file)
@@ -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 (file)
index 0000000..85b0a48
--- /dev/null
@@ -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.
index f224731f0fa9ddfd859e6fdd7c1e7847d3c31d69..bdc7f658bd4f5ddcf3bbf9e2811f5bd3c2ecf2b6 100644 (file)
@@ -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):