diff options
author | Lukas Fleischer <archlinux@cryptocrack.de> | 2012-02-09 00:50:15 +0100 |
---|---|---|
committer | Pierre Schmitz <pierre@archlinux.de> | 2012-02-12 12:35:14 +0100 |
commit | 9ab0d94578af8e79b64809b07346db89a07b7f61 (patch) | |
tree | 0b0e787929e103432b1739711d4004fb8f07b8aa | |
parent | 5e8cb67603a10a00ddc6f3d124a120513094d7f6 (diff) | |
download | devtools-9ab0d94578af8e79b64809b07346db89a07b7f61.tar.gz devtools-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.in | 25 | ||||
-rw-r--r-- | lib/valid-tags.sh | 20 | ||||
-rw-r--r-- | zsh_completion.in | 17 |
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]' |