options.get_main_option('script_location'))
def upgrade_from(self, current_rev):
- script = self._revision_map[current_rev]
- while script:
- yield script.module.upgrade, script.upgrade
- script = script.nextrev
-
+ head = self._current_head()
+ script = self._revision_map[head]
+ scripts = []
+ while script.upgrade != current_rev:
+ scripts.append((script.module.upgrade, script.upgrade))
+ script = self._revision_map[script.downgrade]
+ return reversed(scripts)
+
def downgrade_to(self, destination, current_rev):
return []
map_[rev.downgrade].nextrev = rev.upgrade
return map_
+ def _current_head(self):
+ current_heads = self._get_heads()
+ if len(current_heads) > 1:
+ raise Exception("Only a single head supported so far...")
+ if current_heads:
+ return current_heads[0]
+ else:
+ return None
+
def _get_heads(self):
# TODO: keep map sorted chronologically
heads = []
src, dest)
def generate_rev(self, revid, message):
- current_heads = self._get_heads()
- if len(current_heads) > 1:
- raise Exception("Only a single head supported so far...")
- if current_heads:
- current_head = current_heads[0]
- else:
- current_head = None
+ current_head = self._current_head()
filename = "%s.py" % revid
self.generate_template(
os.path.join(self.dir, "script.py.mako"),
--- /dev/null
+from tests import clear_staging_env, staging_env, eq_, ne_
+from alembic import util
+
+
+def setup():
+ global env
+ env = staging_env()
+ global a, b, c, d, e
+ a = env.generate_rev(util.rev_id(), None)
+ b = env.generate_rev(util.rev_id(), None)
+ c = env.generate_rev(util.rev_id(), None)
+ d = env.generate_rev(util.rev_id(), None)
+ e = env.generate_rev(util.rev_id(), None)
+
+def teardown():
+ clear_staging_env()
+
+
+def test_upgrade_path():
+
+ eq_(
+ list(env.upgrade_from(c.upgrade)),
+ [
+ (d.module.upgrade, d.upgrade),
+ (e.module.upgrade, e.upgrade),
+ ]
+ )
+
\ No newline at end of file