]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
- fixes
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 22 Nov 2014 23:00:48 +0000 (18:00 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 22 Nov 2014 23:00:48 +0000 (18:00 -0500)
alembic/migration.py
alembic/script.py
alembic/templates/generic/script.py.mako
alembic/templates/multidb/script.py.mako
alembic/templates/pylons/script.py.mako
tests/test_version_traversal.py

index eefb1d1ea513aafd714a347c32db879b4e65e6d7..60591bed3662803fc471d9d94e01b7dddeefc42a 100644 (file)
@@ -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(
index aa877042c7d2a0039b1a4ec6d31a583118658dab..79fe01e2eb607e0477ea2cc74539e4d8f0eb2308 100644 (file)
@@ -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"),
index 59606dbd7c723f0d993bd524fff58e4332dcb1a9..43c09401bc839adc93c2bbb41fb1407b09ce7718 100644 (file)
@@ -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
index fb923dc2855826d684a29686c4ec90bca7b4ca5b..09ec497df26e96c677d35d824fa86629e98b079b 100644 (file)
@@ -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
index 59606dbd7c723f0d993bd524fff58e4332dcb1a9..43c09401bc839adc93c2bbb41fb1407b09ce7718 100644 (file)
@@ -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
index 77aa516400ff99e24cf0b2104b401fa9526c15cf..cb93793d306a6a98327490e18bb39b6b1fcd96f3 100644 (file)
@@ -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):