Skip to content

Commit e465e6c

Browse files
committed
fix: use imperative mood in update summary
Example: "add tool v1.0.0" instead of "added tool v1.0.0"
1 parent 0ed935f commit e465e6c

File tree

3 files changed

+48
-38
lines changed

3 files changed

+48
-38
lines changed

src/ops2deb/parser.py

+16-7
Original file line numberDiff line numberDiff line change
@@ -200,9 +200,13 @@ def render_fetch_url(
200200
url = self.fetch if isinstance(self.fetch, str) else self.fetch.url
201201
return self.render_string(url, version=version, architecture=architecture)
202202

203-
def render_fetch_urls(self) -> list[str]:
203+
def render_fetch_urls(
204+
self, version: str | None = None, architecture: str | None = None
205+
) -> list[str]:
204206
urls = []
205-
for architecture, version in product(self.architectures(), self.versions()):
207+
architectures = [architecture] if architecture else self.architectures()
208+
versions = [version] if version else self.versions()
209+
for architecture, version in product(architectures, versions):
206210
if url := self.render_fetch_url(version=version, architecture=architecture):
207211
urls.append(url)
208212
return urls
@@ -224,10 +228,7 @@ class ConfigurationFile:
224228
yaml: YAML
225229
raw_blueprints: list[OrderedDict[str, Any]]
226230
blueprints: list[Blueprint]
227-
228-
def save(self) -> None:
229-
with self.path.open("w") as output:
230-
self.yaml.dump(self.content, output)
231+
tainted: bool = False
231232

232233

233234
def get_default_lockfile_path(configuration_path: Path) -> Path:
@@ -280,6 +281,13 @@ def load_configuration_file(configuration_path: Path) -> ConfigurationFile:
280281
)
281282

282283

284+
def save_configuration_file(configuration_file: ConfigurationFile) -> None:
285+
if configuration_file.tainted is False:
286+
return
287+
with configuration_file.path.open("w") as output:
288+
configuration_file.yaml.dump(configuration_file.content, output)
289+
290+
283291
def load_configuration_files(
284292
configurations_search_pattern: str,
285293
) -> list[ConfigurationFile]:
@@ -322,11 +330,12 @@ def get_blueprint_configuration_file(self, blueprint: Blueprint) -> Configuratio
322330
def get_raw_blueprint(self, blueprint: Blueprint) -> OrderedDict[str, Any]:
323331
metadata = self.metadatas[blueprint.uid]
324332
configuration_file = metadata.configuration_file
333+
configuration_file.tainted = True
325334
return configuration_file.raw_blueprints[blueprint.index]
326335

327336
def save(self) -> None:
328337
for configuration in self.configuration_files:
329-
configuration.save()
338+
save_configuration_file(configuration)
330339
for lock in self.lock_files:
331340
lock.save()
332341

src/ops2deb/updater.py

+26-26
Original file line numberDiff line numberDiff line change
@@ -185,13 +185,6 @@ async def _find_latest_version(
185185
raise Ops2debUpdaterError(error)
186186

187187

188-
def _blueprint_fetch_urls(blueprint: Blueprint, version: str | None = None) -> list[str]:
189-
urls: list[str] = []
190-
for architecture in blueprint.architectures():
191-
urls.append(str(blueprint.render_fetch_url(version, architecture)))
192-
return urls
193-
194-
195188
async def _find_latest_versions(
196189
blueprints: list[Blueprint],
197190
) -> tuple[list[LatestRelease], list[Ops2debError]]:
@@ -234,7 +227,7 @@ def find_latest_releases(
234227
releases_by_id: dict[int, LatestRelease] = {}
235228
for i, release in enumerate(releases):
236229
releases_by_id[i] = release
237-
for url in _blueprint_fetch_urls(release.blueprint, release.version):
230+
for url in release.blueprint.render_fetch_urls(release.version):
238231
fetcher.add_task(url, data=i)
239232
results, failures = fetcher.run_tasks()
240233

@@ -289,14 +282,35 @@ def _update_configuration(
289282
return removed_versions
290283

291284

292-
def _update_lockfile(
285+
def _remove_versions_from_lockfile(
293286
configuration: Resources, release: LatestRelease, removed_versions: list[str]
294287
) -> None:
295288
blueprint = release.blueprint
296289
lock = configuration.get_blueprint_lock(blueprint)
297290
for version in removed_versions:
298-
lock.remove(_blueprint_fetch_urls(blueprint, version))
299-
_blueprint_fetch_urls(blueprint, release.version)
291+
lock.remove(blueprint.render_fetch_urls(version))
292+
293+
294+
def _update_configurations(
295+
resources: Resources, max_versions: int, releases: list[LatestRelease]
296+
) -> list[str]:
297+
summary: list[str] = []
298+
299+
for release in releases:
300+
removed_versions = _update_configuration(resources, release, max_versions)
301+
if max_versions == 1:
302+
lines = [
303+
f"Update {release.blueprint.name} from "
304+
f"v{release.blueprint.version} to v{release.version}"
305+
]
306+
else:
307+
lines = [f"Add {release.blueprint.name} v{release.version}"]
308+
for version in removed_versions:
309+
lines.append(f"Remove {release.blueprint.name} v{version}")
310+
_remove_versions_from_lockfile(resources, release, removed_versions)
311+
summary.extend(lines)
312+
313+
return summary
300314

301315

302316
def update(
@@ -311,21 +325,7 @@ def update(
311325
logger.title("Looking for new releases...")
312326
releases, errors = find_latest_releases(resources, fetcher, skip_names, only_names)
313327

314-
summary: list[str] = []
315-
316-
for release in releases:
317-
removed_versions = _update_configuration(resources, release, max_versions)
318-
if max_versions == 1:
319-
line = (
320-
f"Updated {release.blueprint.name} from "
321-
f"{release.blueprint.version} to {release.version}"
322-
)
323-
else:
324-
line = f"Added {release.blueprint.name} v{release.version}"
325-
if removed_versions:
326-
line += f" and removed {', '.join([f'v{v}' for v in removed_versions])}"
327-
_update_lockfile(resources, release, removed_versions)
328-
summary.append(line)
328+
summary = _update_configurations(resources, max_versions, releases)
329329

330330
if not releases:
331331
logger.info("Did not found any updates")

tests/test_ops2deb.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -584,7 +584,7 @@ def test_update__appends_new_version_to_version_matrix_when_max_versions_is_not_
584584
raw_blueprints = load_configuration_file(configuration_path).raw_blueprints
585585
lock = LockFile(lockfile_path)
586586
sha256 = "f1be6dd36b503641d633765655e81cdae1ff8f7f73a2582b7468adceb5e212a9"
587-
assert "Added great-app v1.1.1" in summary_path.read_text()
587+
assert "Add great-app v1.1.1" in summary_path.read_text()
588588
assert "great-app can be bumped from 1.1.0 to 1.1.1" in result.stdout
589589
assert raw_blueprints[0]["matrix"]["versions"] == ["1.0.0", "1.0.1", "1.1.0", "1.1.1"]
590590
assert lock.sha256("http://testserver/1.1.1/great-app.tar.gz") == sha256
@@ -619,7 +619,8 @@ def test_update__adds_new_version_and_remove_old_versions_when_max_versions_is_r
619619
# Then
620620
raw_blueprints = load_configuration_file(configuration_path).raw_blueprints
621621
assert raw_blueprints[0]["matrix"]["versions"] == ["1.1.0", "1.1.1"]
622-
assert "Added great-app v1.1.1 and removed v1.0.0, v1.0.1" in summary_path.read_text()
622+
assert "Add great-app v1.1.1" in summary_path.read_text()
623+
assert "Remove great-app v1.0.0\nRemove great-app v1.0.1" in summary_path.read_text()
623624
assert "http://testserver/1.0.0/great-app.tar.gz" not in lockfile_path.read_text()
624625
assert "http://testserver/1.0.1/great-app.tar.gz" not in lockfile_path.read_text()
625626
assert "http://testserver/1.1.0/great-app.tar.gz" in lockfile_path.read_text()
@@ -652,7 +653,7 @@ def test_update__replaces_version_with_versions_matrix_when_max_versions_is_supe
652653
raw_blueprints = load_configuration_file(configuration_path).raw_blueprints
653654
assert result.exit_code == 0
654655
assert raw_blueprints[0]["matrix"]["versions"] == ["1.0.0", "1.1.1"]
655-
assert "Added great-app v1.1.1" in summary_path.read_text()
656+
assert "Add great-app v1.1.1" in summary_path.read_text()
656657
assert "http://testserver/1.0.0/great-app.tar.gz" in lockfile_path.read_text()
657658
assert "http://testserver/1.1.1/great-app.tar.gz" in lockfile_path.read_text()
658659

@@ -686,8 +687,8 @@ def test_update__creates_a_summary_of_updated_blueprints_when_called_with_output
686687
# Then
687688
summary_lines_set = {
688689
"",
689-
"Updated great-app from 1.0.0 to 1.1.1",
690-
"Updated super-app from 1.0.0 to 1.1.1",
690+
"Update great-app from v1.0.0 to v1.1.1",
691+
"Update super-app from v1.0.0 to v1.1.1",
691692
}
692693
assert set(summary_path.read_text().split("\n")) == summary_lines_set
693694

0 commit comments

Comments
 (0)