index : builder | |
Archlinux32 build system | gitolite user |
summaryrefslogtreecommitdiff |
-rwxr-xr-x | lib/common-functions | 160 |
diff --git a/lib/common-functions b/lib/common-functions index cecd27f..19d608c 100755 --- a/lib/common-functions +++ b/lib/common-functions @@ -9,109 +9,6 @@ if [ -z "${base_dir}" ]; then . '../lib/load-configuration' fi -# find_pkgbuilds package repository git_repository git_revision mod_git_revision -# find the PKGBUILD and modification of $package from $repository -# sets $PKGBUILD and $PKGBUILD_mod - -find_pkgbuilds() { - - local package="$1" - local repository="$2" - local git_repository="$3" - local git_revision="$4" - local mod_git_revision="$5" - - local repo_path - eval 'repo_path="${repo_paths__'"${git_repository}"'}"' - - if [ ! "$(git -C "${repo_path}" cat-file -t "${git_revision}" 2> /dev/null)" = "commit" ]; then - >&2 printf 'Repository %s does not contain commit %s, but it should.\n' \ - "${git_repository}" \ - "${git_revision}" - return 2 - fi - - if [ ! "$(git -C "${repo_paths__archlinux32}" cat-file -t "${mod_git_revision}" 2> /dev/null)" = "commit" ]; then - >&2 printf 'Repository archlinux32 does not contain commit %s, but it should.\n' \ - "${mod_git_revision}" - return 2 - fi - - PKGBUILD=$( - git -C "${repo_path}" archive "${git_revision}" -- "${package}/repos/${repository}-*/PKGBUILD" 2> /dev/null | \ - tar -t 2> /dev/null | \ - grep -- '/PKGBUILD$' | \ - grep -v -- '-i686/PKGBUILD$' | \ - grep -v -- '[-/]\(staging\|testing\|unstable\)-[^/]\+/PKGBUILD$' | \ - sort | \ - tail -n1 - ) - - PKGBUILD_mod=$( - git -C "${repo_paths__archlinux32}" archive "${mod_git_revision}" -- "${repository}/${package}/PKGBUILD" 2> /dev/null | \ - tar -t "${repository}/${package}/PKGBUILD" 2> /dev/null - ) || true - - if [ -z "${PKGBUILD}" ] && \ - [ -z "${PKGBUILD_mod}" ]; then - >&2 printf 'Neither PKGBUILD nor modification of PKGBUILD found for package "%s" from %s (%s), revisions %s and %s.\n' \ - "${package}" \ - "${repository}" \ - "${git_repository}" \ - "${git_revision}" \ - "${mod_git_revision}" - return 1 - fi - -} - -# find_repository_with_commit commit -# find the repository which has $commit - -find_repository_with_commit() { - - local repository - - for repository in ${repo_names}; do - # shellcheck disable=SC2016 - if [ "$(eval git -C "$(printf '"${repo_paths__%s}"' "${repository}")" cat-file -t '"$1"' 2> /dev/null)" = "commit" ]; then - echo "${repository}" - return 0 - fi - done - >&2 printf 'find_repository_with_commit: Cannot find repository with commit "%s"\n' "$1" - return 2 - -} - -# find_git_repository_to_package_repository repository -# find the git repository which tracks the package repository $repository - -find_git_repository_to_package_repository() { - - local repository - - repository=$( - # shellcheck disable=SC2016 - { - printf 'SELECT `git_repositories`.`name`' - printf ' FROM `git_repositories`' - mysql_join_git_repositories_upstream_repositories - printf ' WHERE `upstream_repositories`.`name`=from_base64("%s");\n' \ - "$(printf '%s' "$1" | base64 -w0)" - } | \ - mysql_run_query - ) - if [ -z "${repository}" ]; then - >&2 echo "can't find git repository with package repository '$1'" - exit 1 - else - echo "${repository}" - return 0 - fi - -} - # ls_master_mirror $path # list content of $path on the master mirror (via rsync) @@ -315,19 +212,6 @@ make_source_info() { local mod_git_revision="$4" local output="$5" - local git_repo - local PKGBUILD - local PKGBUILD_mod - - if ! git_repo=$(find_repository_with_commit "${git_revision}") || \ - [ -z "${git_repo}" ]; then - return 1 - fi - - if ! find_pkgbuilds "${package}" "${repository}" "${git_repo}" "${git_revision}" "${mod_git_revision}"; then - return 1 - fi - ( # the new shell is intentional local epoch @@ -336,12 +220,11 @@ make_source_info() { tmp_dir=$(mktemp -d "${work_dir}/tmp.make_source_info.XXXXXX") trap 'rm -rf --one-file-system "${tmp_dir}"' EXIT - extract_source_directory "${git_repo}" "${git_revision}" "${mod_git_revision}" "${tmp_dir}" '0' + extract_source_directory "${package}" "${repository}" "${git_revision}" "${mod_git_revision}" "${tmp_dir}" '0' { cd "${tmp_dir}" # some additional info - printf 'upstream_git_repository = %s\n' "${git_repo}" printf 'PKGBUILD = %s\n' "${PKGBUILD}" printf 'PKGBUILD_mod = %s\n' "${PKGBUILD_mod}" makepkg --printsrcinfo @@ -561,35 +444,38 @@ find_package_repository_to_package() { } -# extract_source_directory $git_repo $rev $mod_rev $output $sub_pkgrel +# extract_source_directory $pkgbase $repository $revision $mod_revision $output $sub_pkgrel # extract files found in the svn/git source directories # $PKGBUILD and $PKGBUILD_mod are expected to be set correctly extract_source_directory() { - local git_repo="$1" - # shellcheck disable=SC2034 - local rev="$2" - local mod_rev="$3" - local output="$4" - local sub_pkgrel="$5" + local pkgbase="$1" + local repository="$2" + local revision="$3" + local mod_revision="$4" + local output="$5" + local sub_pkgrel="$6" - if [ -n "${PKGBUILD}" ]; then - eval 'git -C "${repo_paths__'"${git_repo}"'}" archive "${rev}" -- "${PKGBUILD%/*}"' | \ - tar -x --strip-components=3 -C "${output}" + if [ -n "${rev}" ] \ + && [ "${rev}" != '0000000000000000000000000000000000000000' ]; then + # TODO: use cache, here + curl -LSs "https://gitlab.archlinux.org/archlinux/packaging/packages/${pkgbase}/-/archive/${revision}/${pkgbase}-${revision}.tar.gz" \ + |tar -xz -C "${output}" printf '\n' >> \ "${output}/PKGBUILD" fi - if [ -n "${PKGBUILD_mod}" ]; then - git -C "${repo_paths__archlinux32}" archive "${mod_rev}" -- "${PKGBUILD_mod%/*}" | \ - tar -x --overwrite --exclude 'PKGBUILD' --strip-components=2 -C "${output}" 2> /dev/null || \ - true - git -C "${repo_paths__archlinux32}" archive "${mod_rev}" -- "${PKGBUILD_mod}" | \ - tar -Ox "${PKGBUILD_mod}" >> \ - "${output}/PKGBUILD" - printf '\n' >> \ - "${output}/PKGBUILD" + if [ -n "${mod_revision}" ] \ + && [ "${mod_revision}" != '0000000000000000000000000000000000000000' ]; then + git -C "${repo_paths__archlinux32}" archive "${mod_revision}" -- "${repository}/${pkgbase}" \ + |tar -x --overwrite --exclude 'PKGBUILD' --strip-components=2 -C "${output}" 2> /dev/null \ + ||true + git -C "${repo_paths__archlinux32}" archive "${mod_revision}" -- "${repository}/${pkgbase}/PKGBUILD" \ + |tar -Ox "${PKGBUILD_mod}" \ + >>"${output}/PKGBUILD" + printf '\n' \ + >>"${output}/PKGBUILD" fi # we do not want to update pkgver, so we just undefine it |