summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Fleischer <archlinux@cryptocrack.de>2012-02-09 00:50:15 +0100
committerPierre Schmitz <pierre@archlinux.de>2012-02-12 12:35:14 +0100
commit9ab0d94578af8e79b64809b07346db89a07b7f61 (patch)
tree0b0e787929e103432b1739711d4004fb8f07b8aa
parent5e8cb67603a10a00ddc6f3d124a120513094d7f6 (diff)
downloaddevtools-9ab0d94578af8e79b64809b07346db89a07b7f61.tar.xz
archrelease: Validate tags before releasing
Compare every single tag with a list of valid tags. This prevents broken releases which occurred whenever someone made a typo on the command line: $ ./archrelease community i686 ==> ERROR: archrelease: Invalid tag: "community" (use -f to force release) Since the list is used in the ZSH completion as well, break it out to a separate file and move it to "lib/". Also, add a command line parameter to allow for releasing to an unknown repository when necessary. Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de> Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
-rw-r--r--archrelease.in25
-rw-r--r--lib/valid-tags.sh20
-rw-r--r--zsh_completion.in17
3 files changed, 43 insertions, 19 deletions
diff --git a/archrelease.in b/archrelease.in
index 40b6c09..5bc2c90 100644
--- a/archrelease.in
+++ b/archrelease.in
@@ -1,13 +1,32 @@
#!/bin/bash
m4_include(lib/common.sh)
+m4_include(lib/valid-tags.sh)
-if [[ -z $1 ]]; then
- echo 'Usage: archrelease <repo>...'
+# parse command line options
+FORCE=
+while getopts ':f' flag; do
+ case $flag in
+ f) FORCE=1 ;;
+ :) die "Option requires an argument -- '$OPTARG'" ;;
+ \?) die "Invalid option -- '$OPTARG'" ;;
+ esac
+done
+shift $(( OPTIND - 1 ))
+
+if ! (( $# )); then
+ echo 'Usage: archrelease [-f] <repo>...'
exit 1
fi
-# TODO: validate repo is really repo-arch
+# validate repo is really repo-arch
+if [[ -z $FORCE ]]; then
+ for tag in "$@"; do
+ if ! in_array "$tag" "${_tags[@]}"; then
+ die 'archrelease: Invalid tag: "'$tag'" (use -f to force release)'
+ fi
+ done
+fi
if [[ ! -f PKGBUILD ]]; then
die 'archrelease: PKGBUILD not found'
diff --git a/lib/valid-tags.sh b/lib/valid-tags.sh
new file mode 100644
index 0000000..36918fe
--- /dev/null
+++ b/lib/valid-tags.sh
@@ -0,0 +1,20 @@
+_arch=(
+ i686
+ x86_64
+ any
+)
+
+_tags=(
+ core-i686 core-x86_64 core-any
+ extra-i686 extra-x86_64 extra-any
+ multilib-x86_64
+ staging-i686 staging-x86_64 staging-any
+ testing-i686 testing-x86_64 testing-any
+ multilib-testing-x86_64
+ multilib-staging-x86_64
+ community-i686 community-x86_64 community-any
+ community-staging-i686 community-staging-x86_64 community-staging-any
+ community-testing-i686 community-testing-x86_64 community-testing-any
+ kde-unstable-i686 kde-unstable-x86_64 kde-unstable-any
+ gnome-unstable-i686 gnome-unstable-x86_64 gnome-unstable-any
+)
diff --git a/zsh_completion.in b/zsh_completion.in
index 03c2d9a..727112a 100644
--- a/zsh_completion.in
+++ b/zsh_completion.in
@@ -1,21 +1,6 @@
#compdef archbuild archco archrelease archrm commitpkg finddeps makechrootpkg mkarchroot rebuildpkgs extrapkg=commitpkg corepkg=commitpkg testingpkg=commitpkg stagingpkg=commitpkg communitypkg=commitpkg community-testingpkg=commitpkg community-stagingpkg=commitpkg multilibpkg=commitpkg multilib-testingpkg=commitpkg extra-i686-build=archbuild extra-x86_64-build=archbuild testing-i686-build=archbuild testing-x86_64-build=archbuild staging-i686-build=archbuild staging-x86_64-build=archbuild multilib-build=archbuild multilib-testing-build=archbuild multilib-staging-build=archbuild kde-unstable-i686-build=archbuild kde-unstable-x86_64-build=archbuild gnome-unstable-i686-build=archbuild gnome-unstable-x86_64-build=archbuild communityco=archco
-_arch=(i686 x86_64 any)
-
-_tags=(
- core-i686 core-x86_64 core-any
- extra-i686 extra-x86_64 extra-any
- multilib-x86_64
- staging-i686 staging-x86_64 staging-any
- testing-i686 testing-x86_64 testing-any
- multilib-testing-x86_64
- multilib-staging-x86_64
- community-i686 community-x86_64 community-any
- community-staging-i686 community-staging-x86_64 community-staging-any
- community-testing-i686 community-testing-x86_64 community-testing-any
- kde-unstable-i686 kde-unstable-x86_64 kde-unstable-any
- gnome-unstable-i686 gnome-unstable-x86_64 gnome-unstable-any
-)
+m4_include(lib/valid-tags.sh)
_archbuild_args=(
'-c[Recreate the chroot before building]'