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 ---