diff options
Diffstat (limited to 'lib/index.sh')
-rw-r--r-- | lib/index.sh | 200 |
1 files changed, 0 insertions, 200 deletions
diff --git a/lib/index.sh b/lib/index.sh deleted file mode 100644 index 8749897..0000000 --- a/lib/index.sh +++ /dev/null @@ -1,200 +0,0 @@ -# pro-archman -# lib/index.sh -# Functions for working with package feed indices -# -# Copyright (C) 2013 Patrick "P. J." McDermott -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see <http://www.gnu.org/licenses/>. - -[ "x${_INDEX_SM+set}" = 'xset' ] && return 0 -_INDEX_SM=1 - -use locale -use output -use dir - -feed_add_package() -{ - local chan="${1}" - local dist="${2}" - local arch="${3}" - local plat="${4}" - local sect="${5}" - local pkg="${6}" - local size="${7}" - local file="${8}" - local pkg_hash= - local feed_hash_idx= - local old_dir= - - info_v "$(get_msg 'feed_adding')" "${pkg}" \ - "${chan}" "${dist}" "${arch}" "${plat}" "${sect}" - - pkg_hash="$(hash_name "${pkg}")" - - # Add package metadata to feed hash index. - feed_hash_idx="${base_dir}/feeds/${chan}/${dist}/${arch}/${plat}" - feed_hash_idx="${feed_hash_idx}/${sect}/.db/${pkg_hash}" - mkdir -p "${feed_hash_idx}/info" - tar -xzOf "${base_dir}/${file}" 'control.tar.gz' | \ - tar -xzO './control' >"${feed_hash_idx}/info/${pkg}.control" - printf 'Filename: %s\nSize: %s\nMD5sum: %s\nSHA256sum: %s\n\n' \ - "../../../../../../${file}" "${size}" \ - "$(md5sum "${base_dir}/${file}" | sed 's/ .*$//')" \ - "$(sha256sum "${base_dir}/${file}" | sed 's/ .*$//')" \ - >>"${feed_hash_idx}/info/${pkg}.control" - - # Mark feed index fragment as outdated. - old_dir="${base_dir}/feeds/.db/${chan}_${dist}/${arch}_${plat}" - old_dir="${old_dir}/${sect}" - mkdir -p "${old_dir}" - >"${old_dir}/${pkg_hash}" - - return 0 -} - -feed_remove_package() -{ - local chan="${1}" - local dist="${2}" - local arch="${3}" - local plat="${4}" - local sect="${5}" - local pkg="${6}" - local pkg_hash= - local feed_hash_idx= - local old_dir= - - info_v "$(get_msg 'feed_removing')" "${pkg}" \ - "${chan}" "${dist}" "${arch}" "${plat}" "${sect}" - - pkg_hash="$(hash_name "${pkg}")" - - # Remove package metadata from feed hash index. - feed_hash_idx="${base_dir}/feeds/${chan}/${dist}/${arch}/${plat}" - feed_hash_idx="${feed_hash_idx}/${sect}/.db/${pkg_hash}" - rm -f "${feed_hash_idx}/info/${pkg}.control" - try_rmdir "${feed_hash_idx}/info" - - # Mark feed index fragment as outdated. - old_dir="${base_dir}/feeds/.db/${chan}_${dist}/${arch}_${plat}" - old_dir="${old_dir}/${sect}" - mkdir -p "${old_dir}" - >"${old_dir}/${pkg_hash}" - - return 0 -} - -update_feeds() -{ - local suite_dirent= - local chan= - local dist= - local suite= - local archplat_dirent= - local arch= - local plat= - local archplat= - local sect_dirent= - local sect= - local manifest_entry= - local hash_dirent= - local idx= - - info_v "$(get_msg 'updating_feeds')" - - # For each suite: - for suite_dirent in "${base_dir}/feeds/.db/"*_*/; do - if [ ! -d "${suite_dirent}" ]; then - continue - fi - chan="${suite_dirent%/}" - chan="${chan##*/}" - dist="${chan##*_}" - chan="${chan%_*}" - suite="${base_dir}/feeds/${chan}/${dist}" - exec 3>"${suite}/Manifest~" - # For each archplat: - for archplat_dirent in "${suite_dirent}/"*_*/; do - if [ ! -d "${archplat_dirent}" ]; then - continue - fi - arch="${archplat_dirent%/}" - arch="${arch##*/}" - plat="${arch##*_}" - arch="${arch%_*}" - archplat="${suite}/${arch}/${plat}" - # For each section: - for sect_dirent in "${archplat_dirent}/"*/; do - if [ ! -d "${sect_dirent}" ]; then - continue - fi - sect="${sect_dirent%/}" - sect="${sect##*/}" - info_v "$(get_msg 'updating_feed')" \ - "${chan}" "${dist}" \ - "${arch}" "${plat}" "${sect}" - manifest_entry="${arch}/${plat}/${sect}" - sect="${archplat}/${sect}" - # For each package name hash: - for hash_dirent in "${sect_dirent}/"*; do - if [ ! -f "${hash_dirent}" ]; then - continue - fi - idx="${sect}/.db/${hash_dirent##*/}" - # Ensure there are still packages here. - if [ -d "${idx}/info" ]; then - cat "${idx}/info/"*.control \ - >"${idx}/Packages" - else - rm -f "${idx}/Packages" - rmdir "${idx}" - fi - rm -f "${hash_dirent}" - done - # Ensure there are still packages here. - if ! try_rmdir "${sect}/.db"; then - cat "${sect}/.db/"*/Packages \ - >"${sect}/Packages~" - mv "${sect}/Packages~" \ - "${sect}/Packages" - if ${conf_gzip}; then - gzip -9c "${sect}/Packages" \ - >"${sect}/Packages.gz" - fi - printf '%s\n' "${manifest_entry}" >&3 - else - rm -f "${sect}/Packages" \ - "${sect}/Packages.gz" - fi - rmdir "${sect_dirent}" - try_rmdir "${sect}" - done - rmdir "${archplat_dirent}" - try_rmdir "${archplat}" - try_rmdir "${archplat%/*}" - done - rmdir "${suite_dirent}" - exec 3>&- - if [ -s "${suite}/Manifest~" ]; then - mv "${suite}/Manifest~" "${suite}/Manifest" - else - rm -f "${suite}/Manifest~" "${suite}/Manifest" - rmdir "${suite}" - rmdir "${suite%/*}" - fi - done - - return 0 -} |