From 530f58caaa5052e9e56bf8461caee4d821953bcb Mon Sep 17 00:00:00 2001 From: Rohith PR Date: Tue, 11 May 2021 16:09:28 +0530 Subject: [PATCH] Fixed #32734 -- Fixed validation of startapp's directory with trailing slash. Regression in fc9566d42daf28cdaa25a5db1b5ade253ceb064f. --- AUTHORS | 1 + django/core/management/templates.py | 4 ++-- tests/admin_scripts/tests.py | 7 +++++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/AUTHORS b/AUTHORS index b76b825716..1a66ba6477 100644 --- a/AUTHORS +++ b/AUTHORS @@ -798,6 +798,7 @@ answer newbie questions, and generally made Django that much better: Rob Nguyen Robin Munn Rodrigo Pinheiro Marques de Araújo + Rohith P R Romain Garrigues Ronny Haryanto Ross Poulton diff --git a/django/core/management/templates.py b/django/core/management/templates.py index 8dc6068286..8607ca8542 100644 --- a/django/core/management/templates.py +++ b/django/core/management/templates.py @@ -73,9 +73,9 @@ class TemplateCommand(BaseCommand): except OSError as e: raise CommandError(e) else: - if app_or_project == 'app': - self.validate_name(os.path.basename(target), 'directory') top_dir = os.path.abspath(os.path.expanduser(target)) + if app_or_project == 'app': + self.validate_name(os.path.basename(top_dir), 'directory') if not os.path.exists(top_dir): raise CommandError("Destination directory '%s' does not " "exist, please create it first." % top_dir) diff --git a/tests/admin_scripts/tests.py b/tests/admin_scripts/tests.py index fd94d4919f..8dd06f660b 100644 --- a/tests/admin_scripts/tests.py +++ b/tests/admin_scripts/tests.py @@ -2206,6 +2206,13 @@ class StartApp(AdminScriptTestCase): "another directory." ) + def test_trailing_slash_in_target_app_directory_name(self): + app_dir = os.path.join(self.test_dir, 'apps', 'app1') + os.makedirs(app_dir) + _, err = self.run_django_admin(['startapp', 'app', os.path.join('apps', 'app1', '')]) + self.assertNoOutput(err) + self.assertIs(os.path.exists(os.path.join(app_dir, 'apps.py')), True) + def test_overlaying_app(self): # Use a subdirectory so it is outside the PYTHONPATH. os.makedirs(os.path.join(self.test_dir, 'apps/app1'))