Fixed #27436 -- Fixed makemigrations crash when creating migrations on a separate drive than where Django is installed.

This commit is contained in:
Zbigniew Siciarz 2016-11-09 00:06:17 +01:00 committed by Tim Graham
parent b9eb267c46
commit f94ce0d21d
2 changed files with 17 additions and 1 deletions

View File

@ -208,7 +208,10 @@ class Command(BaseCommand):
if self.verbosity >= 1: if self.verbosity >= 1:
# Display a relative path if it's below the current working # Display a relative path if it's below the current working
# directory, or an absolute path otherwise. # directory, or an absolute path otherwise.
migration_string = os.path.relpath(writer.path) try:
migration_string = os.path.relpath(writer.path)
except ValueError:
migration_string = writer.path
if migration_string.startswith('..'): if migration_string.startswith('..'):
migration_string = writer.path migration_string = writer.path
self.stdout.write(" %s:\n" % (self.style.MIGRATE_LABEL(migration_string),)) self.stdout.write(" %s:\n" % (self.style.MIGRATE_LABEL(migration_string),))

View File

@ -1152,6 +1152,19 @@ class MakeMigrationsTests(MigrationTestBase):
call_command("makemigrations", "migrations", stdout=out) call_command("makemigrations", "migrations", stdout=out)
self.assertIn(os.path.join(migration_dir, '0001_initial.py'), out.getvalue()) self.assertIn(os.path.join(migration_dir, '0001_initial.py'), out.getvalue())
def test_makemigrations_migration_path_output_valueerror(self):
"""
makemigrations prints the absolute path if os.path.relpath() raises a
ValueError when it's impossible to obtain a relative path, e.g. on
Windows if Django is installed on a different drive than where the
migration files are created.
"""
out = six.StringIO()
with self.temporary_migration_module() as migration_dir:
with mock.patch('os.path.relpath', side_effect=ValueError):
call_command('makemigrations', 'migrations', stdout=out)
self.assertIn(os.path.join(migration_dir, '0001_initial.py'), out.getvalue())
def test_makemigrations_inconsistent_history(self): def test_makemigrations_inconsistent_history(self):
""" """
makemigrations should raise InconsistentMigrationHistory exception if makemigrations should raise InconsistentMigrationHistory exception if