[pacman-dev] [PATCH 3/3] repo-add: add source package information to sync db
Dave Reisner
d at falconindy.com
Tue Nov 5 09:25:31 EST 2013
On Tue, Nov 05, 2013 at 11:01:57AM +1000, Allan McRae wrote:
> On 03/11/13 10:38, Dave Reisner wrote:
> > 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.
> >
>
> Can you provide more detail here? I am not sure I am understanding
> where you are directing me...
>
Sure. Here's what I had in mind:
match_source_package() {
case $# in
0|1)
if [[ ! -f $1 ]]; then
warning "$(gettext "No source package found")"
return 1
fi
;;
*)
warning "$(gettext "Cannot determine source package - multiple matches found:")"
msg2 '%s' "$@"
return 1
;;
esac
echo "$1"
}
Now when you call match_source_package(), you don't have to worry about
setting nullglob.
>
> >> + [!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