Ejemplo n.º 1
0
def test_snapshot_resolve_alias_cycle_found(swh_storage):
    alias1_name = b"alias_1"
    alias2_name = b"alias_2"
    alias3_name = b"alias_3"
    alias4_name = b"alias_4"

    alias1_branch_info = SnapshotBranch(target=alias2_name,
                                        target_type=TargetType.ALIAS)
    alias2_branch_info = SnapshotBranch(target=alias3_name,
                                        target_type=TargetType.ALIAS)
    alias3_branch_info = SnapshotBranch(target=alias4_name,
                                        target_type=TargetType.ALIAS)
    alias4_branch_info = SnapshotBranch(target=alias2_name,
                                        target_type=TargetType.ALIAS)

    snapshot = Snapshot(
        branches={
            alias1_name: alias1_branch_info,
            alias2_name: alias2_branch_info,
            alias3_name: alias3_branch_info,
            alias4_name: alias4_branch_info,
        })
    swh_storage.snapshot_add([snapshot])

    assert snapshot_resolve_alias(swh_storage, snapshot.id,
                                  alias1_name) is None
Ejemplo n.º 2
0
def test_snapshot_resolve_alias_dangling_branch(swh_storage):
    dangling_branch_name = b"dangling_branch"
    alias_name = b"rev_alias"

    alias_branch = SnapshotBranch(target=dangling_branch_name,
                                  target_type=TargetType.ALIAS)

    snapshot = Snapshot(branches={
        dangling_branch_name: None,
        alias_name: alias_branch,
    })
    swh_storage.snapshot_add([snapshot])

    assert snapshot_resolve_alias(swh_storage, snapshot.id, alias_name) is None
Ejemplo n.º 3
0
def test_snapshot_resolve_alias(swh_storage, sample_data):
    rev_branch_name = b"revision_branch"
    rel_branch_name = b"release_branch"
    rev_alias1_name = b"rev_alias1"
    rev_alias2_name = b"rev_alias2"
    rev_alias3_name = b"rev_alias3"
    rel_alias_name = b"rel_alias"
    rev_branch_info = SnapshotBranch(
        target=sample_data.revisions[0].id,
        target_type=TargetType.REVISION,
    )
    rel_branch_info = SnapshotBranch(
        target=sample_data.releases[0].id,
        target_type=TargetType.RELEASE,
    )
    rev_alias1_branch_info = SnapshotBranch(target=rev_branch_name,
                                            target_type=TargetType.ALIAS)
    rev_alias2_branch_info = SnapshotBranch(target=rev_alias1_name,
                                            target_type=TargetType.ALIAS)

    rev_alias3_branch_info = SnapshotBranch(target=rev_alias2_name,
                                            target_type=TargetType.ALIAS)
    rel_alias_branch_info = SnapshotBranch(target=rel_branch_name,
                                           target_type=TargetType.ALIAS)

    snapshot = Snapshot(
        branches={
            rev_branch_name: rev_branch_info,
            rel_branch_name: rel_branch_info,
            rev_alias1_name: rev_alias1_branch_info,
            rev_alias2_name: rev_alias2_branch_info,
            rev_alias3_name: rev_alias3_branch_info,
            rel_alias_name: rel_alias_branch_info,
        })
    swh_storage.snapshot_add([snapshot])

    for alias_name, expected_branch in (
        (rev_alias1_name, rev_branch_info),
        (
            rev_alias2_name,
            rev_branch_info,
        ),
        (
            rev_alias3_name,
            rev_branch_info,
        ),
        (rel_alias_name, rel_branch_info),
    ):
        assert (snapshot_resolve_alias(swh_storage, snapshot.id,
                                       alias_name) == expected_branch)
Ejemplo n.º 4
0
def lookup_snapshot_alias(snapshot_id: str,
                          alias_name: str) -> Optional[Dict[str, Any]]:
    """Try to resolve a branch alias in a snapshot.

    Args:
        snapshot_id: hexadecimal representation of a snapshot id
        alias_name: name of the branch alias to resolve

    Returns:
        Target branch information or None if the alias does not exist
        or target a dangling branch.
    """
    resolved_alias = snapshot_resolve_alias(storage, _to_sha1_bin(snapshot_id),
                                            alias_name.encode())
    return (converters.from_swh(resolved_alias.to_dict(), hashess={"target"})
            if resolved_alias is not None else None)
Ejemplo n.º 5
0
def test_snapshot_resolve_alias_missing_branch(swh_storage):
    missing_branch_name = b"missing_branch"
    alias_name = b"rev_alias"

    alias_branch = SnapshotBranch(target=missing_branch_name,
                                  target_type=TargetType.ALIAS)

    snapshot = Snapshot(
        id=b"42" * 10,
        branches={
            alias_name: alias_branch,
        },
    )
    swh_storage.snapshot_add([snapshot])

    assert snapshot_resolve_alias(swh_storage, snapshot.id, alias_name) is None
Ejemplo n.º 6
0
def test_snapshot_resolve_aliases_no_aliases(swh_storage):
    snapshot = Snapshot(branches={})
    swh_storage.snapshot_add([snapshot])

    assert snapshot_resolve_alias(swh_storage, snapshot.id, b"HEAD") is None
Ejemplo n.º 7
0
def test_snapshot_resolve_aliases_unknown_snapshot(swh_storage):
    assert snapshot_resolve_alias(swh_storage, b"foo", b"HEAD") is None