]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
- ensure we include for dependencies when we do a stamp, add an option
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 23 Nov 2014 15:42:39 +0000 (10:42 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 23 Nov 2014 15:42:39 +0000 (10:42 -0500)
to filter_for_lineage

alembic/revision.py
alembic/script.py
tests/test_version_traversal.py

index 237cf79ca896e26cd657f5cfbe173732c3a70650..1afb203dcb191fa6de97d652f9ffcd08cabb00b1 100644 (file)
@@ -341,7 +341,8 @@ class RevisionMap(object):
                     (revision.revision, check_branch))
         return revision
 
-    def filter_for_lineage(self, targets, check_against):
+    def filter_for_lineage(
+            self, targets, check_against, include_dependencies=False):
         id_, branch_label = self._resolve_revision_number(check_against)
 
         shares = []
@@ -354,9 +355,11 @@ class RevisionMap(object):
 
         return [
             tg for tg in targets
-            if self._shares_lineage(tg, shares)]
+            if self._shares_lineage(
+                tg, shares, include_dependencies=include_dependencies)]
 
-    def _shares_lineage(self, target, test_against_revs):
+    def _shares_lineage(
+            self, target, test_against_revs, include_dependencies=False):
         if not test_against_revs:
             return True
         if not isinstance(target, Revision):
@@ -372,9 +375,9 @@ class RevisionMap(object):
 
         return bool(
             set(self._get_descendant_nodes([target],
-                include_dependencies=False))
+                include_dependencies=include_dependencies))
             .union(self._get_ancestor_nodes([target],
-                   include_dependencies=False))
+                   include_dependencies=include_dependencies))
             .intersection(test_against_revs)
         )
 
index 79fe01e2eb607e0477ea2cc74539e4d8f0eb2308..763d0487d23d3c6dedf1ab8cea53a0c327eb7902 100644 (file)
@@ -329,7 +329,7 @@ class ScriptDirectory(object):
             # filter for lineage will resolve things like
             # branchname@base, version@base, etc.
             filtered_heads = self.revision_map.filter_for_lineage(
-                heads, revision)
+                heads, revision, include_dependencies=True)
 
             dest = self.get_revision(revision)
 
index a503a522fb0429aa0f460132ca666262d78abb0e..1fc99e21692b3d9fc5a85dfddd4655ac846e9d41 100644 (file)
@@ -457,6 +457,13 @@ class DependsOnBranchTestOne(MigrationTest):
         head.update_to_step(self.down_(self.d1))
         eq_(head.heads, set([self.c2.revision]))
 
+    def test_stamp_across_dependency(self):
+        heads = [self.e1.revision, self.c2.revision]
+        head = HeadMaintainer(mock.Mock(), heads)
+        for step in self.env._stamp_revs(self.b1.revision, heads):
+            head.update_to_step(step)
+        eq_(head.heads, set([self.b1.revision]))
+
 
 class DependsOnBranchTestTwo(MigrationTest):
     @classmethod