22import shutil as _shutil
33import functools as _functools
44import re as _re
5+ import stat as _stat
56
67import controlman
78from versionman .pep440_semver import PEP440SemVer as _PEP440SemVer
@@ -254,9 +255,13 @@ def apply_changes(self) -> None:
254255 for generated_file in generated_files :
255256 filepath_abs = self ._path_root / generated_file .path if generated_file .path else None
256257 filepath_before_abs = self ._path_root / generated_file .path_before if generated_file .path_before else None
257- if generated_file .change is DynamicFileChangeType .REMOVED :
258+ if generated_file .change in (
259+ DynamicFileChangeType .REMOVED ,
260+ DynamicFileChangeType .MOVED ,
261+ DynamicFileChangeType .MOVED_MODIFIED
262+ ):
258263 filepath_before_abs .unlink (missing_ok = True )
259- elif generated_file .change in (
264+ if generated_file .change in (
260265 DynamicFileChangeType .ADDED ,
261266 DynamicFileChangeType .MODIFIED ,
262267 DynamicFileChangeType .MOVED_MODIFIED ,
@@ -265,9 +270,8 @@ def apply_changes(self) -> None:
265270 filepath_abs .parent .mkdir (parents = True , exist_ok = True )
266271 with open (filepath_abs , "w" ) as f :
267272 f .write (f"{ generated_file .content .strip ()} \n " )
268- if generated_file .change in (DynamicFileChangeType .MOVED , DynamicFileChangeType .MOVED_MODIFIED ):
269- filepath_before_abs .unlink (missing_ok = True )
270-
273+ if generated_file .executable :
274+ filepath_abs .chmod (filepath_abs .stat ().st_mode | _stat .S_IXUSR | _stat .S_IXGRP | _stat .S_IXOTH )
271275 self ._apply_duplicates ()
272276 with _logger .sectioning ("CCA Synchronization Hooks" ):
273277 self ._hook_manager .generate (const .FUNCNAME_CC_HOOK_SYNC )
0 commit comments