summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/feed.sh90
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
+}