Skip to content

Commit

Permalink
Add verification to yank
Browse files Browse the repository at this point in the history
  • Loading branch information
gregorybchris committed Jan 10, 2025
1 parent 7658678 commit 0769af0
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 9 deletions.
9 changes: 7 additions & 2 deletions src/myxa/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -181,15 +181,20 @@ def publish(


@app.command(help="Yank the current package from the index", hidden=True)
def yank(version: str, info: bool = False, debug: bool = False) -> None:
def yank(
version: str,
interactive: Annotated[bool, typer.Option("--interactive/--no-interactive")] = True,
info: bool = False,
debug: bool = False,
) -> None:
version_obj = Version.from_str(version)
set_logger_config(info, debug)
manager = Manager()
manager.printer.print_warning("yank is not a supported Myxa command!")
with error_handler(manager, debug=debug):
package = manager.load_package(DEFAULT_PACKAGE_FILEPATH)
index = load_index(manager)
manager.yank(package, version_obj, index)
manager.yank(package, version_obj, index, interactive=interactive)
save_index(manager, index)


Expand Down
27 changes: 24 additions & 3 deletions src/myxa/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -192,10 +192,31 @@ def publish(
f"Force published {package.info.name} version {candidate_version.to_str()} to index {index.name}"
)

def yank(self, package: Package, version: Version, index: Index) -> None:
def yank(
self,
package: Package,
version: Version,
index: Index,
interactive: bool = True,
) -> None:
self.printer.print_message(f"Yanking package {package.info.name}...")
index.remove_package(package, version)
self.printer.print_success(f"Yanked {package.info.name} version {version.to_str()} from index {index.name}")

if interactive:
while response := self.printer.input("Proceed to yank? \\[y/n] "):
if response.lower() == "n":
self.printer.print_success("Successfully aborted yanking")
break
if response.lower() == "y":
index.remove_package(package, version)
self.printer.print_success(
f"Yanked {package.info.name} version {version.to_str()} from index {index.name}"
)
break
else:
index.remove_package(package, version)
self.printer.print_success(
f"Force yanked {package.info.name} version {version.to_str()} from index {index.name}"
)

def set_version(self, package: Package, version: Version) -> None:
self.printer.print_message(f"Setting version of package {package.info.name} to {version.to_str()}...")
Expand Down
8 changes: 4 additions & 4 deletions tests/test_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@ def test_yank_earlier_version_removes_from_index(
manager.publish(euler_package, primary_index, interactive=False)
new_version = euler_package.info.version

manager.yank(euler_package, old_version, primary_index)
manager.yank(euler_package, old_version, primary_index, interactive=False)
assert old_version.to_str() not in primary_index.namespaces[euler_package.info.name].packages
assert new_version.to_str() in primary_index.namespaces[euler_package.info.name].packages

Expand All @@ -296,7 +296,7 @@ def test_yank_missing_package_raises_user_error(
) -> None:
version = euler_package.info.version
with pytest.raises(UserError, match=re.escape("Package euler not found in index primary, unable to yank")):
manager.yank(euler_package, version, primary_index)
manager.yank(euler_package, version, primary_index, interactive=False)

def test_yank_missing_version_raises_user_error(
self,
Expand All @@ -308,9 +308,9 @@ def test_yank_missing_version_raises_user_error(
manager.publish(euler_package, primary_index, interactive=False)
version = euler_package.info.version
manager.publish(euler_package, primary_index, interactive=False)
manager.yank(euler_package, version, primary_index)
manager.yank(euler_package, version, primary_index, interactive=False)
with pytest.raises(UserError, match=re.escape("Package euler version 0.1 not found in index primary")):
manager.yank(euler_package, version, primary_index)
manager.yank(euler_package, version, primary_index, interactive=False)

def test_ecosystem( # noqa: PLR0913
self,
Expand Down

0 comments on commit 0769af0

Please sign in to comment.