Sören Tempel: 2 abuild: support cloning form multiple git/svn urls abuild: simplify $pkgver handling in snapshot() 2 files changed, 101 insertions(+), 75 deletions(-)
Copy & paste the following snippet into your terminal to import this patchset into git:
curl -s https://lists.alpinelinux.org/~alpine/devel/patches/829/mbox | git am -3Learn more about email & git
Instead of having multiple variables for different version control
systems ($svnurl and $giturl) this unites all version control systems in
one URL $vcsurls and also allows you to add more than one URL per
APKBUILD.
The syntax is as follows:
(git|svn)+<url>[#<revision to checkout (previously $reporev)>]
This has various advantages over the old approach: The obvious one being
that you can clone multiple repositories without defining your own
snapshot function now. I needed this for the testing/android-tools
APKBUILD. Additionally it is now much easier to add support for more
version control systems (e.g. mercurial).
The new code should be fully mostly[1] with APKBUILDs that are still
using $giturl, $svnurl and/or $reporev. However, this backwards
compatibility makes the code somewhat uglier and should probably be
removed in a feature version (deprecation warnings are already emitted
in this version).
In general the snapshot function code could be cleaned up a bit by
moving the git/svn clone code to a separate function et cetera.
[1] Since the previous snapshot code assumed that only one repository
would be cloned the tarballs contained a directory called
'$pkgname-${verbase:-0}_git${_date}', however since we have multiple
tarballs now we can't use this as a filename thus you need to update
"$builddir" after creating a new snapshot for your APKBUILD. Besides
stuff *will* break if you used command line flags in $giturl as
instructed in the comment above the snapshot function.
---
abuild.in | 127 ++++++++++++++++++++++++++++++++++++++++----------------------
1 file changed, 82 insertions(+), 45 deletions(-)
diff --git a/abuild.in b/abuild.in
index d4614d1..a0637c9 100644
--- a/abuild.in
+++ b/abuild.in
@@ -2057,61 +2057,98 @@ all() {
fi
}
-# This abuild hook will checkout an svn or git repository by specifying
-# $svnurl or $giturl in APKBUILD. You can checkout a specific branch in
-# git by adding -b $branch in $giturl. $reporev will select the correct
-# commit, revision or tag for you. If you specify $disturl your distfile
-# will automatically be uploaded with rsync to the url provided.
+# This abuild hook will checkout a version control source tree.
+# Currently svn and git are supported. To checkout a repository
+# add the repository to the $vcsurls variable. The syntax for $vcsurls
+# items is the following:
+#
+# (git|svn)+<url>[#<revision to checkout (previously $reporev)>]
+#
+# Revision to checkout is optional but recommended. If you specify $disturl
+# your distfile will automatically be uploaded with rsync to the url provided.
# Base version defaults to 0 except if specified by $verbase.
snapshot() {
+ # included for compatiblity with old APKBUILDs
+ [ -n "$svnurl" ] && [ -n "$giturl" ] && die "You can only use a single repository!"
+ if [ -n "$svnurl" ]; then
+ warning "The \$svnurl variable is deprecated, use \$vcsurls instead."
+ vcsurls="svn+$svnurl${reporev:+#$reporev}"
+ elif [ -n "$giturl" ]; then
+ warning "The \$giturl variable is deprecated, use \$vcsurls instead."
+ vcsurls="git+$giturl${reporev:+#$reporev}"
+ fi
+
# check if we setup vars correctly
[ -z "$disturl" ] && warning "Missing disturl in APKBUILD, auto uploading disabled."
- [ -z "$svnurl" ] && [ -z "$giturl" ] && die "Missding repository url in APKBUILD!"
- [ -n "$svnurl" ] && [ -n "$giturl" ] && die "You can only use a single repository!"
+ [ -z "$vcsurls" ] && die "Missing repository url in APKBUILD!"
+ [ -n "$reporev" ] && warning "The \$reporev variable is deprecated."
+
local _date=$(date +%Y%m%d)
local _format="tar.gz"
# remove any repositories left in srcdir
abuild clean
mkdir -p "$srcdir" && cd "$srcdir"
- # clone git repo and archive
- if [ -n "$giturl" ]; then
- local _version=${verbase:-0}_git${_date}
- command -v git >/dev/null || \
- die "Missing git! Install git to support git clone."
- local _rev="${reporev:-HEAD}"
- [ "$_rev" = "HEAD" ] && local _depth="--depth=1"
- msg "Creating git snapshot: $pkgname-$_version"
- git clone $_depth --bare $giturl $pkgname-$_version || return 1
- git --git-dir $pkgname-$_version archive \
- --format=$_format \
- -o $pkgname-$_version.$_format \
- --prefix=$pkgname-$_version/ $_rev \
- || return 1
- fi
- # export svn repo and archive
- if [ -n "$svnurl" ]; then
- local _version=${verbase:-0}_svn${_date}
- command -v svn >/dev/null || \
- die "Missing svn! Install subverion to support svn export."
- [ -n "$reporev" ] && local _rev="-r $reporev"
- msg "Creating svn snapshot: $pkgname-$_version"
- svn co $_rev $svnurl $pkgname-$_version || return 1
- tar zcf $pkgname-$_version.$_format $pkgname-$_version || return 1
- fi
- # upload to defined distfiles url
- if [ -n "$disturl" ]; then
- command -v rsync >/dev/null || \
- die "Missing rsync! Install rsync to enable automatic uploads."
- msg "Uploading to $disturl"
- rsync --progress -La $pkgname-$_version.$_format \
- $disturl || return 1
- cd "$startdir"
- # set the pkgver to current date and update checksum
- sed -i -e "s/^pkgver=.*/pkgver=${_version}/" \
- APKBUILD || return 1
- abuild checksum
- fi
+
+ local scr= ver= url= rver= type=
+ for url in $vcsurls; do
+ echo "$url" | grep -q + 2>/dev/null || \
+ die "VCS type for '$url' wasn't specified."
+ type="${url%+*}"
+ url="${url##*+}"
+
+ ver="${url##*\#}"
+ url="${url%\#*}"
+
+ [ -z "${ver}" ] && warning "Please specify a revision to checkout for '$url'."
+
+ case "$type" in
+ svn)
+ rver=${verbase:-0}_svn${_date}
+ scr="$pkgname-${url##*/}-$rver"
+
+ command -v svn >/dev/null || \
+ die "Missing svn! Install subverion to support svn export."
+
+ [ -n "$ver" ] && local _rev="-r $ver"
+ msg "Creating svn snapshot: $scr"
+ svn co $_rev "$url" $scr || return 1
+ tar zcf $scr.$_format $scr || return 1
+ ;;
+ git)
+ rver=${verbase:-0}_git${_date}
+ scr="$pkgname-${url##*/}-$rver"
+
+ command -v git >/dev/null || \
+ die "Missing git! Install git to support git clone."
+
+ local _rev="${ver:-HEAD}"
+ [ "$_rev" = "HEAD" ] && local _depth="--depth=1"
+ msg "Creating git snapshot: $scr"
+ git clone $_depth --bare "$url" $scr || return 1
+ git --git-dir $scr archive \
+ -o $scr.$_format \
+ --format=$_format \
+ --prefix=$pkgname-$rver/ $_rev \
+ || return 1
+ ;;
+ *) die "Unsupported VCS type: '${type}'" ;;
+ esac
+
+ # upload to defined distfiles url
+ if [ -n "$disturl" ]; then
+ command -v rsync >/dev/null || \
+ die "Missing rsync! Install rsync to enable automatic uploads."
+ msg "Uploading to $disturl"
+ rsync --progress -La $scr $disturl || return 1
+ fi
+ done
+
+ cd "$startdir"
+ # set the pkgver to current date and update checksum
+ sed -i -e "s/^pkgver=.*/pkgver=${rver}/" \
+ APKBUILD || return 1
+ abuild checksum
}
usage() {
--
2.9.0
---
Unsubscribe: alpine-devel+unsubscribe@lists.alpinelinux.org
Help: alpine-devel+help@lists.alpinelinux.org
---
Drop $verbase and simply use the version specified in $pkgver for tarballs. I don't know why this wasn't done before but this seems to be the easiest approach. --- abuild.in | 49 +++++++++++++++++++------------------------------ 1 file changed, 19 insertions(+), 30 deletions(-) diff --git a/abuild.in b/abuild.in index a0637c9..7e18885 100644 --- a/abuild.in +++ b/abuild.in @@ -2066,7 +2066,6 @@ all() { # # Revision to checkout is optional but recommended. If you specify $disturl # your distfile will automatically be uploaded with rsync to the url provided. -# Base version defaults to 0 except if specified by $verbase. snapshot() { # included for compatiblity with old APKBUILDs @@ -2084,52 +2083,45 @@ snapshot() { [ -z "$vcsurls" ] && die "Missing repository url in APKBUILD!" [ -n "$reporev" ] && warning "The \$reporev variable is deprecated." - local _date=$(date +%Y%m%d) - local _format="tar.gz" # remove any repositories left in srcdir abuild clean mkdir -p "$srcdir" && cd "$srcdir" - local scr= ver= url= rver= type= + local fmt=tar.gz scr= ver= url= type= for url in $vcsurls; do echo "$url" | grep -q + 2>/dev/null || \ die "VCS type for '$url' wasn't specified." - type="${url%+*}" - url="${url##*+}" - ver="${url##*\#}" - url="${url%\#*}" + type="${url%+*}" # Extract VCS type from URL. + url="${url##*+}" # Remove VCS type from URL. + ver="${url##*\#}" # Extract revision from URL. + url="${url%\#*}" # Remove revision from URL. + scr="$pkgname-${url##*/}-$pkgver" [ -z "${ver}" ] && warning "Please specify a revision to checkout for '$url'." case "$type" in svn) - rver=${verbase:-0}_svn${_date} - scr="$pkgname-${url##*/}-$rver" - command -v svn >/dev/null || \ die "Missing svn! Install subverion to support svn export." - [ -n "$ver" ] && local _rev="-r $ver" - msg "Creating svn snapshot: $scr" - svn co $_rev "$url" $scr || return 1 - tar zcf $scr.$_format $scr || return 1 + [ -n "$ver" ] && local rev="-r $ver" + msg "Creating svn snapshot for '$url'" + svn co $rev "$url" $scr || return 1 + tar zcf $scr.$fmt $scr || return 1 ;; git) - rver=${verbase:-0}_git${_date} - scr="$pkgname-${url##*/}-$rver" - command -v git >/dev/null || \ die "Missing git! Install git to support git clone." - local _rev="${ver:-HEAD}" - [ "$_rev" = "HEAD" ] && local _depth="--depth=1" - msg "Creating git snapshot: $scr" + local rev="${ver:-HEAD}" + [ "$rev" = "HEAD" ] && local _depth="--depth=1" + msg "Creating git snapshot for '$url'" git clone $_depth --bare "$url" $scr || return 1 git --git-dir $scr archive \ - -o $scr.$_format \ - --format=$_format \ - --prefix=$pkgname-$rver/ $_rev \ + -o $scr.$fmt \ + --format=$fmt \ + --prefix=$scr/ $rev \ || return 1 ;; *) die "Unsupported VCS type: '${type}'" ;; @@ -2139,16 +2131,13 @@ snapshot() { if [ -n "$disturl" ]; then command -v rsync >/dev/null || \ die "Missing rsync! Install rsync to enable automatic uploads." - msg "Uploading to $disturl" - rsync --progress -La $scr $disturl || return 1 + msg "Uploading '$scr' to '$disturl'" + rsync --progress -La $scr.$fmt $disturl || return 1 fi done cd "$startdir" - # set the pkgver to current date and update checksum - sed -i -e "s/^pkgver=.*/pkgver=${rver}/" \ - APKBUILD || return 1 - abuild checksum + [ -n "$disturl" ] && abuild checksum } usage() { -- 2.9.0 --- Unsubscribe: alpine-devel+unsubscribe@lists.alpinelinux.org Help: alpine-devel+help@lists.alpinelinux.org ---