summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2014-11-22 18:00:48 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2014-11-22 18:00:48 -0500
commit27629ae73fcbb94fc74e51b83bbb0283876bf2a8 (patch)
tree718c1552d27fa630786f7f0eff5e910851bafc59
parentfe533d5c5148d42f158cb76cf900a53283b00f8f (diff)
downloadalembic-27629ae73fcbb94fc74e51b83bbb0283876bf2a8.tar.gz
- fixes
-rw-r--r--alembic/migration.py2
-rw-r--r--alembic/script.py3
-rw-r--r--alembic/templates/generic/script.py.mako1
-rw-r--r--alembic/templates/multidb/script.py.mako1
-rw-r--r--alembic/templates/pylons/script.py.mako1
-rw-r--r--tests/test_version_traversal.py101
6 files changed, 74 insertions, 35 deletions
diff --git a/alembic/migration.py b/alembic/migration.py
index eefb1d1..60591be 100644
--- a/alembic/migration.py
+++ b/alembic/migration.py
@@ -582,7 +582,7 @@ class RevisionStep(MigrationStep):
elif len(downrevs) == 1:
downrev = self.revision_map.get_revision(downrevs[0])
- if not downrev.is_branch_point:
+ if not downrev._is_real_branch_point:
return False
descendants = set(
diff --git a/alembic/script.py b/alembic/script.py
index aa87704..79fe01e 100644
--- a/alembic/script.py
+++ b/alembic/script.py
@@ -409,7 +409,7 @@ class ScriptDirectory(object):
def generate_revision(
self, revid, message, head=None,
refresh=False, splice=False, branch_labels=None,
- version_path=None, **kw):
+ version_path=None, depends_on=None, **kw):
"""Generate a new revision file.
This runs the ``script.py.mako`` template, given
@@ -488,6 +488,7 @@ class ScriptDirectory(object):
down_revision=revision.tuple_rev_as_scalar(
tuple(h.revision if h is not None else None for h in heads)),
branch_labels=util.to_tuple(branch_labels),
+ depends_on=revision.tuple_rev_as_scalar(depends_on),
create_date=create_date,
comma=util.format_as_comma,
message=message if message is not None else ("empty message"),
diff --git a/alembic/templates/generic/script.py.mako b/alembic/templates/generic/script.py.mako
index 59606db..43c0940 100644
--- a/alembic/templates/generic/script.py.mako
+++ b/alembic/templates/generic/script.py.mako
@@ -10,6 +10,7 @@ Create Date: ${create_date}
revision = ${repr(up_revision)}
down_revision = ${repr(down_revision)}
branch_labels = ${repr(branch_labels)}
+depends_on = ${repr(depends_on)}
from alembic import op
import sqlalchemy as sa
diff --git a/alembic/templates/multidb/script.py.mako b/alembic/templates/multidb/script.py.mako
index fb923dc..09ec497 100644
--- a/alembic/templates/multidb/script.py.mako
+++ b/alembic/templates/multidb/script.py.mako
@@ -13,6 +13,7 @@ Create Date: ${create_date}
revision = ${repr(up_revision)}
down_revision = ${repr(down_revision)}
branch_labels = ${repr(branch_labels)}
+depends_on = ${repr(depends_on)}
from alembic import op
import sqlalchemy as sa
diff --git a/alembic/templates/pylons/script.py.mako b/alembic/templates/pylons/script.py.mako
index 59606db..43c0940 100644
--- a/alembic/templates/pylons/script.py.mako
+++ b/alembic/templates/pylons/script.py.mako
@@ -10,6 +10,7 @@ Create Date: ${create_date}
revision = ${repr(up_revision)}
down_revision = ${repr(down_revision)}
branch_labels = ${repr(branch_labels)}
+depends_on = ${repr(depends_on)}
from alembic import op
import sqlalchemy as sa
diff --git a/tests/test_version_traversal.py b/tests/test_version_traversal.py
index 77aa516..cb93793 100644
--- a/tests/test_version_traversal.py
+++ b/tests/test_version_traversal.py
@@ -43,11 +43,11 @@ class RevisionPathTest(MigrationTest):
@classmethod
def setup_class(cls):
cls.env = env = staging_env()
- cls.a = env.generate_revision(util.rev_id(), '->a', refresh=True)
- cls.b = env.generate_revision(util.rev_id(), 'a->b', refresh=True)
- cls.c = env.generate_revision(util.rev_id(), 'b->c', refresh=True)
- cls.d = env.generate_revision(util.rev_id(), 'c->d', refresh=True)
- cls.e = env.generate_revision(util.rev_id(), 'd->e', refresh=True)
+ cls.a = env.generate_revision(util.rev_id(), '->a')
+ cls.b = env.generate_revision(util.rev_id(), 'a->b')
+ cls.c = env.generate_revision(util.rev_id(), 'b->c')
+ cls.d = env.generate_revision(util.rev_id(), 'c->d')
+ cls.e = env.generate_revision(util.rev_id(), 'd->e')
@classmethod
def teardown_class(cls):
@@ -181,22 +181,22 @@ class BranchedPathTest(MigrationTest):
@classmethod
def setup_class(cls):
cls.env = env = staging_env()
- cls.a = env.generate_revision(util.rev_id(), '->a', refresh=True)
- cls.b = env.generate_revision(util.rev_id(), 'a->b', refresh=True)
+ cls.a = env.generate_revision(util.rev_id(), '->a')
+ cls.b = env.generate_revision(util.rev_id(), 'a->b')
cls.c1 = env.generate_revision(
util.rev_id(), 'b->c1',
branch_labels='c1branch',
refresh=True)
- cls.d1 = env.generate_revision(util.rev_id(), 'c1->d1', refresh=True)
+ cls.d1 = env.generate_revision(util.rev_id(), 'c1->d1')
cls.c2 = env.generate_revision(
util.rev_id(), 'b->c2',
branch_labels='c2branch',
- head=cls.b.revision, refresh=True, splice=True)
+ head=cls.b.revision, splice=True)
cls.d2 = env.generate_revision(
util.rev_id(), 'c2->d2',
- head=cls.c2.revision, refresh=True)
+ head=cls.c2.revision)
@classmethod
def teardown_class(cls):
@@ -285,17 +285,17 @@ class BranchFromMergepointTest(MigrationTest):
@classmethod
def setup_class(cls):
cls.env = env = staging_env()
- cls.a1 = env.generate_revision(util.rev_id(), '->a1', refresh=True)
- cls.b1 = env.generate_revision(util.rev_id(), 'a1->b1', refresh=True)
- cls.c1 = env.generate_revision(util.rev_id(), 'b1->c1', refresh=True)
+ cls.a1 = env.generate_revision(util.rev_id(), '->a1')
+ cls.b1 = env.generate_revision(util.rev_id(), 'a1->b1')
+ cls.c1 = env.generate_revision(util.rev_id(), 'b1->c1')
cls.a2 = env.generate_revision(
util.rev_id(), '->a2', head=(),
refresh=True)
cls.b2 = env.generate_revision(
- util.rev_id(), 'a2->b2', head=cls.a2.revision, refresh=True)
+ util.rev_id(), 'a2->b2', head=cls.a2.revision)
cls.c2 = env.generate_revision(
- util.rev_id(), 'b2->c2', head=cls.b2.revision, refresh=True)
+ util.rev_id(), 'b2->c2', head=cls.b2.revision)
# mergepoint between c1, c2
# d1 dependent on c2
@@ -332,6 +332,7 @@ class BranchFromMergepointTest(MigrationTest):
set([d2.revision, b1.revision])
)
+
class BranchFrom3WayMergepointTest(MigrationTest):
"""this is a form that will come up frequently in the
"many independent roots with cross-dependencies" case.
@@ -341,25 +342,25 @@ class BranchFrom3WayMergepointTest(MigrationTest):
@classmethod
def setup_class(cls):
cls.env = env = staging_env()
- cls.a1 = env.generate_revision(util.rev_id(), '->a1', refresh=True)
- cls.b1 = env.generate_revision(util.rev_id(), 'a1->b1', refresh=True)
- cls.c1 = env.generate_revision(util.rev_id(), 'b1->c1', refresh=True)
+ cls.a1 = env.generate_revision(util.rev_id(), '->a1')
+ cls.b1 = env.generate_revision(util.rev_id(), 'a1->b1')
+ cls.c1 = env.generate_revision(util.rev_id(), 'b1->c1')
cls.a2 = env.generate_revision(
util.rev_id(), '->a2', head=(),
refresh=True)
cls.b2 = env.generate_revision(
- util.rev_id(), 'a2->b2', head=cls.a2.revision, refresh=True)
+ util.rev_id(), 'a2->b2', head=cls.a2.revision)
cls.c2 = env.generate_revision(
- util.rev_id(), 'b2->c2', head=cls.b2.revision, refresh=True)
+ util.rev_id(), 'b2->c2', head=cls.b2.revision)
cls.a3 = env.generate_revision(
util.rev_id(), '->a3', head=(),
refresh=True)
cls.b3 = env.generate_revision(
- util.rev_id(), 'a3->b3', head=cls.a3.revision, refresh=True)
+ util.rev_id(), 'a3->b3', head=cls.a3.revision)
cls.c3 = env.generate_revision(
- util.rev_id(), 'b3->c3', head=cls.b3.revision, refresh=True)
+ util.rev_id(), 'b3->c3', head=cls.b3.revision)
# mergepoint between c1, c2, c3
# d1 dependent on c2, c3
@@ -423,18 +424,52 @@ class BranchFrom3WayMergepointTest(MigrationTest):
)
+class DependsOnBranchTestOne(MigrationTest):
+ @classmethod
+ def setup_class(cls):
+ cls.env = env = staging_env()
+ cls.a1 = env.generate_revision(
+ util.rev_id(), '->a1',
+ branch_labels=['lib1'])
+ cls.b1 = env.generate_revision(util.rev_id(), 'a1->b1')
+ cls.c1 = env.generate_revision(util.rev_id(), 'b1->c1')
+
+ cls.a2 = env.generate_revision(util.rev_id(), '->a2', head=())
+ cls.b2 = env.generate_revision(
+ util.rev_id(), 'a2->b2', head=cls.a2.revision)
+ cls.c2 = env.generate_revision(
+ util.rev_id(), 'b2->c2', head=cls.b2.revision,
+ depends_on=cls.c1.revision)
+
+ cls.d1 = env.generate_revision(
+ util.rev_id(), 'c1->d1',
+ head=cls.c1.revision)
+ cls.e1 = env.generate_revision(
+ util.rev_id(), 'd1->e1',
+ head=cls.d1.revision)
+ cls.f1 = env.generate_revision(
+ util.rev_id(), 'e1->f1',
+ head=cls.e1.revision)
+
+ def test_downgrade_to_dependency(self):
+ heads = [self.c2.revision, self.d1.revision]
+ head = HeadMaintainer(mock.Mock(), heads)
+ head.update_to_step(self.down_(self.d1))
+ eq_(head.heads, set([self.c2.revision]))
+
+
class ForestTest(MigrationTest):
@classmethod
def setup_class(cls):
cls.env = env = staging_env()
- cls.a1 = env.generate_revision(util.rev_id(), '->a1', refresh=True)
- cls.b1 = env.generate_revision(util.rev_id(), 'a1->b1', refresh=True)
+ cls.a1 = env.generate_revision(util.rev_id(), '->a1')
+ cls.b1 = env.generate_revision(util.rev_id(), 'a1->b1')
cls.a2 = env.generate_revision(
util.rev_id(), '->a2', head=(),
refresh=True)
cls.b2 = env.generate_revision(
- util.rev_id(), 'a2->b2', head=cls.a2.revision, refresh=True)
+ util.rev_id(), 'a2->b2', head=cls.a2.revision)
@classmethod
def teardown_class(cls):
@@ -453,26 +488,26 @@ class MergedPathTest(MigrationTest):
@classmethod
def setup_class(cls):
cls.env = env = staging_env()
- cls.a = env.generate_revision(util.rev_id(), '->a', refresh=True)
- cls.b = env.generate_revision(util.rev_id(), 'a->b', refresh=True)
+ cls.a = env.generate_revision(util.rev_id(), '->a')
+ cls.b = env.generate_revision(util.rev_id(), 'a->b')
- cls.c1 = env.generate_revision(util.rev_id(), 'b->c1', refresh=True)
- cls.d1 = env.generate_revision(util.rev_id(), 'c1->d1', refresh=True)
+ cls.c1 = env.generate_revision(util.rev_id(), 'b->c1')
+ cls.d1 = env.generate_revision(util.rev_id(), 'c1->d1')
cls.c2 = env.generate_revision(
util.rev_id(), 'b->c2',
branch_labels='c2branch',
- head=cls.b.revision, refresh=True, splice=True)
+ head=cls.b.revision, splice=True)
cls.d2 = env.generate_revision(
util.rev_id(), 'c2->d2',
- head=cls.c2.revision, refresh=True)
+ head=cls.c2.revision)
cls.e = env.generate_revision(
util.rev_id(), 'merge d1 and d2',
- head=(cls.d1.revision, cls.d2.revision), refresh=True
+ head=(cls.d1.revision, cls.d2.revision)
)
- cls.f = env.generate_revision(util.rev_id(), 'e->f', refresh=True)
+ cls.f = env.generate_revision(util.rev_id(), 'e->f')
@classmethod
def teardown_class(cls):