diff options
-rw-r--r-- | lib/feed.sh | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/lib/feed.sh b/lib/feed.sh new file mode 100644 index 0000000..7b8d639 --- /dev/null +++ b/lib/feed.sh @@ -0,0 +1,90 @@ +# ProteanOS Development Kit +# lib/feed.sh +# Functions for handling feed index files +# +# 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${_FEED_SM+set}" = 'xset' ] && return 0 +_FEED_SM=1 + +use fd + +feed_download() +{ + local feed_index="${1}" + + wget -O - "${feed_index}" + + return 0 +} + +feed_find_pkgs() +{ + local deps_file="${1}" + local line= + local deps_fd= + local pkg= + local deps= + local all_deps= + local dep= + local pkgs= + local new_deps= + + fopen "${1}" 'w' + deps_fd=${FD} + + pkg='' + all_deps='' + IFS='' + while read -r line; do + unset IFS + if [ "x${line}" != 'x' ]; then + case "${line}" in + 'Package:'*) + pkg="${line#Package:}" + pkg="${pkg## }" + ;; + *'Depends:'*) + deps="${line#*Depends:}" + deps="${deps## }" + all_deps="${all_deps}${deps}, " + ;; + esac + else + if profile_include_pkg "${pkg}"; then + pkgs="${pkgs} ${pkg}" + fi + new_deps='' + IFS=", ${HT}${LF}" + for dep in ${all_deps}; do + unset IFS + # Trim off " |.*$" and " (.*$" (versions and + # disjunctions). + dep="$(printf '%s ' ${dep} | cut -d ' ' -f 1)" + new_deps="${new_deps} ${dep}" + done + unset IFS + printf '%s%s\n' "${pkg}" "${new_deps}" >&${deps_fd} + pkg='' + all_deps='' + fi + done + unset IFS + + fclose ${deps_fd} + + return 0 +} |