]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
- [bug] Improved error message when specifiying
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 8 Aug 2012 15:12:04 +0000 (11:12 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 8 Aug 2012 15:12:04 +0000 (11:12 -0400)
  non-ordered revision identifiers to cover
  the case when the "higher" rev is None,
  improved message overall.  #66

CHANGES
alembic/command.py
alembic/script.py
tests/test_revision_paths.py
tests/test_sql_script.py

diff --git a/CHANGES b/CHANGES
index 4fe2e7ddff418d1ed8ce36003e4ee225e2143c2b..6cc639271847da2ea2e6884e8c7226e1e9c3a2ab 100644 (file)
--- a/CHANGES
+++ b/CHANGES
   type_ is not, i.e. there's no net change
   in type.  #62
 
+- [bug] Improved error message when specifiying
+  non-ordered revision identifiers to cover
+  the case when the "higher" rev is None,
+  improved message overall.  #66
+
 0.3.5
 =====
 - [bug] Fixed issue whereby reflected server defaults
index 518d624030b365be4a69f922375992f922c92b43..163c92cfdc1f3c713fdc1982eae89f46b0590341 100644 (file)
@@ -124,7 +124,6 @@ def downgrade(config, revision, sql=False, tag=None):
     """Revert to a previous version."""
 
     script = ScriptDirectory.from_config(config)
-
     starting_rev = None
     if ":" in revision:
         if not sql:
index 286a3d4327e67eeba89061f116774906f21343c3..e888a3e4920aceaa2edb5c4c5868d6ceb59086aa 100644 (file)
@@ -155,14 +155,16 @@ class ScriptDirectory(object):
     def _iterate_revisions(self, upper, lower):
         lower = self.get_revision(lower)
         upper = self.get_revision(upper)
+        orig = lower.revision if lower else 'base', \
+                upper.revision if upper else 'base'
         script = upper
         while script != lower:
+            if script is None and lower is not None:
+                raise util.CommandError(
+                        "Revision %s is not an ancestor of %s" % orig)
             yield script
             downrev = script.down_revision
             script = self._revision_map[downrev]
-            if script is None and lower is not None:
-                raise util.CommandError(
-                        "Couldn't find revision %s" % downrev)
 
     def _upgrade_revs(self, destination, current_rev):
         revs = self.iterate_revisions(destination, current_rev)
index dedfa8bcbe973790ad17b88ba87479bcb4856ad7..cfb4affad48c85296298950572ed4a95e5685a07 100644 (file)
@@ -2,6 +2,9 @@ from tests import clear_staging_env, staging_env, eq_, ne_, \
     assert_raises_message
 from alembic import util
 
+env = None
+a, b, c, d, e = None, None, None, None, None
+cfg = None
 
 def setup():
     global env
@@ -122,3 +125,18 @@ def test_invalid_relative_downgrade_path():
         r"Relative revision \+2 didn't produce 2 migrations",
         env._downgrade_revs, "+2", b.revision
     )
+
+def test_invalid_move_rev_to_none():
+    assert_raises_message(
+        util.CommandError,
+        "Revision %s is not an ancestor of base" % b.revision,
+        env._downgrade_revs, b.revision[0:3], None
+    )
+
+def test_invalid_move_higher_to_lower():
+    assert_raises_message(
+       util.CommandError,
+        "Revision %s is not an ancestor of %s" % (c.revision, b.revision),
+        env._downgrade_revs, c.revision[0:4], b.revision
+    )
+
index af9b1361ac7e5613c06dfd1153c1df7090fcae6a..1d84cb7d4093c67f2f3dd38e76998a8321ccc4a2 100644 (file)
@@ -2,9 +2,12 @@ from __future__ import with_statement
 
 from tests import clear_staging_env, staging_env, \
     _no_sql_testing_config, sqlite_db, eq_, ne_, capture_context_buffer, \
-    three_rev_fixture
+    three_rev_fixture, assert_raises_message
 from alembic import command, util
 
+cfg = None
+a, b, c = None, None, None
+
 def setup():
     global cfg, env
     env = staging_env()
@@ -66,7 +69,6 @@ def test_version_to_middle():
     assert "DROP STEP 2" in buf.getvalue()
     assert "DROP STEP 1" not in buf.getvalue()
 
-
 def test_stamp():
     with capture_context_buffer() as buf:
         command.stamp(cfg, "head", sql=True)