diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-08-08 11:12:04 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-08-08 11:12:04 -0400 |
commit | 046d0b701b921d0167c04fe8c9dfd8c41ec21ecd (patch) | |
tree | afe34df875af207d5a6507c392baae0d24b7f74c | |
parent | 7ee8f96b6f531ebdfb2d588e13415efc9d59a4ff (diff) | |
download | alembic-046d0b701b921d0167c04fe8c9dfd8c41ec21ecd.tar.gz |
- [bug] Improved error message when specifiying
non-ordered revision identifiers to cover
the case when the "higher" rev is None,
improved message overall. #66
-rw-r--r-- | CHANGES | 5 | ||||
-rw-r--r-- | alembic/command.py | 1 | ||||
-rw-r--r-- | alembic/script.py | 8 | ||||
-rw-r--r-- | tests/test_revision_paths.py | 18 | ||||
-rw-r--r-- | tests/test_sql_script.py | 6 |
5 files changed, 32 insertions, 6 deletions
@@ -30,6 +30,11 @@ 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 diff --git a/alembic/command.py b/alembic/command.py index 518d624..163c92c 100644 --- a/alembic/command.py +++ b/alembic/command.py @@ -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: diff --git a/alembic/script.py b/alembic/script.py index 286a3d4..e888a3e 100644 --- a/alembic/script.py +++ b/alembic/script.py @@ -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) diff --git a/tests/test_revision_paths.py b/tests/test_revision_paths.py index dedfa8b..cfb4aff 100644 --- a/tests/test_revision_paths.py +++ b/tests/test_revision_paths.py @@ -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 + ) + diff --git a/tests/test_sql_script.py b/tests/test_sql_script.py index af9b136..1d84cb7 100644 --- a/tests/test_sql_script.py +++ b/tests/test_sql_script.py @@ -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) |