[pacman-dev] [PATCH 2/3] repo-add: store multi-value fields as arrays
Dan McGee
dpmcgee at gmail.com
Tue Jun 21 13:21:14 EDT 2011
On Mon, Jun 20, 2011 at 2:46 PM, Dave Reisner <d at falconindy.com> wrote:
> Fields like groups and depends should be stored as arrays. This requires
> rewriting our write_list_entry function to accomodate our new data type.
> This new function will not write to a file, but rather only format it.
>
> Signed-off-by: Dave Reisner <d at falconindy.com>
Signed-off-by: Dan McGee <dan at archlinux.org>
> ---
> scripts/repo-add.sh.in | 46 +++++++++++++++++++++++++---------------------
> 1 files changed, 25 insertions(+), 21 deletions(-)
>
> diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
> index 3783348..fb1e24a 100644
> --- a/scripts/repo-add.sh.in
> +++ b/scripts/repo-add.sh.in
> @@ -82,14 +82,16 @@ This is free software; see the source for copying conditions.\n\
> There is NO WARRANTY, to the extent permitted by law.\n")"
> }
>
> -# write a list entry
> +# format a metadata entry
> # arg1 - Entry name
> -# arg2 - List
> -# arg3 - File to write to
> -write_list_entry() {
> - if [[ -n $2 ]]; then
> - echo "%$1%" >>$3
> - echo -e $2 >>$3
> +# ... - value(s)
> +format_entry() {
> + local field=$1; shift
> +
> + if [[ $1 ]]; then
> + printf '%%%s%%\n' "$field"
> + printf '%s\n' "$@"
> + printf '\n'
> fi
> }
>
> @@ -237,13 +239,13 @@ db_write_entry()
> IFS=' =' read -r var val < <(printf '%s\n' "$line")
> declare "$var=$val"
> case "$var" in
> - group) _groups="$_groups$group\n" ;;
> - license) _licenses="$_licenses$license\n" ;;
> - replaces) _replaces="$_replaces$replaces\n" ;;
> - depend) _depends="$_depends$depend\n" ;;
> - conflict) _conflicts="$_conflicts$conflict\n" ;;
> - provides) _provides="$_provides$provides\n" ;;
> - optdepend) _optdepends="$_optdepends$optdepend\n" ;;
> + group) _groups+=("$group") ;;
> + license) _licenses+=("$license") ;;
> + replaces) _replaces+=("$replaces") ;;
> + depend) _depends+=("$depend") ;;
> + conflict) _conflicts+=("$conflict") ;;
> + provides) _provides+=("$provides") ;;
> + optdepend) _optdepends+=("$optdepend") ;;
> esac
> done< <(bsdtar -xOqf "$pkgfile" .PKGINFO)
>
> @@ -297,7 +299,7 @@ db_write_entry()
> [[ -n $pkgbase ]] && echo -e "%BASE%\n$pkgbase\n" >>desc
> echo -e "%VERSION%\n$pkgver\n" >>desc
> [[ -n $pkgdesc ]] && echo -e "%DESC%\n$pkgdesc\n" >>desc
> - write_list_entry "GROUPS" "$_groups" "desc"
> + format_entry "GROUPS" "${_groups[@]}" >>"desc"
> [[ -n $csize ]] && echo -e "%CSIZE%\n$csize\n" >>desc
> [[ -n $size ]] && echo -e "%ISIZE%\n$size\n" >>desc
>
> @@ -309,20 +311,22 @@ db_write_entry()
> [[ -n $pgpsig ]] && echo -e "%PGPSIG%\n$pgpsig\n" >>desc
>
> [[ -n $url ]] && echo -e "%URL%\n$url\n" >>desc
> - write_list_entry "LICENSE" "$_licenses" "desc"
> + format_entry "LICENSE" "${_licenses[@]}" >>"desc"
> [[ -n $arch ]] && echo -e "%ARCH%\n$arch\n" >>desc
> [[ -n $builddate ]] && echo -e "%BUILDDATE%\n$builddate\n" >>desc
> [[ -n $packager ]] && echo -e "%PACKAGER%\n$packager\n" >>desc
> - write_list_entry "REPLACES" "$_replaces" "desc"
> + format_entry "REPLACES" "${_replaces[@]}" >>"desc"
>
> # create depends entry
> msg2 "$(gettext "Creating '%s' db entry...")" 'depends'
> # create the file even if it will remain empty
> touch "depends"
> - write_list_entry "DEPENDS" "$_depends" "depends"
> - write_list_entry "CONFLICTS" "$_conflicts" "depends"
> - write_list_entry "PROVIDES" "$_provides" "depends"
> - write_list_entry "OPTDEPENDS" "$_optdepends" "depends"
> + {
> + format_entry "DEPENDS" "${_depends[@]}"
> + format_entry "CONFLICTS" "${_conflicts[@]}"
> + format_entry "PROVIDES" "${_provides[@]}"
> + format_entry "OPTDEPENDS" "${_optdepends[@]}"
> + } >>'depends'
>
> popd >/dev/null
> popd >/dev/null
> --
> 1.7.5.4
>
>
>
More information about the pacman-dev
mailing list