[arch-projects] [devtools] [PATCH v5 2/2] archrelease: Validate tags before releasing

Pierre Schmitz pierre at archlinux.de
Wed Feb 8 06:56:09 EST 2012


Am 08.02.2012 12:48, schrieb Lukas Fleischer:
> 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 at cryptocrack.de>
> ---
>  archrelease.in    |   25 ++++++++++++++++++++++---
>  lib/valid-tags.sh |   20 ++++++++++++++++++++
>  zsh_completion.in |   17 -----------------
>  3 files changed, 42 insertions(+), 20 deletions(-)
>  create mode 100644 lib/valid-tags.sh
> 
> 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..3b61a2e 100644
> --- a/zsh_completion.in
> +++ b/zsh_completion.in
> @@ -1,22 +1,5 @@
>  #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
> -)
> -
>  _archbuild_args=(
>  	'-c[Recreate the chroot before building]'
>  	'-r[Create chroots in this directory]:base_dir:_files -/'

You forgot to add "m4_include(lib/valid-tags.sh)" here.

-- 
Pierre Schmitz, http://pierre-schmitz.com


More information about the arch-projects mailing list