[FIX] migration: allow debugging of migration scripts + avoid useless copies
This commit is contained in:
parent
19da7b708c
commit
a1eb27b8ef
|
@ -131,11 +131,6 @@ class MigrationManager(object):
|
||||||
lst.sort()
|
lst.sort()
|
||||||
return lst
|
return lst
|
||||||
|
|
||||||
def mergedict(a, b):
|
|
||||||
a = a.copy()
|
|
||||||
a.update(b)
|
|
||||||
return a
|
|
||||||
|
|
||||||
parsed_installed_version = parse_version(pkg.installed_version or '')
|
parsed_installed_version = parse_version(pkg.installed_version or '')
|
||||||
current_version = parse_version(convert_version(pkg.data['version']))
|
current_version = parse_version(convert_version(pkg.data['version']))
|
||||||
|
|
||||||
|
@ -155,19 +150,20 @@ class MigrationManager(object):
|
||||||
continue
|
continue
|
||||||
mod = fp = fp2 = None
|
mod = fp = fp2 = None
|
||||||
try:
|
try:
|
||||||
fp = tools.file_open(pyfile)
|
fp, fname = tools.file_open(pyfile, pathinfo=True)
|
||||||
|
|
||||||
# imp.load_source need a real file object, so we create
|
if not isinstance(fp, file):
|
||||||
# one from the file-like object we get from file_open
|
# imp.load_source need a real file object, so we create
|
||||||
fp2 = os.tmpfile()
|
# one from the file-like object we get from file_open
|
||||||
fp2.write(fp.read())
|
fp2 = os.tmpfile()
|
||||||
fp2.seek(0)
|
fp2.write(fp.read())
|
||||||
|
fp2.seek(0)
|
||||||
try:
|
try:
|
||||||
mod = imp.load_source(name, pyfile, fp2)
|
mod = imp.load_source(name, fname, fp2 or fp)
|
||||||
_logger.info('module %(addon)s: Running migration %(version)s %(name)s' % mergedict({'name': mod.__name__}, strfmt))
|
_logger.info('module %(addon)s: Running migration %(version)s %(name)s' % dict(strfmt, name=mod.__name__))
|
||||||
migrate = mod.migrate
|
migrate = mod.migrate
|
||||||
except ImportError:
|
except ImportError:
|
||||||
_logger.exception('module %(addon)s: Unable to load %(stage)s-migration file %(file)s' % mergedict({'file': pyfile}, strfmt))
|
_logger.exception('module %(addon)s: Unable to load %(stage)s-migration file %(file)s' % dict(strfmt, file=pyfile))
|
||||||
raise
|
raise
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
_logger.error('module %(addon)s: Each %(stage)s-migration file must have a "migrate(cr, installed_version)" function' % strfmt)
|
_logger.error('module %(addon)s: Each %(stage)s-migration file must have a "migrate(cr, installed_version)" function' % strfmt)
|
||||||
|
|
Loading…
Reference in New Issue