[pacman-dev] [PATCH 3/3] repo-add: add source package information to sync db
Dave Reisner
d at falconindy.com
Sat Nov 2 20:38:31 EDT 2013
On Sat, Nov 02, 2013 at 12:21:42PM +1000, Allan McRae wrote:
> When using the -S/--source option, add source package information to the
> sync db if one is found alongside the package file.
>
> TODO: Add documentation
>
> Signed-off-by: Allan McRae <allan at archlinux.org>
> ---
> lib/libalpm/be_sync.c | 2 ++
> scripts/repo-add.sh.in | 75 ++++++++++++++++++++++++++++++++++++++++++++++++--
> 2 files changed, 75 insertions(+), 2 deletions(-)
>
> diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c
> index 6ebdf3c..eb60b64 100644
> --- a/lib/libalpm/be_sync.c
> +++ b/lib/libalpm/be_sync.c
> @@ -674,6 +674,8 @@ static int sync_db_read(alpm_db_t *db, struct archive *archive,
> /* skip reading delta files if UseDelta is unset */
> } else if(strcmp(filename, "files") == 0) {
> /* currently do nothing with this file */
> + } else if(strcmp(filename, "source") == 0) {
> + /* currently do nothing with this file */
> } else {
> /* unknown database file */
> _alpm_log(db->handle, ALPM_LOG_DEBUG, "unknown database file: %s\n", filename);
> diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
> index dbb635a..e4a34d1 100644
> --- a/scripts/repo-add.sh.in
> +++ b/scripts/repo-add.sh.in
> @@ -33,6 +33,7 @@ DELTA=0
> ONLYADDNEW=0
> RMEXISTING=0
> WITHFILES=0
> +SOURCE=0
> SIGN=0
> VERIFY=0
> REPO_DB_FILE=
> @@ -61,6 +62,7 @@ Multiple packages to add can be specified on the command line.\n")"
> printf -- "$(gettext " -n, --new only add packages that are not already in the database\n")"
> printf -- "$(gettext " -R, --remove remove package file from disk when updating database entry\n")"
> printf -- "$(gettext " -f, --files update database's file list\n")"
> + printf -- "$(gettext " -S, --source add source package information to the database\n")"
> elif [[ $cmd == "repo-remove" ]] ; then
> printf -- "$(gettext "Usage: repo-remove [options] <path-to-db> <packagename|delta> ...\n")"
> printf -- "\n"
> @@ -124,6 +126,35 @@ find_pkgentry() {
> return 1
> }
>
> +match_source_package() {
> + case $# in
> + 0)
> + warning "$(gettext "No source package found")"
> + return 1
> + ;;
I think if you check for existence here you make this a more robust
function which doesn't silently require nullglob. This case label then
simply becomes 0|1.
> + [!1])
> + warning "$(gettext "Cannot determine source package - multiple matches found:")"
> + msg2 '%s' "$@"
> + return 1
> + ;;
> + esac
> + echo "$1"
> +}
> +
> +find_source_package() {
> + local pkgfile pkgname pkgver sourcepkg
> +
> + pkgfile=$1
> + pkgname=$2
> + pkgver=$3
> +
> + local sourcepkg=$(shopt -s nullglob;
> + match_source_package "$(dirname "$pkgfile")/$pkgname-$pkgver".src.tar!(*.sig))
> +
> + echo "$sourcepkg"
You probably don't want to do this if match_source_package failed...
> +}
> +
> funcgrep() {
> awk -v funcmatch="$1" '
> /^[[:space:]]*[[:alnum:]_]+[[:space:]]*\([[:space:]]*\)/ {
> @@ -272,8 +303,9 @@ db_write_entry() {
> local pkgfile=$1
> local -a _groups _licenses _replaces _depends _conflicts _provides \
> _optdepends _makedepends _checkdepends
> - local pkgname pkgver pkgdesc csize size url arch builddate packager \
> - md5sum sha256sum pgpsig pgpsigsize install_functions
> + local pkgname pkgbase pkgver basever pkgdesc csize size url arch builddate \
> + packager md5sum sha256sum pgpsig pgpsigsize install_functions \
> + spkgfile scsize smd5sum ssha256sum spgpsig
>
> # read info from the zipped package
> local line var val
> @@ -353,6 +385,31 @@ db_write_entry() {
> sha256sum=$(openssl dgst -sha256 "$pkgfile")
> sha256sum=${sha256sum##* }
>
> + # gather source package information
> + if (( SOURCE )); then
> + msg2 "$(gettext "Adding source package...")"
> +
> + spkgfile=$(find_source_package "$pkgfile" ${pkgbase:-$pkgname} ${basever:-$pkgver})
> +
> + if [[ -n "$spkgfile" ]]; then
> + if [[ -f "$spkgfile.sig" ]]; then
> + pgpsigsize=$(@SIZECMD@ -L "$spkgfile.sig")
> + if (( pgpsigsize > 16384 )); then
> + error "$(gettext "Invalid package signature file '%s'.")" "$spkgfile.sig"
> + return 1
> + fi
> + spgpsig=$(openssl base64 -in "$spkgfile.sig" | tr -d '\n')
> + fi
> +
> + scsize=$(@SIZECMD@ -L "$spkgfile")
> +
> + smd5sum=$(openssl dgst -md5 "$spkgfile")
> + smd5sum=${md5sum##* }
> + ssha256sum=$(openssl dgst -sha256 "$spkgfile")
> + ssha256sum=${sha256sum##* }
> + fi
> + fi
> +
> # remove an existing entry if it exists, ignore failures
> db_remove_entry "$pkgname"
>
> @@ -371,6 +428,7 @@ db_write_entry() {
> format_entry "NAME" "$pkgname"
> format_entry "BASE" "$pkgbase"
> format_entry "VERSION" "$pkgver"
> + format_entry "BASEVER" "$basever"
> format_entry "DESC" "$pkgdesc"
> format_entry "GROUPS" "${_groups[@]}"
> format_entry "CSIZE" "$csize"
> @@ -403,6 +461,18 @@ db_write_entry() {
> format_entry "CHECKDEPENDS" "${_checkdepends[@]}"
> } >'depends'
>
> + # create source entry
> + if (( SOURCE )) && [[ -n "$spkgfile" ]]; then
> + msg2 "$(gettext "Creating '%s' db entry...")" 'source'
> + {
> + format_entry "FILENAME" "${spkgfile##*/}"
> + format_entry "CSIZE" "$scsize"
> + format_entry "MD5SUM" "$smd5sum"
> + format_entry "SHA256SUM" "$ssha256sum"
> + format_entry "PGPSIG" "$spgpsig"
> + } >'source'
> + fi
> +
> popd >/dev/null
> popd >/dev/null
>
> @@ -640,6 +710,7 @@ while (( $# )); do
> -n|--new) ONLYADDNEW=1;;
> -R|--remove) RMEXISTING=1;;
> -f|--files) WITHFILES=1;;
> + -S|--source) SOURCE=1;;
> --nocolor) USE_COLOR='n';;
> -s|--sign)
> check_gpg
> --
> 1.8.4.2
>
>
More information about the pacman-dev
mailing list