hg is *so fucking slow* omfw Change-Id: I0f4d1d2a546a75f965ff017c9451fb1d441990b1
129 lines
3.9 KiB
Python
129 lines
3.9 KiB
Python
from testlib.fixtures.nix import Nix
|
|
from testlib.fixtures.command import Command, CommandResult
|
|
from testlib.fixtures.file_helper import with_files
|
|
from testlib.fixtures.env import ManagedEnv
|
|
from testlib.environ import environ
|
|
from pathlib import Path
|
|
import pytest
|
|
from .common import simple_flake, dependent_flake
|
|
from collections.abc import Callable
|
|
import glob
|
|
|
|
system = environ.get("system")
|
|
|
|
files = {"flake-hg1": simple_flake(), "flake-hg2": dependent_flake()}
|
|
|
|
type Hg = Callable[..., CommandResult]
|
|
|
|
|
|
@pytest.fixture
|
|
def hg(env: ManagedEnv, command: Callable[..., Command]) -> Hg:
|
|
env.path.add_program("hg")
|
|
|
|
def wrap(*args, **kwargs) -> CommandResult:
|
|
return command(["hg", *args], **kwargs).run().ok()
|
|
|
|
return wrap
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def common_init(nix: Nix, files: Path, hg: Hg):
|
|
nix.settings.add_xp_feature("nix-command", "flakes")
|
|
nix.settings.flake_registry = str(nix.env.dirs.test_root / "registry.json")
|
|
|
|
hg("init", files / "flake-hg1")
|
|
nix.nix(
|
|
[
|
|
"registry",
|
|
"add",
|
|
"--registry",
|
|
nix.settings.flake_registry,
|
|
"flake1",
|
|
f"hg+file://{files}/flake-hg1",
|
|
]
|
|
).run().ok()
|
|
|
|
hg("init", files / "flake-hg2")
|
|
|
|
hg("add", *glob.glob(str(files / "flake-hg1/*"))) # noqa PTH207: Path.glob *does the wrong thing*
|
|
hg(
|
|
"commit",
|
|
"--config",
|
|
"ui.username=foobar@example.org",
|
|
files / "flake-hg1",
|
|
"-m",
|
|
"Initial commit",
|
|
)
|
|
|
|
hg("add", files / "flake-hg2/flake.nix")
|
|
hg(
|
|
"commit",
|
|
"--config",
|
|
"ui.username=foobar@example.org",
|
|
files / "flake-hg2",
|
|
"-m",
|
|
"Initial commit",
|
|
)
|
|
|
|
|
|
@with_files(files)
|
|
class TestFlakeHg:
|
|
def test_build(self, nix: Nix, files: Path):
|
|
nix.nix(["build", f"hg+file://{files}/flake-hg2"]).run().ok()
|
|
assert (nix.env.dirs.home / "result/hello").exists()
|
|
|
|
def test_metadata_dirty(self, nix: Nix, files: Path):
|
|
metadata = (
|
|
nix.nix(["flake", "metadata", "--json", f"hg+file://{files}/flake-hg2"]).run().json()
|
|
)
|
|
assert "revision" not in metadata
|
|
|
|
def test_eval(self, nix: Nix, files: Path):
|
|
result = nix.nix(["eval", f"hg+file://{files}/flake-hg2#expr"]).run().ok()
|
|
assert result.stdout_s == "123\n"
|
|
|
|
def test_eval_no_dirty(self, nix: Nix, files: Path):
|
|
result = (
|
|
nix.nix(["eval", f"hg+file://{files}/flake-hg2#expr", "--no-allow-dirty"])
|
|
.run()
|
|
.expect(1)
|
|
)
|
|
assert "is unclean" in result.stderr_s
|
|
|
|
class TestLocked:
|
|
@pytest.fixture(autouse=True)
|
|
def init(self, nix: Nix, files: Path, hg: Hg):
|
|
nix.nix(["flake", "lock", f"hg+file://{files}/flake-hg2"]).run().ok()
|
|
hg(
|
|
"commit",
|
|
"--config",
|
|
"ui.username=foobar@example.org",
|
|
files / "flake-hg2",
|
|
"-m",
|
|
"Add lock file",
|
|
)
|
|
|
|
def test_metadata_clean(self, nix: Nix, files: Path):
|
|
metadata = (
|
|
nix.nix(["flake", "metadata", "--json", f"hg+file://{files}/flake-hg2"])
|
|
.run()
|
|
.json()
|
|
)
|
|
assert "revision" in metadata
|
|
|
|
def test_metadata_refresh(self, nix: Nix, files: Path):
|
|
metadata = (
|
|
nix.nix(
|
|
["flake", "metadata", "--json", f"hg+file://{files}/flake-hg2", "--refresh"]
|
|
)
|
|
.run()
|
|
.json()
|
|
)
|
|
assert "revision" in metadata
|
|
assert metadata["revCount"] == 2
|
|
|
|
@pytest.mark.parametrize("arg", ["--no-registries", "--no-use-registries"])
|
|
def test_build(self, nix: Nix, files: Path, arg: str):
|
|
nix.nix(["build", f"hg+file://{files}/flake-hg2", arg, "--no-allow-dirty"]).run().ok()
|
|
assert (nix.env.dirs.home / "result/hello").exists()
|