[pacman-dev] [PATCH 2/3] repo-add: store multi-value fields as arrays
Dave Reisner
d at falconindy.com
Mon Jun 20 15:46:33 EDT 2011
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>
---
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