Pacman 패키지를 에뮬레이션하는 방법은 무엇입니까?

Pacman 패키지를 에뮬레이션하는 방법은 무엇입니까?

방금 Pacman 패키지의 파일 내용을 인쇄하는 스크립트를 완료했습니다.pkg-extract_original) 그런데 문제가 생겼어요최종 기능 테스트. 기본적으로 테스트가 있습니다.

def should_print_file_contents_from_package():
    # Given a dummy package which claims to own a filesystem package file
    package_name = "filesystem"
    file_path = "/etc/hosts"
    file_contents = "Hello World!"
    current_directory = dirname(__file__)
    package_directory = f"{current_directory}/package"
    run(
        ["makepkg", "--force"],
        check=True,
        cwd=package_directory,
        env={
            "PACKAGE_NAME": package_name,
            "FILE_PATH": file_path,
            "FILE_CONTENTS": file_contents,
        },
    )

    # Given the dummy package directory as cache
    environment = {"PACMAN_CONFIG": f"{DIRECTORY}/pacman.conf"}

    # When requesting a file from an installed package
    result = run(
        ["./pacman-package-file.bash", file_path],
        stdout=PIPE,
        check=True,
        env=environment,
    )

    # Then it should print the contents of the build file
    assert result.stdout == file_contents


 a dummy

, PKGBUILD 파일:

#!/usr/bin/env bash

# shellcheck disable=SC2034,SC2154
pkgname="$PACKAGE_NAME"
pkgbase="$PACKAGE_NAME"
version_and_release="$(pacman --query "$PACKAGE_NAME" | cut --delimiter=' ' --fields=2)"
pkgver="$(cut --delimiter='-' --fields=1 <<< "$version_and_release")"
pkgrel="$(cut --delimiter='-' --fields=2 <<< "$version_and_release")"
arch=(any)
package() {
    mkdir --parents "${pkgdir}$(dirname "$FILE_PATH")"
    printf '%s' "$FILE_CONTENTS" > "${pkgdir}${FILE_PATH}"
}

, 가상 pacman.conf:

[options]
CacheDir    = tests/package

그리고 쉘 스크립트:

#!/usr/bin/env bash
script_name="$(basename "$0")"

# Add extra pacman parameters if specified
pacman_command=('pacman')
if [[ -n "${PACMAN_CONFIG-}" ]]
then
    pacman_command+=("--config=${PACMAN_CONFIG}")
fi

owners_stderr="${working_directory}/owners_stderr"
mapfile -t owners < <("${pacman_command[@]}" --query --owns --quiet "$1" 2> "$owners_stderr")


owner="${owners[0]}"
package_url="$("${pacman_command[@]}" --sync --print "$owner")"
if [[ "${package_url::7}" != 'file://' ]]
then
    printf "%s: Package missing - download using \`pacman --sync --downloadonly %s\` and retry\n" "$script_name" "$owner" >&2
    exit 9
fi

문제는 구성이 가상 패키지 디렉터리를 가리키더라도 pacman --cachedir=tests/package --sync --print filesystem테스트/패키지의 파일 경로 대신 HTTPS URL이 인쇄된다는 것입니다.

pacman가상 패키지 파일의 경로를 인쇄 하려면 무엇이 더 필요합니까 ?

관련 정보