Repository: django-oscar/django-oscar

Issue:
oscar_fork_statics tries to read from non-existant static_src directory
Using the current django-oscar, and django, when I try to copy in the default static assets into Frobshop using `oscar_fork_statics` I get an error. Looks like this problem is related to issues #3621 and #3618.
```
$ ./manage.py oscar_fork_statics
System check identified some issues:

WARNINGS:
catalogue.ProductAttributeValue.value_boolean: (fields.W903) NullBooleanField is deprecated. Support for it (except in historical migrations) will be removed in Django 4.0.
        HINT: Use BooleanField(null=True) instead.
Copying Oscar's static files to /var/work/django/frobshop/static/
Traceback (most recent call last):
  File "./manage.py", line 22, in <module>
    main()
  File "./manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/home/mslinn/oscar/lib/python3.8/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/home/mslinn/oscar/lib/python3.8/site-packages/django/core/management/__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/mslinn/oscar/lib/python3.8/site-packages/django/core/management/base.py", line 330, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/mslinn/oscar/lib/python3.8/site-packages/django/core/management/base.py", line 371, in execute
    output = self.handle(*args, **options)
  File "/home/mslinn/oscar/lib/python3.8/site-packages/oscar/management/commands/oscar_fork_statics.py", line 35, in handle
    shutil.copytree(source, destination)
  File "/usr/lib/python3.8/shutil.py", line 552, in copytree
    with os.scandir(src) as itr:
FileNotFoundError: [Errno 2] No such file or directory: '/home/mslinn/oscar/lib/python3.8/site-packages/oscar/static_src'
```

The source directory that `oscar_fork_statics` looks for (`/home/mslinn/oscar/lib/python3.8/site-packages/static_src`) does not exist:
```
$ ls /home/mslinn/oscar/lib/python3.8/site-packages/oscar
__init__.py  apps       core         forms   management  static     templatetags  utils
__pycache__  config.py  defaults.py  locale  models      templates  test          views
```
There is a directory called `static` that seems reasonable, however.




Discussion:
PS: the warning appears every time I run `manage.py`. No idea why. I am sure it is not a contributing factor to this problem, however.
```
WARNINGS:
catalogue.ProductAttributeValue.value_boolean: (fields.W903) NullBooleanField is deprecated. Support for it (except in historical migrations) will be removed in Django 4.0.
        HINT: Use BooleanField(null=True) instead.
Copying Oscar's static files to /var/work/django/frobshop/static/
```

PPS: The `oscar_fork_statics` help message does not say the most important thing, unfortunately: the `target_path` must be mentioned in the array of directories specified by `STATICFILES_DIRS` in `settings.py`.

The [tutorial](https://django-oscar.readthedocs.io/en/latest/howto/how_to_handle_statics.html#customising-statics) shows an example of how to run `oscar_fork_statics` that is missing the directory argument, so it needs correcting:

```
Run it as follows:

./manage.py oscar_fork_statics

This is the recommended approach for non-trivial projects.
```
It is unclear to me without being able to run the program whether that means `frobshop/static` or  `frobshop/frobshop/static`, however.

Resolving patch:
diff --git a/src/oscar/management/commands/oscar_fork_statics.py b/src/oscar/management/commands/oscar_fork_statics.py
--- a/src/oscar/management/commands/oscar_fork_statics.py
+++ b/src/oscar/management/commands/oscar_fork_statics.py
@@ -16,7 +16,12 @@ class Command(BaseCommand):
     help = "Copy Oscar's static files"
 
     def add_arguments(self, parser):
-        parser.add_argument('target_path', nargs='?', default='static_src')
+        parser.add_argument('target_path', nargs='?', default='static',
+                            help='Directory path (relative to current working '
+                                 'directory, or absolute) in local project, to '
+                                 'copy files to. This directory should be '
+                                 'included in STATICFILES_DIRS, in order for '
+                                 'your local overrides to be picked up.')
 
     def handle(self, *args, **options):
         # Determine where to copy to
@@ -30,7 +35,7 @@ def handle(self, *args, **options):
                 "The folder %s already exists - aborting!" % destination)
 
         source = os.path.realpath(
-            os.path.join(os.path.dirname(__file__), '../../static_src'))
+            os.path.join(os.path.dirname(__file__), '../../static'))
         print("Copying Oscar's static files to %s" % (destination,))
         shutil.copytree(source, destination)
 


Test patch: