summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorP. J. McDermott <pjm@nac.net>2013-07-28 17:00:09 (EDT)
committer P. J. McDermott <pjm@nac.net>2013-07-28 17:00:09 (EDT)
commita2f287b0ba963d64a25b016e679af0e013242f43 (patch)
tree26befe46ffc54909147968bcb83cc8e0aad0bb09
parent47b72cceb3877f6c21e6b464b6e8b97608bed68e (diff)
lib/suite.sh: New file.
-rw-r--r--lib/local.mk1
-rw-r--r--lib/suite.sh84
2 files changed, 85 insertions, 0 deletions
diff --git a/lib/local.mk b/lib/local.mk
index b7f4542..0ad1925 100644
--- a/lib/local.mk
+++ b/lib/local.mk
@@ -11,4 +11,5 @@ pkglib_srcs = \
lib/garbage.sh \
lib/include.sh \
lib/remove.sh \
+ lib/suite.sh \
lib/cmd.sh
diff --git a/lib/suite.sh b/lib/suite.sh
new file mode 100644
index 0000000..b4a4235
--- /dev/null
+++ b/lib/suite.sh
@@ -0,0 +1,84 @@
+# pro-archman
+# lib/suite.sh
+# Functions for working with suites
+#
+# 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/>.
+
+use db
+use dir
+
+copy_suite()
+{
+ local src_chan="${1}"
+ local src_dist="${2}"
+ local dst_chan="${3}"
+ local dst_dist="${4}"
+
+ remove_suite "${dst_chan}" "${dst_dist}"
+
+ db_foreach_source "${src_chan}" "${src_dist}" _suite_copy_source \
+ "${dst_chan}" "${dst_dist}"
+}
+
+remove_suite()
+{
+ local chan="${1}"
+ local dist="${2}"
+
+ db_foreach_source "${chan}" "${dist}" _suite_remove_source
+}
+
+_suite_copy_source()
+{
+ local src_chan="${1}"
+ local src_dist="${2}"
+ local source="${3}"
+ local dst_chan="${4}"
+ local dst_dist="${5}"
+ local plat=
+ local arch=
+ local binver=
+ local sect=
+ local pkg=
+ local pool_file=
+
+ while read -r plat arch; do
+ binver="$(db_get_binver "${src_chan}" "${src_dist}" \
+ "${plat}" "${arch}" "${source}")"
+ while read -r sect pkg; do
+ pool_file="pool/$(hash_name "${source}")/${source}"
+ pool_file="${pool_file}/${pkg}_${binver}"
+ pool_file="${pool_file}_${arch}_${plat}.opk"
+ feed_add_package "${dst_chan}" "${dst_dist}" \
+ "${plat}" "${arch}" \
+ "${sect}" "${pkg}" "${size}" "${pool_file}"
+ done <<-EOF
+ $(db_get_packages "${plat}" "${arch}" \
+ "${source}" "${binver}")
+ EOF
+ done <<-EOF
+ $(db_get_archplats "${src_chan}" "${src_dist}" "${source}")
+ EOF
+}
+
+_suite_remove_source()
+{
+ local chan="${1}"
+ local dist="${2}"
+ local source="${3}"
+
+ remove_source "${chan}" "${dist}" "${source}"
+}