summaryrefslogtreecommitdiff
path: root/migrations/run-all
diff options
context:
space:
mode:
authorPaul Sherwood <paul.sherwood@codethink.co.uk>2016-02-21 04:34:17 +0000
committerPaul Sherwood <paul.sherwood@codethink.co.uk>2016-02-21 04:34:17 +0000
commit6db1928c2cb8f1562b07b9b5e906ba1244ab0216 (patch)
tree50489be41044f2c3eebc8260da19832e5e9a72cb /migrations/run-all
parent132b58fc840c7ec16c57c522123f6b833d2134af (diff)
downloadspec-6db1928c2cb8f1562b07b9b5e906ba1244ab0216.tar.gz
Move content to migrations directory
Diffstat (limited to 'migrations/run-all')
-rwxr-xr-xmigrations/run-all73
1 files changed, 73 insertions, 0 deletions
diff --git a/migrations/run-all b/migrations/run-all
new file mode 100755
index 0000000..5a817ee
--- /dev/null
+++ b/migrations/run-all
@@ -0,0 +1,73 @@
+#!/usr/bin/env python
+# Copyright (C) 2015 Codethink Limited
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+'''Run a set of migration scripts.
+
+This script does exactly what `PYTHONPATH=. run-parts --exit-on-error` would
+do. I avoided using 'run-parts' purely because the implementation in Fedora 22
+doesn't have an '--exit-on-error' option. The Busybox and Debian
+implementations do have that option.
+
+Please fix run-parts in https://git.fedorahosted.org/cgit/crontabs.git/tree/
+so we can simplify this script :-)
+
+'''
+
+
+import os
+import subprocess
+import sys
+
+
+if len(sys.argv) == 2:
+ migration_dir = sys.argv[1]
+elif len(sys.argv) == 1:
+ migration_dir = os.path.dirname(__file__)
+else:
+ sys.stderr.write("Usage: %s [MIGRATION_DIR]\n" % sys.argv[0])
+ sys.exit(1)
+
+
+def is_executable(fpath):
+ return os.path.isfile(fpath) and os.access(fpath, os.X_OK)
+
+env = os.environ
+if 'PYTHONPATH' in env:
+ env['PYTHONPATH'] = env['PYTHONPATH'] + ':' + migration_dir
+else:
+ env['PYTHONPATH'] = migration_dir
+
+try:
+ migrations_found = 0
+ for fname in sorted(os.listdir(migration_dir)):
+ migration_fpath = os.path.join(migration_dir, fname)
+ if is_executable(migration_fpath):
+ if not os.path.samefile(migration_fpath, __file__) and \
+ fname != 'indent':
+ migrations_found += 1
+ sys.stdout.write(migration_fpath + ":\n")
+ subprocess.check_call(
+ migration_fpath, env=env)
+
+ if migrations_found == 0:
+ sys.stderr.write("No migration files found in '%s'\n" % migration_dir)
+ sys.exit(1)
+ else:
+ sys.exit(0)
+
+except (subprocess.CalledProcessError, RuntimeError) as e:
+ sys.stderr.write(str(e) + '\n')
+ sys.exit(1)