Fixed #17503 -- A destination directory passed to startproject or startapp as optional second argument is now reused as the project/app directory, rather than a new project/app directory created within it. Refs #17042.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17340 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
8e9043bccb
commit
bc63ba700a
|
@ -73,15 +73,14 @@ class TemplateCommand(BaseCommand):
|
||||||
|
|
||||||
# if some directory is given, make sure it's nicely expanded
|
# if some directory is given, make sure it's nicely expanded
|
||||||
if target is None:
|
if target is None:
|
||||||
target = os.getcwd()
|
top_dir = path.join(os.getcwd(), name)
|
||||||
|
try:
|
||||||
|
os.makedirs(top_dir)
|
||||||
|
except OSError, e:
|
||||||
|
raise CommandError(e)
|
||||||
else:
|
else:
|
||||||
target = path.expanduser(target)
|
top_dir = path.expanduser(target)
|
||||||
|
|
||||||
top_dir = path.join(target, name)
|
|
||||||
try:
|
|
||||||
os.makedirs(top_dir)
|
|
||||||
except OSError, e:
|
|
||||||
raise CommandError(e)
|
|
||||||
|
|
||||||
extensions = tuple(
|
extensions = tuple(
|
||||||
handle_extensions(options.get('extensions'), ignored=()))
|
handle_extensions(options.get('extensions'), ignored=()))
|
||||||
|
|
|
@ -922,13 +922,13 @@ template files. (See the `source`_ for more details.) If only the app
|
||||||
name is given, the app directory will be created in the current working
|
name is given, the app directory will be created in the current working
|
||||||
directory.
|
directory.
|
||||||
|
|
||||||
If the optional destination is provided, Django will create the new project
|
If the optional destination is provided, Django will use that existing
|
||||||
directory in that directory. You can use '.' to denote the current working
|
directory rather than creating a new one. You can use '.' to denote the current
|
||||||
directory.
|
working directory.
|
||||||
|
|
||||||
For example::
|
For example::
|
||||||
|
|
||||||
django-admin.py startapp myapp /Users/jezdez/Code
|
django-admin.py startapp myapp /Users/jezdez/Code/myapp
|
||||||
|
|
||||||
.. versionadded:: 1.4
|
.. versionadded:: 1.4
|
||||||
.. django-admin-option:: --template
|
.. django-admin-option:: --template
|
||||||
|
@ -984,20 +984,20 @@ the current directory or the given destination.
|
||||||
.. versionchanged:: 1.4
|
.. versionchanged:: 1.4
|
||||||
|
|
||||||
By default, the new directory contains ``manage.py`` and a project package
|
By default, the new directory contains ``manage.py`` and a project package
|
||||||
(containing ``settings.py`` file and other project template files).
|
(containing a ``settings.py`` and other files). See the `template source`_ for
|
||||||
See the `template source`_ for details.
|
details.
|
||||||
|
|
||||||
If only the project name is given, both the project directory and project
|
If only the project name is given, both the project directory and project
|
||||||
package will be named ``<projectname>`` and the project directory
|
package will be named ``<projectname>`` and the project directory
|
||||||
will be created in the current working directory.
|
will be created in the current working directory.
|
||||||
|
|
||||||
If the optional destination is provided, Django will create the new project
|
If the optional destination is provided, Django will use that existing
|
||||||
directory in that directory. You can use '.' to denote the current working
|
directory as the project directory, and create ``manage.py`` and the project
|
||||||
directory.
|
package within it. You can use '.' to denote the current working directory.
|
||||||
|
|
||||||
For example::
|
For example::
|
||||||
|
|
||||||
django-admin.py startproject myproject /Users/jezdez/Code
|
django-admin.py startproject myproject /Users/jezdez/Code/myproject_repo
|
||||||
|
|
||||||
.. versionadded:: 1.4
|
.. versionadded:: 1.4
|
||||||
|
|
||||||
|
|
|
@ -1404,17 +1404,17 @@ class StartProject(LiveServerTestCase, AdminScriptTestCase):
|
||||||
"Make sure the startproject management command creates a project in a specific directory"
|
"Make sure the startproject management command creates a project in a specific directory"
|
||||||
args = ['startproject', 'testproject', 'othertestproject']
|
args = ['startproject', 'testproject', 'othertestproject']
|
||||||
testproject_dir = os.path.join(test_dir, 'othertestproject')
|
testproject_dir = os.path.join(test_dir, 'othertestproject')
|
||||||
|
os.mkdir(testproject_dir)
|
||||||
|
|
||||||
out, err = self.run_django_admin(args)
|
out, err = self.run_django_admin(args)
|
||||||
self.addCleanup(shutil.rmtree, testproject_dir)
|
self.addCleanup(shutil.rmtree, testproject_dir)
|
||||||
self.assertNoOutput(err)
|
self.assertNoOutput(err)
|
||||||
self.assertTrue(os.path.isdir(os.path.join(testproject_dir, 'testproject')))
|
self.assertTrue(os.path.exists(os.path.join(testproject_dir, 'manage.py')))
|
||||||
self.assertTrue(os.path.exists(os.path.join(testproject_dir, 'testproject', 'manage.py')))
|
|
||||||
|
|
||||||
# running again..
|
# running again..
|
||||||
out, err = self.run_django_admin(args)
|
out, err = self.run_django_admin(args)
|
||||||
self.assertNoOutput(out)
|
self.assertNoOutput(out)
|
||||||
self.assertOutput(err, "File exists")
|
self.assertOutput(err, "already exists")
|
||||||
|
|
||||||
def test_custom_project_template(self):
|
def test_custom_project_template(self):
|
||||||
"Make sure the startproject management command is able to use a different project template"
|
"Make sure the startproject management command is able to use a different project template"
|
||||||
|
@ -1452,6 +1452,19 @@ class StartProject(LiveServerTestCase, AdminScriptTestCase):
|
||||||
self.assertTrue(os.path.isdir(testproject_dir))
|
self.assertTrue(os.path.isdir(testproject_dir))
|
||||||
self.assertTrue(os.path.exists(os.path.join(testproject_dir, 'run.py')))
|
self.assertTrue(os.path.exists(os.path.join(testproject_dir, 'run.py')))
|
||||||
|
|
||||||
|
def test_custom_project_template_from_tarball_to_alternative_location(self):
|
||||||
|
"Startproject can use a project template from a tarball and create it in a specified location"
|
||||||
|
template_path = os.path.join(test_dir, 'admin_scripts', 'custom_templates', 'project_template.tgz')
|
||||||
|
args = ['startproject', '--template', template_path, 'tarballtestproject', 'altlocation']
|
||||||
|
testproject_dir = os.path.join(test_dir, 'altlocation')
|
||||||
|
os.mkdir(testproject_dir)
|
||||||
|
|
||||||
|
out, err = self.run_django_admin(args)
|
||||||
|
self.addCleanup(shutil.rmtree, testproject_dir)
|
||||||
|
self.assertNoOutput(err)
|
||||||
|
self.assertTrue(os.path.isdir(testproject_dir))
|
||||||
|
self.assertTrue(os.path.exists(os.path.join(testproject_dir, 'run.py')))
|
||||||
|
|
||||||
def test_custom_project_template_from_tarball_by_url(self):
|
def test_custom_project_template_from_tarball_by_url(self):
|
||||||
"Make sure the startproject management command is able to use a different project template from a tarball via a url"
|
"Make sure the startproject management command is able to use a different project template from a tarball via a url"
|
||||||
template_url = '%s/admin_scripts/custom_templates/project_template.tgz' % self.live_server_url
|
template_url = '%s/admin_scripts/custom_templates/project_template.tgz' % self.live_server_url
|
||||||
|
|
Loading…
Reference in New Issue