pre-commit-crocodile 4.1.0__tar.gz → 4.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/.gitlab-ci.yml +0 -1
  2. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/.pre-commit-config.yaml +5 -1
  3. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/CHANGELOG.md +22 -1
  4. {pre_commit_crocodile-4.1.0/pre_commit_crocodile.egg-info → pre_commit_crocodile-4.2.0}/PKG-INFO +2 -2
  5. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/README.md +1 -1
  6. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0/pre_commit_crocodile.egg-info}/PKG-INFO +2 -2
  7. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/assets/.pre-commit-config.yaml +4 -0
  8. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/cli/entrypoint.py +10 -5
  9. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/features/precommit.py +44 -17
  10. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/.coveragerc +0 -0
  11. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/.cz.yaml +0 -0
  12. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/.gitattributes +0 -0
  13. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/.gitignore +0 -0
  14. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/.markdownlint.json +0 -0
  15. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/.pre-commit-hooks.yaml +0 -0
  16. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/.style.yapf +0 -0
  17. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/.vscode/extensions.json +0 -0
  18. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/.vscode/settings.json +0 -0
  19. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/LICENSE +0 -0
  20. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/config/cliff.toml +0 -0
  21. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/containers/build/Dockerfile +0 -0
  22. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/containers/codestyle/Dockerfile +0 -0
  23. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/containers/commits/Dockerfile +0 -0
  24. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/containers/deploy/Dockerfile +0 -0
  25. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/containers/pages/Dockerfile +0 -0
  26. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/containers/preview/Dockerfile +0 -0
  27. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/containers/rehost/images.txt +0 -0
  28. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/containers/test-coverage-linux/Dockerfile +0 -0
  29. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/containers/test-coverage-windows/Dockerfile +0 -0
  30. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/containers/test-linux/Dockerfile +0 -0
  31. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/docs/.pages.in +0 -0
  32. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/docs/assets/images/favicon.png +0 -0
  33. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/docs/assets/scripts/mkdocs-exporter.js +0 -0
  34. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/docs/assets/stylesheets/custom.css +0 -0
  35. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/docs/assets/stylesheets/pdf.scss +0 -0
  36. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/docs/commitizen.md +0 -0
  37. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/docs/commits.md +0 -0
  38. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/docs/components.md +0 -0
  39. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/docs/hooks.md +0 -0
  40. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/docs/pre-commit.md +0 -0
  41. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/docs/prepare.sh +0 -0
  42. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/docs/preview.py +0 -0
  43. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/docs/preview.svg +0 -0
  44. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/docs/robots.txt +0 -0
  45. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/docs/settings.md +0 -0
  46. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/docs/template.svg +0 -0
  47. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/docs/templates/covers/back.html.j2 +0 -0
  48. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/docs/templates/covers/front.html.j2 +0 -0
  49. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/mkdocs.yml +0 -0
  50. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/mypy.ini +0 -0
  51. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/pre_commit_crocodile.egg-info/SOURCES.txt +0 -0
  52. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/pre_commit_crocodile.egg-info/dependency_links.txt +0 -0
  53. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/pre_commit_crocodile.egg-info/entry_points.txt +0 -0
  54. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/pre_commit_crocodile.egg-info/requires.txt +0 -0
  55. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/pre_commit_crocodile.egg-info/top_level.txt +0 -0
  56. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/requirements/build.txt +0 -0
  57. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/requirements/commits.txt +0 -0
  58. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/requirements/coverage.txt +0 -0
  59. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/requirements/deploy.txt +0 -0
  60. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/requirements/docs.txt +0 -0
  61. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/requirements/pages.txt +0 -0
  62. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/requirements/quality.txt +0 -0
  63. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/requirements/runtime.txt +0 -0
  64. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/requirements/tests.txt +0 -0
  65. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/setup.cfg +0 -0
  66. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/setup.py +0 -0
  67. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/sonar-project.properties +0 -0
  68. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/__init__.py +0 -0
  69. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/__main__.py +0 -0
  70. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/assets/.cz.yaml +0 -0
  71. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/assets/__init__.py +0 -0
  72. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/cli/__init__.py +0 -0
  73. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/cli/main.py +0 -0
  74. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/features/__init__.py +0 -0
  75. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/features/argcomplete.py +0 -0
  76. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/features/commitizen.py +0 -0
  77. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/features/gcil.py +0 -0
  78. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/features/git.py +0 -0
  79. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/features/radiandevcore.py +0 -0
  80. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/features/readme.py +0 -0
  81. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/hooks/__init__.py +0 -0
  82. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/hooks/check_yaml_ruamel_pure.py +0 -0
  83. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/hooks/configurations.py +0 -0
  84. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/hooks/prepare_commit_message.py +0 -0
  85. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/package/__init__.py +0 -0
  86. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/package/bundle.py +0 -0
  87. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/package/settings.py +0 -0
  88. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/package/updates.py +0 -0
  89. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/package/version.py +0 -0
  90. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/prints/__init__.py +0 -0
  91. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/prints/boxes.py +0 -0
  92. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/prints/colors.py +0 -0
  93. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/system/__init__.py +0 -0
  94. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/system/commands.py +0 -0
  95. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/system/platform.py +0 -0
  96. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/types/__init__.py +0 -0
  97. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/types/environments.py +0 -0
  98. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/src/types/strings.py +0 -0
  99. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/templates/commits.yml +0 -0
  100. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/tests/arguments/test.sh +0 -0
  101. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/tests/colors/test.sh +0 -0
  102. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/tests/macos/test.sh +0 -0
  103. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/tests/settings/test.sh +0 -0
  104. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/tests/versions/test.sh +0 -0
  105. {pre_commit_crocodile-4.1.0 → pre_commit_crocodile-4.2.0}/tests/windows/test.sh +0 -0
@@ -1034,7 +1034,6 @@ pages:
1034
1034
  pdf:
1035
1035
  extends:
1036
1036
  - pages
1037
- stage: deploy
1038
1037
  artifacts:
1039
1038
  expire_in: 1 hour
1040
1039
  paths:
@@ -63,6 +63,10 @@ repos:
63
63
  - id: mixed-line-ending
64
64
  - id: trailing-whitespace
65
65
  args: ['--markdown-linebreak-ext=md']
66
+ exclude: >
67
+ (?x)(
68
+ .*.md$
69
+ )
66
70
 
67
71
  # Repository: pre-commit-hooks
68
72
  - repo: https://github.com/pre-commit/pygrep-hooks
@@ -111,7 +115,7 @@ repos:
111
115
 
112
116
  # Repository: gcil
113
117
  - repo: https://gitlab.com/RadianDevCore/tools/gcil
114
- rev: 9db7ca21
118
+ rev: 10.2.0
115
119
  hooks:
116
120
  - id: run-gcil-push
117
121
  name: Run GitLab CI job with gcil (codestyle)
@@ -1,7 +1,28 @@
1
1
  # Changelog
2
2
 
3
+ <a name="4.2.0"></a>
4
+ ## [4.2.0](https://gitlab.com/RadianDevCore/tools/pre-commit-crocodile/compare/4.1.0...4.2.0) (2025-05-31)
5
+
6
+ ### ✨ Features
7
+
8
+ - **entrypoint:** avoid 'sleep' calls without user input TTY ([e3ecb29](https://gitlab.com/RadianDevCore/tools/pre-commit-crocodile/commit/e3ecb29f87fbc505d8eec491733809cc56a8a8a6))
9
+ - **pre-commit-config:** exclude '.md' files from 'trailing-whitespace' ([db98cc2](https://gitlab.com/RadianDevCore/tools/pre-commit-crocodile/commit/db98cc22984380e4f47f16b3f6cd425db98d57ad))
10
+
11
+ ### 🐛 Bug Fixes
12
+
13
+ - **pre-commit:** fix empty hooks with 'hooks: []' upon '--configure' ([3ef9cbe](https://gitlab.com/RadianDevCore/tools/pre-commit-crocodile/commit/3ef9cbe3cebcc9627bd4510a519b13ce41cdfd89))
14
+
15
+ ### ⚙️ Cleanups
16
+
17
+ - **pre-commit:** migrate to 'gcil' 10.2.0 ([257ec3a](https://gitlab.com/RadianDevCore/tools/pre-commit-crocodile/commit/257ec3ac7a0efcce32aa759c049a3977cc485537))
18
+
19
+ ### 🚀 CI
20
+
21
+ - **gitlab-ci:** remove unrequired 'stage: deploy' in 'pdf' job ([e07a8f2](https://gitlab.com/RadianDevCore/tools/pre-commit-crocodile/commit/e07a8f29b735772357cd1235d7d76a39345ec0f9))
22
+
23
+
3
24
  <a name="4.1.0"></a>
4
- ## [4.1.0](https://gitlab.com/RadianDevCore/tools/pre-commit-crocodile/compare/4.0.0...4.1.0) (2025-05-30)
25
+ ## [4.1.0](https://gitlab.com/RadianDevCore/tools/pre-commit-crocodile/compare/4.0.0...4.1.0) (2025-05-31)
5
26
 
6
27
  ### ✨ Features
7
28
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pre-commit-crocodile
3
- Version: 4.1.0
3
+ Version: 4.2.0
4
4
  Summary: Git hooks intended for developers using pre-commit
5
5
  Home-page: https://gitlab.com/RadianDevCore/tools/pre-commit-crocodile
6
6
  Author: Adrian DC
@@ -88,7 +88,7 @@ Git hooks intended for developers using [pre-commit](https://pre-commit.com/) an
88
88
 
89
89
  ## Preview
90
90
 
91
- ![preview.svg](https://gitlab.com/RadianDevCore/tools/pre-commit-crocodile/raw/4.1.0/docs/preview.svg)
91
+ ![preview.svg](https://gitlab.com/RadianDevCore/tools/pre-commit-crocodile/raw/4.2.0/docs/preview.svg)
92
92
 
93
93
  ---
94
94
 
@@ -40,7 +40,7 @@ Git hooks intended for developers using [pre-commit](https://pre-commit.com/) an
40
40
 
41
41
  ## Preview
42
42
 
43
- ![preview.svg](https://gitlab.com/RadianDevCore/tools/pre-commit-crocodile/raw/4.1.0/docs/preview.svg)
43
+ ![preview.svg](https://gitlab.com/RadianDevCore/tools/pre-commit-crocodile/raw/4.2.0/docs/preview.svg)
44
44
 
45
45
  ---
46
46
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pre-commit-crocodile
3
- Version: 4.1.0
3
+ Version: 4.2.0
4
4
  Summary: Git hooks intended for developers using pre-commit
5
5
  Home-page: https://gitlab.com/RadianDevCore/tools/pre-commit-crocodile
6
6
  Author: Adrian DC
@@ -88,7 +88,7 @@ Git hooks intended for developers using [pre-commit](https://pre-commit.com/) an
88
88
 
89
89
  ## Preview
90
90
 
91
- ![preview.svg](https://gitlab.com/RadianDevCore/tools/pre-commit-crocodile/raw/4.1.0/docs/preview.svg)
91
+ ![preview.svg](https://gitlab.com/RadianDevCore/tools/pre-commit-crocodile/raw/4.2.0/docs/preview.svg)
92
92
 
93
93
  ---
94
94
 
@@ -63,6 +63,10 @@ repos:
63
63
  - id: mixed-line-ending
64
64
  - id: trailing-whitespace
65
65
  args: ['--markdown-linebreak-ext=md']
66
+ exclude: >
67
+ (?x)(
68
+ .*.md$
69
+ )
66
70
 
67
71
  # Repository: pre-commit-hooks
68
72
  - repo: https://github.com/pre-commit/pygrep-hooks
@@ -118,7 +118,8 @@ class Entrypoint:
118
118
  print(' ')
119
119
  Platform.flush()
120
120
  Argcomplete.configure()
121
- sleep(2)
121
+ if Platform.IS_TTY_STDIN:
122
+ sleep(2)
122
123
 
123
124
  # Install commitizen completion
124
125
  if options.install and not Commitizen.configured():
@@ -130,7 +131,8 @@ class Entrypoint:
130
131
  Platform.flush()
131
132
  commitizen_file: str = Commitizen.configure()
132
133
  print(f'commitizen completion enabled in: {commitizen_file}')
133
- sleep(1)
134
+ if Platform.IS_TTY_STDIN:
135
+ sleep(1)
134
136
 
135
137
  # Bind specific configurations
136
138
  if options.config:
@@ -222,7 +224,8 @@ class Entrypoint:
222
224
  mode='w',
223
225
  ) as f:
224
226
  f.write(data)
225
- sleep(1)
227
+ if Platform.IS_TTY_STDIN:
228
+ sleep(1)
226
229
 
227
230
  # Configure unused hooks
228
231
  PreCommit.configure_unused_hooks(default=options.default)
@@ -337,7 +340,8 @@ class Entrypoint:
337
340
  f'{Colors.RESET}')
338
341
 
339
342
  # Delay user interactions
340
- sleep(5)
343
+ if Platform.IS_TTY_STDIN:
344
+ sleep(5)
341
345
 
342
346
  # Configure badges
343
347
  elif options.badges and configurations_files:
@@ -363,7 +367,8 @@ class Entrypoint:
363
367
  f'{Colors.RESET}')
364
368
 
365
369
  # Delay user interactions
366
- sleep(5)
370
+ if Platform.IS_TTY_STDIN:
371
+ sleep(5)
367
372
 
368
373
  # Enable hooks
369
374
  if options.enable:
@@ -3,7 +3,7 @@
3
3
  # Standard libraries
4
4
  from pathlib import Path
5
5
  from shutil import copyfile, move
6
- from typing import List
6
+ from typing import Dict, List
7
7
 
8
8
  # Components
9
9
  from ..features.git import Git
@@ -46,7 +46,7 @@ class PreCommit:
46
46
  'clean',
47
47
  ])
48
48
 
49
- # Configure unused hooks, pylint: disable=too-many-branches,too-many-statements
49
+ # Configure unused hooks, pylint: disable=too-many-branches,too-many-locals,too-many-statements
50
50
  @staticmethod
51
51
  def configure_unused_hooks(
52
52
  default: bool,
@@ -57,9 +57,14 @@ class PreCommit:
57
57
  configuration_moved: bool = False
58
58
  configuration_tmp: bool = False
59
59
  data_lines: List[str]
60
- hook_id: str
60
+ hook_id: str = '- id: '
61
61
  hook_offset: str
62
62
  hook_section: bool
63
+ hooks_element: str = 'hooks:'
64
+ hooks_empty_flag: Dict[int, bool]
65
+ hooks_ending: str
66
+ hooks_index: int
67
+ hooks_line: str
63
68
  hooks_unused: List[str] = []
64
69
 
65
70
  # Fake pre-commit configuration
@@ -118,36 +123,58 @@ class PreCommit:
118
123
 
119
124
  # Disable pre-commit unused hooks
120
125
  if hooks_unused:
126
+
127
+ # Parse pre-commit hooks
128
+ data_lines = []
129
+ hook_section = False
130
+ hooks_empty_flag = {}
131
+ hooks_index = -1
121
132
  with open(
122
133
  configuration_file,
123
134
  encoding='utf8',
124
135
  mode='r',
125
136
  ) as f:
126
- data_lines = f.readlines()
127
- with open(
128
- configuration_file,
129
- encoding='utf8',
130
- mode='w',
131
- ) as f:
132
- hook_section = False
133
- hook_id = '- id: '
134
- for line in data_lines:
137
+ for line in f.readlines():
135
138
  line_stripped = line.strip()
139
+
140
+ # Parse lines
136
141
  if not line_stripped:
137
- f.write(line)
142
+ data_lines.append(line)
138
143
  hook_section = False
144
+ elif line_stripped.startswith(hooks_element):
145
+ hooks_index = len(data_lines)
146
+ hooks_empty_flag[hooks_index] = True
147
+ data_lines.append(line)
139
148
  elif any(
140
149
  line_stripped == f'{hook_id}{hook}' for hook in hooks_unused):
141
- f.write(line.replace(hook_id, f'# {hook_id}'))
150
+ data_lines.append(line.replace(hook_id, f'# {hook_id}'))
142
151
  hook_offset = line[0:line.find(hook_id)]
143
152
  hook_section = True
144
153
  elif line_stripped.startswith(hook_id):
145
- f.write(line)
154
+ data_lines.append(line)
155
+ if hooks_index != -1:
156
+ hooks_empty_flag[hooks_index] = False
146
157
  hook_section = False
147
158
  elif hook_section:
148
- f.write(f'{hook_offset}# {line.lstrip()}')
159
+ data_lines.append(f'{hook_offset}# {line.lstrip()}')
149
160
  else:
150
- f.write(line)
161
+ data_lines.append(line)
162
+ hooks_index = -1
163
+
164
+ # Fix empty hooks
165
+ for index, empty in hooks_empty_flag.items():
166
+ if empty:
167
+ hooks_line = data_lines[index]
168
+ hooks_ending = hooks_line[len(hooks_line.rstrip('\r\n')):]
169
+ data_lines[index] = hooks_line.rstrip('\r\n') + ' []' + hooks_ending
170
+
171
+ # Write pre-commit hooks
172
+ with open(
173
+ configuration_file,
174
+ encoding='utf8',
175
+ mode='w',
176
+ ) as f:
177
+ f.writelines(data_lines)
151
178
 
152
179
  # Result
153
180
  return True