diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-11-22 18:00:48 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-11-22 18:00:48 -0500 |
commit | 27629ae73fcbb94fc74e51b83bbb0283876bf2a8 (patch) | |
tree | 718c1552d27fa630786f7f0eff5e910851bafc59 | |
parent | fe533d5c5148d42f158cb76cf900a53283b00f8f (diff) | |
download | alembic-27629ae73fcbb94fc74e51b83bbb0283876bf2a8.tar.gz |
- fixes
-rw-r--r-- | alembic/migration.py | 2 | ||||
-rw-r--r-- | alembic/script.py | 3 | ||||
-rw-r--r-- | alembic/templates/generic/script.py.mako | 1 | ||||
-rw-r--r-- | alembic/templates/multidb/script.py.mako | 1 | ||||
-rw-r--r-- | alembic/templates/pylons/script.py.mako | 1 | ||||
-rw-r--r-- | tests/test_version_traversal.py | 101 |
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): |