# 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= for changes in "${@}"; do cmd_include "${changes}" done for feed in "${cmd_include_feeds}"; do # TODO: Remove ":" when cmd_generate_index is implemented. : cmd_generate_index "${feed}" done } cmd_include() { local changes="${1}" local archive= local component= local suite= local source_l= local pool_dir= local pool_dist_db= local size= local file= local pkg= local binver= local arch= local plat= local feed= archive='archive' 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}" cmd_include_feeds='' if [ -f "${pool_dist_db}/version" \ -a "x$(cat "${pool_dist_db}/version")" \ != "x${cmd_include_version}" ]; then # TODO: Remove ":" when cmd_remove is implemented. : cmd_remove "${cmd_include_distribution}" \ "${cmd_include_source}" 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/" cmd_include_feeds="${cmd_include_feeds}${plat}/${arch}${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' \ "../../../../../../${pool_dir}/${file}" \ "${size}" \ "$(md5sum "$(dirname "${changes}")/${file}" | \ sed 's/ .*$//')" \ >>"${archive}/dists/${feed}/.db/${pkg}.control" done <<-EOF ${cmd_include_files} EOF printf '%s' "${cmd_include_feeds}" | LC_COLLATE='C' sort | uniq \ >"${pool_dist_db}/feeds" } 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 }