-
Notifications
You must be signed in to change notification settings - Fork 0
/
versionise_files.py
30 lines (23 loc) · 1.24 KB
/
versionise_files.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from dataclasses import dataclass
from pathlib import Path
from gitversioniser.domain.versioniser.routines.file_updater.abstract import RoutineFileUpdater
from gitversioniser.domain.versioniser.routines.file_updater.utils.updated_files import UpdatedFiles
from gitversioniser.domain.versioniser.utils.versions import Versions
@dataclass
class VersioniseFiles(RoutineFileUpdater):
def run(self, versions: Versions) -> UpdatedFiles:
return UpdatedFiles.init_normalize([
self._replace_version(self._find_file(filename), versions) for filename in self.config.versioned_files
])
def _find_file(self, filename: str) -> Path:
try:
return sorted(Path(self.config.target_repository_path).glob(f'**/{filename}'))[0]
except IndexError as error:
raise FileNotFoundError(f'File {filename} not found in the repository.') from error
@staticmethod
def _replace_version(filepath: Path, versions: Versions) -> Path | None:
with filepath.open('r') as file:
old_content = file.read()
with filepath.open('w') as file:
file.write(old_content.replace(str(versions.old), str(versions.new)))
return filepath if str(versions.old) in old_content else None