summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2012-08-08 11:12:04 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2012-08-08 11:12:04 -0400
commit046d0b701b921d0167c04fe8c9dfd8c41ec21ecd (patch)
treeafe34df875af207d5a6507c392baae0d24b7f74c
parent7ee8f96b6f531ebdfb2d588e13415efc9d59a4ff (diff)
downloadalembic-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--CHANGES5
-rw-r--r--alembic/command.py1
-rw-r--r--alembic/script.py8
-rw-r--r--tests/test_revision_paths.py18
-rw-r--r--tests/test_sql_script.py6
5 files changed, 32 insertions, 6 deletions
diff --git a/CHANGES b/CHANGES
index 4fe2e7d..6cc6392 100644
--- a/CHANGES
+++ b/CHANGES
@@ -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)