# pro-archman # lib/cmd/include.sh # "include" command # # 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 . use control use locale use output CMD_INCLUDE_CHANGES_FIELDS='Format Source Binary Version Architecture Platform Distribution Maintainer Changed-By Date Description Changes Files' cmd_include_source= cmd_include_version= cmd_include_distribution= cmd_include_files= cmd_include_feeds= cmd_include_main() { local changes= local feed= cmd_include_feeds='' for changes in "${@}"; do cmd_include "${changes}" done cmd_include_feeds="$(printf '%s' "${cmd_include_feeds}" | \ LC_COLLATE='C' sort | uniq)" for feed in ${cmd_include_feeds}; do cmd_generate_index "${feed}" done } cmd_include() { local changes="${1}" local component= local suite= local source_l= local pool_dir= local pool_dist_db= local archplats= local old_version= local size= local file= local pkg= local binver= local arch= local plat= local feed= parse_control "${changes}" cmd_include_changes_field \ "${CMD_INCLUDE_CHANGES_FIELDS}" '' component='main' suite="${conf_incoming_channel}/${cmd_include_distribution}" source_l="$(printf '%s\n' "${cmd_include_source}" | \ sed 's/\(.\).*/\1/')" pool_dir="pool/${component}/${source_l}/${cmd_include_source}" pool_dist_db="${archive}/${pool_dir}/.db" pool_dist_db="${pool_dist_db}/${cmd_include_distribution}" archplats='' if [ -f "${pool_dist_db}/version" ]; then old_version="$(cat "${pool_dist_db}/version")" if [ "x${old_version}" != "x${cmd_include_version}" ]; then # TODO: Remove ":" when cmd_remove is implemented. : cmd_remove "${cmd_include_distribution}" \ "${cmd_include_source}" fi fi mkdir -p "${pool_dist_db}" printf '%s\n' "${cmd_include_version}" \ >"${pool_dist_db}/version" info "$(get_msg 'cmd_include_including')" "${cmd_include_source}" \ "${cmd_include_version}" "${cmd_include_distribution}" while read -r size file; do if [ "x$(echo ${file})" = 'x' ]; then continue fi IFS='_' read -r pkg binver arch plat <<-EOF ${file%.opk} EOF printf '%s\n' "${pool_dir}/${file}" \ >>"${pool_dist_db}/files" cp -p "$(dirname "${changes}")/${file}" \ "${archive}/${pool_dir}/${file}" feed="${suite}/${component}/${plat}/${arch}" mkdir -p "${archive}/dists/${feed}/.db/" archplats="${archplats}${plat}/${arch}${LF}" cmd_include_feeds="${cmd_include_feeds}${feed}${LF}" tar -xzOf "${archive}/${pool_dir}/${file}" \ 'control.tar.gz' | tar -xzO './control' \ >"${archive}/dists/${feed}/.db/${pkg}.control" printf 'Filename: %s\nSize: %s\nMD5sum: %s\n\n' \ "../../../../../../${pool_dir}/${file}" \ "${size}" \ "$(md5sum "$(dirname "${changes}")/${file}" | \ sed 's/ .*$//')" \ >>"${archive}/dists/${feed}/.db/${pkg}.control" done <<-EOF ${cmd_include_files} EOF printf '%s' "${archplats}" | LC_COLLATE='C' sort | uniq \ >"${pool_dist_db}/archplat" } cmd_include_changes_field() { local name="${1}" local value="${2}" case "${name}" in 'Source') cmd_include_source="${value}" ;; 'Version') cmd_include_version="${value}" ;; 'Distribution') cmd_include_distribution="${value}" ;; 'Files') cmd_include_files="${value}" ;; esac }