summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZbigniew Siciarz <zbigniew@siciarz.net>2016-11-09 00:06:17 +0100
committerTim Graham <timograham@gmail.com>2016-11-08 18:06:17 -0500
commitf94ce0d21de484a5783a3dcb122dc51757ed225b (patch)
tree2cd100088ab22d094bd931b2b1a3a6db8ab8c21d
parentb9eb267c46cac4f20634b57d25a4ccbc115d6892 (diff)
Fixed #27436 -- Fixed makemigrations crash when creating migrations on a separate drive than where Django is installed.
-rw-r--r--django/core/management/commands/makemigrations.py5
-rw-r--r--tests/migrations/test_commands.py13
2 files changed, 17 insertions, 1 deletions
diff --git a/django/core/management/commands/makemigrations.py b/django/core/management/commands/makemigrations.py
index 6eb402109f..0b39536f5b 100644
--- a/django/core/management/commands/makemigrations.py
+++ b/django/core/management/commands/makemigrations.py
@@ -208,7 +208,10 @@ class Command(BaseCommand):
if self.verbosity >= 1:
# Display a relative path if it's below the current working
# 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('..'):
migration_string = writer.path
self.stdout.write(" %s:\n" % (self.style.MIGRATE_LABEL(migration_string),))
diff --git a/tests/migrations/test_commands.py b/tests/migrations/test_commands.py
index 6681ceecbc..fb2b0fb877 100644
--- a/tests/migrations/test_commands.py
+++ b/tests/migrations/test_commands.py
@@ -1152,6 +1152,19 @@ class MakeMigrationsTests(MigrationTestBase):
call_command("makemigrations", "migrations", stdout=out)
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):
"""
makemigrations should raise InconsistentMigrationHistory exception if