[pacman-dev] [RFC] [PATCH] repo-add: Add SOURCE entry
Allan McRae
allan at archlinux.org
Sat Apr 21 07:26:43 EDT 2012
When repo-add is passed a source package, add it to the desc file.
Signed-off-by: Allan McRae <allan at archlinux.org>
---
This patch is crap... but I want to know if an idea like this would even
be considered before I make it suck less and implement the pacman side.
The idea is "pacman -B/--build <pkg>" would download the source package file
(if provided in the repo) and build the package. Of course this could be
extended (e.g. -w to only download, -e allows editing the PKGBUILD prior to
building, -u builds an entire update, -d builds a package but not its deps,
--nopatch disables patching the build files with the patch found in
/etc/pacman.d/build/$pkgbase).
Is this the mindless ramblings of a lunatic, or something that would be of
interest?
scripts/repo-add.sh.in | 44 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
index 5159ea2..80e512b 100644
--- a/scripts/repo-add.sh.in
+++ b/scripts/repo-add.sh.in
@@ -187,6 +187,40 @@ db_remove_delta() {
return 1
} # end db_remove_delta
+# write a source entry
+# arg1 - path to source package file
+db_write_source() {
+ sourcefile="$1"
+
+ pkgbase=${1%-*-*}
+
+ local line
+ while read -r line; do
+ # TODO - suck less (leading whitespace, variable usage, split packages...)
+ [[ ${line} = pkgname=* ]] && declare "$line"
+ [[ ${line} = pkgver=* ]] && declare "$line"
+ [[ ${line} = pkgrel=* ]] && declare "$line"
+ done< <(bsdtar -xOqf "$sourcefile" "$pkgbase/@BUILDSCRIPT@")
+
+ # ensure needed variables were found
+ if [[ -z $pkgname || -z $pkgver || -z $pkgrel ]]; then
+ error "$(gettext "Invalid source package file '%s'.")" "$sourcefile"
+ return 1
+ fi
+
+ if [[ ! -f $tmpdir/tree/$pkgname-$pkgver-$pkgrel/desc ]]; then
+ error "$(gettext "No database entry for package '%s'.")" "$pkgname-$pkgver-$pkgrel"
+ return 1
+ fi
+
+ format_entry "SOURCE" "${1##*/}" >> $tmpdir/tree/$pkgname-$pkgver-$pkgrel/desc
+
+ # TODO - will want some security here... checksum/signature
+
+ return 0
+}
+
+
check_gpg() {
if ! type -p gpg >/dev/null; then
error "$(gettext "Cannot find the gpg binary! Is GnuPG installed?")"
@@ -497,6 +531,16 @@ add() {
fi
fi
+ if [[ $1 == *.src.tar?(.*) ]]; then
+ sourcefile=$1
+ msg "$(gettext "Adding source '%s'")" "$sourcefile"
+ if db_write_source "$sourcefile"; then
+ return 0
+ else
+ return 1
+ fi
+ fi
+
pkgfile=$1
if ! bsdtar -tqf "$pkgfile" .PKGINFO >/dev/null 2>&1; then
error "$(gettext "'%s' is not a package file, skipping")" "$pkgfile"
--
1.7.10
More information about the pacman-dev
mailing list