I'm trying to create an R function that automatically creates git commit hooks in the file .pre-commit-config.yaml if it isn't already present in the current directory.
The function is as follows:
create_commit_hook_yaml <- function() {
if (!file.exists(".pre-commit-config.yaml")) {
system('printf "repos:\n- repo: local\n hooks:\n - id: jupyter-nb-clear-output\n name: jupyter-nb-clear-output\n files: \\.ipynb$\n stages: commit\n language: system\n entry: jupyter nbconvert --ClearOutputPreprocessor.enabled=True --inplace\n" > .pre-commit-config.yaml')
}}
It creates the file and the file looks as expected:
repos:
- repo: local
hooks:
- id: jupyter-nb-clear-output
name: jupyter-nb-clear-output
files: \.ipynb$
stages: commit
language: system
entry: jupyter nbconvert --ClearOutputPreprocessor.enabled=True --inplace
However, when trying to push the file to github I get the following error:
An error has occurred: InvalidConfigError: ==> File .pre-commit-config.yaml ==> At Config() ==> At key: repos ==> At Repository(repo='local') ==> At key: hooks ==> At Hook(id='jupyter-nb-clear-output') ==> At key: stages =====> Expected array but got 'str' Check the log at /home/jupyter/.cache/pre-commit/pre-commit.log
The log contains the following:
### version information
```
pre-commit version: 2.20.0
git --version: git version 2.20.1
sys.version:
3.7.12 | packaged by conda-forge | (default, Oct 26 2021, 06:08:53)
[GCC 9.4.0]
sys.executable: /opt/conda/bin/python3.7
os.name: posix
sys.platform: linux
```
### error information
```
An error has occurred: InvalidConfigError:
==> File .pre-commit-config.yaml
==> At Config()
==> At key: repos
==> At Repository(repo='local')
==> At key: hooks
==> At Hook(id='jupyter-nb-clear-output')
==> At key: stages
=====> Expected array but got 'str'
```
```
Traceback (most recent call last):
File "/opt/conda/lib/python3.7/site-packages/pre_commit/error_handler.py", line 73, in error_handler
yield
File "/opt/conda/lib/python3.7/site-packages/pre_commit/main.py", line 365, in main
args=args.rest[1:],
File "/opt/conda/lib/python3.7/site-packages/pre_commit/commands/hook_impl.py", line 254, in hook_impl
return retv | run(config, store, ns)
File "/opt/conda/lib/python3.7/site-packages/pre_commit/commands/run.py", line 408, in run
config = load_config(config_file)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 411, in load_from_filename
return apply_defaults(data, schema)
File "/opt/conda/lib/python3.7/contextlib.py", line 130, in __exit__
self.gen.throw(type, value, traceback)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 43, in reraise_as
raise tp(e).with_traceback(tb) from None
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 40, in reraise_as
yield
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 411, in load_from_filename
return apply_defaults(data, schema)
File "/opt/conda/lib/python3.7/contextlib.py", line 130, in __exit__
self.gen.throw(type, value, traceback)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 34, in validate_context
raise ValidationError(e, ctx=msg).with_traceback(tb) from None
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 31, in validate_context
yield
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 410, in load_from_filename
validate(data, schema)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 376, in validate
schema.check(v)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 244, in check
item.check(v)
File "/opt/conda/lib/python3.7/contextlib.py", line 130, in __exit__
self.gen.throw(type, value, traceback)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 34, in validate_context
raise ValidationError(e, ctx=msg).with_traceback(tb) from None
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 31, in validate_context
yield
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 244, in check
item.check(v)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 73, in _check_required
_check_optional(self, dct)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 54, in _check_optional
self.check_fn(dct[self.key])
File "/opt/conda/lib/python3.7/contextlib.py", line 130, in __exit__
self.gen.throw(type, value, traceback)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 34, in validate_context
raise ValidationError(e, ctx=msg).with_traceback(tb) from None
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 31, in validate_context
yield
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 54, in _check_optional
self.check_fn(dct[self.key])
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 79, in check_fn
validate(val, self.schema)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 376, in validate
schema.check(v)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 272, in check
validate(val, self.of)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 376, in validate
schema.check(v)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 244, in check
item.check(v)
File "/opt/conda/lib/python3.7/contextlib.py", line 130, in __exit__
self.gen.throw(type, value, traceback)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 34, in validate_context
raise ValidationError(e, ctx=msg).with_traceback(tb) from None
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 31, in validate_context
yield
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 244, in check
item.check(v)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 106, in _check_conditional
inner(self, dct)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 73, in _check_required
_check_optional(self, dct)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 54, in _check_optional
self.check_fn(dct[self.key])
File "/opt/conda/lib/python3.7/contextlib.py", line 130, in __exit__
self.gen.throw(type, value, traceback)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 34, in validate_context
raise ValidationError(e, ctx=msg).with_traceback(tb) from None
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 31, in validate_context
yield
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 54, in _check_optional
self.check_fn(dct[self.key])
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 79, in check_fn
validate(val, self.schema)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 376, in validate
schema.check(v)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 272, in check
validate(val, self.of)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 376, in validate
schema.check(v)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 244, in check
item.check(v)
File "/opt/conda/lib/python3.7/contextlib.py", line 130, in __exit__
self.gen.throw(type, value, traceback)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 34, in validate_context
raise ValidationError(e, ctx=msg).with_traceback(tb) from None
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 31, in validate_context
yield
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 244, in check
item.check(v)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 54, in _check_optional
self.check_fn(dct[self.key])
File "/opt/conda/lib/python3.7/contextlib.py", line 130, in __exit__
self.gen.throw(type, value, traceback)
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 34, in validate_context
raise ValidationError(e, ctx=msg).with_traceback(tb) from None
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 31, in validate_context
yield
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 54, in _check_optional
self.check_fn(dct[self.key])
File "/opt/conda/lib/python3.7/site-packages/cfgv.py", line 359, in check_array_fn
f'Expected array but got {type(v).__name__!r}',
pre_commit.clientlib.InvalidConfigError:
==> File .pre-commit-config.yaml
==> At Config()
==> At key: repos
==> At Repository(repo='local')
==> At key: hooks
==> At Hook(id='jupyter-nb-clear-output')
==> At key: stages
=====> Expected array but got 'str'
```
To my knowledge, the repo and hook id's should be arrays as they have a '-' in front, but I've tried removing the '-'s and have also tried adding more in in various places but none of it works. I'm new to commit hooks and yaml files so don't understand what isn't working. Is anyone able to help me do this right?
EDIT:
To be specific about what I've tried, I added "- " in front of stages, which is what the error suggests but that results in a different error message which I don't understand:
An error has occurred: InvalidConfigError: ==> File .pre-commit-config.yaml =====> while parsing a block mapping in "<unicode string>", line 4, column 5 did not find expected key in "<unicode string>", line 7, column 5 Check the log at /home/jupyter/.cache/pre-commit/pre-commit.log