summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS1
-rw-r--r--locale/en_US.sh5
-rw-r--r--man/pro-archman.1in3
-rw-r--r--src/cmd/add-feed.sh65
-rw-r--r--src/cmd/local.mk3
-rwxr-xr-xtests/add-feed.sh82
-rw-r--r--tests/local.mk3
7 files changed, 160 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index 3886eda..264a5d9 100644
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,7 @@ Released: ????-??-??
Changes in this release:
* Feed indices are no longer removed when feeds become empty.
+ * A new "add-feed" command has been added to create package feeds.
ProteanOS Archive Manager version 2.0.1
---------------------------------------
diff --git a/locale/en_US.sh b/locale/en_US.sh
index bd5e03f..f173cd8 100644
--- a/locale/en_US.sh
+++ b/locale/en_US.sh
@@ -85,6 +85,11 @@ msg_pro_archman_cmd_remove_suite_usage='<suite>'
msg_pro_archman_cmd_sign_summary='re-sign all package feed index files'
msg_pro_archman_cmd_sign_usage=''
+# src/cmd/add-feed.sh
+msg_pro_archman_cmd_add_feed_summary='create package feeds'
+msg_pro_archman_cmd_add_feed_usage='<chan>/<dist>/<arch>/<plat>/<sect> ...'
+msg_pro_archman_cmd_add_feed_invalid='Invalid feed %s'
+
# src/suite.sh
msg_pro_archman_suite_copying='Copying suite %s/%s to suite %s/%s...'
msg_pro_archman_suite_removing='Removing suite %s/%s...'
diff --git a/man/pro-archman.1in b/man/pro-archman.1in
index 1e14e0a..9dc6942 100644
--- a/man/pro-archman.1in
+++ b/man/pro-archman.1in
@@ -51,6 +51,9 @@ Remove a suite.
.TP
.B sign
Re-sign all package feed index files.
+.TP
+.B add-feed
+Create package feeds.
.SH COPYRIGHT
Copyright (C) 2013 Patrick McDermott
diff --git a/src/cmd/add-feed.sh b/src/cmd/add-feed.sh
new file mode 100644
index 0000000..bb9c80f
--- /dev/null
+++ b/src/cmd/add-feed.sh
@@ -0,0 +1,65 @@
+# pro-archman
+# src/cmd/add-feed.sh
+# "add-feed" command
+#
+# Copyright (C) 2020 Patrick McDermott
+#
+# This file is part of the ProteanOS Archive Manager.
+#
+# The ProteanOS Archive Manager 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.
+#
+# The ProteanOS Archive Manager 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 the ProteanOS Archive Manager. If not, see
+# <http://www.gnu.org/licenses/>.
+
+cmd_add_feed_main()
+{
+ local feed=
+ local chan=
+ local dist=
+ local arch=
+ local plat=
+ local sect=
+
+ init
+
+ for feed in "${@}"; do
+ case "${feed}" in
+ */*/*/*/*/*)
+ error 2 "$(get_msg 'cmd_add_feed_invalid')" \
+ "${feed}"
+ ;;
+ */*/*/*/*)
+ ;;
+ *)
+ error 2 "$(get_msg 'cmd_add_feed_invalid')" \
+ "${feed}"
+ ;;
+ esac
+ done
+
+ for feed in "${@}"; do
+ IFS='/' read chan dist arch plat sect <<-EOF
+ ${feed}
+ EOF
+ feed_create "${chan}" "${dist}" "${arch}" "${plat}" "${sect}"
+ done
+
+ fini
+
+ return 0
+}
+
+cmd_add_feed_register()
+{
+ register_cmd 'add-feed'
+}
+__init cmd_add_feed_register
diff --git a/src/cmd/local.mk b/src/cmd/local.mk
index 860c117..d7263f5 100644
--- a/src/cmd/local.mk
+++ b/src/cmd/local.mk
@@ -6,4 +6,5 @@ pro_archman_SOURCES += \
%reldir%/remove.sh \
%reldir%/copy-suite.sh \
%reldir%/remove-suite.sh \
- %reldir%/sign.sh
+ %reldir%/sign.sh \
+ %reldir%/add-feed.sh
diff --git a/tests/add-feed.sh b/tests/add-feed.sh
new file mode 100755
index 0000000..843ede1
--- /dev/null
+++ b/tests/add-feed.sh
@@ -0,0 +1,82 @@
+#!/bin/sh
+#
+# Copyright (C) 2020 Patrick McDermott
+#
+# This file is part of the ProteanOS Archive Manager.
+#
+# The ProteanOS Archive Manager 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.
+#
+# The ProteanOS Archive Manager 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 the ProteanOS Archive Manager. If not, see
+# <http://www.gnu.org/licenses/>.
+
+. ${0%/*}/aux/init.sh
+. tap-functions.sh
+. opk.sh
+
+plan_ 14
+
+command_ok_ 'pro-archman add-feed' -- \
+ "${PRO_ARCHMAN}" -v -b 'archive/' add-feed \
+ 'dev/trunk/arch1/plat1/sect1'
+
+command_ok_ 'feed index exists' -- \
+ [ -f 'archive/feeds/dev/trunk/arch1/plat1/sect1/Packages' ]
+
+command_ok_ 'feed index is empty' -- \
+ [ $(wc -l 'archive/feeds/dev/trunk/arch1/plat1/sect1/Packages' | \
+ cut -d ' ' -f 1) -eq 0 ]
+
+changes="$(make_opks_and_changes 'foo' 'foo bar' '1.0-1' 'arch1' 'plat1' \
+ 'trunk' 'sect1')"
+
+command_ok_ 'pro-archman include' -- \
+ "${PRO_ARCHMAN}" -v -b 'archive/' include "${changes}"
+
+command_ok_ 'feed index is non-empty' -- \
+ [ $(wc -l 'archive/feeds/dev/trunk/arch1/plat1/sect1/Packages' | \
+ cut -d ' ' -f 1) -ne 0 ]
+
+command_ok_ 'pro-archman add-feed' -- \
+ "${PRO_ARCHMAN}" -v -b 'archive/' add-feed \
+ 'dev/trunk/arch1/plat1/sect2'
+
+command_ok_ 'feed index exists' -- \
+ [ -f 'archive/feeds/dev/trunk/arch1/plat1/sect2/Packages' ]
+
+command_ok_ 'feed index is empty' -- \
+ [ $(wc -l 'archive/feeds/dev/trunk/arch1/plat1/sect2/Packages' | \
+ cut -d ' ' -f 1) -eq 0 ]
+
+command_ok_ 'pro-archman add-feed' -- \
+ "${PRO_ARCHMAN}" -v -b 'archive/' add-feed \
+ 'dev/trunk/arch2/plat2/sect1' \
+ 'dev/trunk/arch2/plat2/sect2'
+
+command_ok_ 'feed index exists' -- \
+ [ -f 'archive/feeds/dev/trunk/arch2/plat2/sect1/Packages' ]
+
+command_ok_ 'feed index is empty' -- \
+ [ $(wc -l 'archive/feeds/dev/trunk/arch2/plat2/sect1/Packages' | \
+ cut -d ' ' -f 1) -eq 0 ]
+
+command_ok_ 'feed index exists' -- \
+ [ -f 'archive/feeds/dev/trunk/arch2/plat2/sect2/Packages' ]
+
+command_ok_ 'feed index is empty' -- \
+ [ $(wc -l 'archive/feeds/dev/trunk/arch2/plat2/sect2/Packages' | \
+ cut -d ' ' -f 1) -eq 0 ]
+
+command_ok_ 'pro-archman add-feed' -- not \
+ "${PRO_ARCHMAN}" -v -b 'archive/' add-feed \
+ 'dev/trunk/arch1/plat1'
+
+:
diff --git a/tests/local.mk b/tests/local.mk
index c2f062c..4511549 100644
--- a/tests/local.mk
+++ b/tests/local.mk
@@ -14,7 +14,8 @@ TESTS = \
%reldir%/copy-suite-existing.sh \
%reldir%/remove-suite.sh \
%reldir%/manifest.sh \
- %reldir%/sign.sh
+ %reldir%/sign.sh \
+ %reldir%/add-feed.sh
EXTRA_DIST += \
tests/aux/init.sh \