summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Schwartz <eschwartz@archlinux.org>2018-05-28 23:30:29 -0400
committerAllan McRae <allan@archlinux.org>2019-01-22 09:38:31 +1000
commit9c817b654996249b8022e189ee7e2692f4668431 (patch)
treea1473a326760a261a671dfd7af354be1e7f1a451
parentac0e21a6df65c3770920be39b3fe14d8b49f637b (diff)
downloadpacman-9c817b654996249b8022e189ee7e2692f4668431.tar.gz
pacman-9c817b654996249b8022e189ee7e2692f4668431.zip
libmakepkg: implement extendable source protocols
Lookup the existence of matching functions for each protocol, and fallback on the generic file handler. New source protocols can then be added via thirdparty libmakepkg drop-ins without requiring modifications to source.sh Fixes FS#49076 Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r--scripts/libmakepkg/source.sh.in47
-rw-r--r--scripts/libmakepkg/source/bzr.sh.in5
-rw-r--r--scripts/libmakepkg/source/git.sh.in5
-rw-r--r--scripts/libmakepkg/source/hg.sh.in5
-rw-r--r--scripts/libmakepkg/source/svn.sh.in5
5 files changed, 30 insertions, 37 deletions
diff --git a/scripts/libmakepkg/source.sh.in b/scripts/libmakepkg/source.sh.in
index 198efd5e..2cb7dae1 100644
--- a/scripts/libmakepkg/source.sh.in
+++ b/scripts/libmakepkg/source.sh.in
@@ -59,26 +59,11 @@ download_sources() {
pushd "$SRCDEST" &>/dev/null
local proto=$(get_protocol "$netfile")
- case "$proto" in
- local)
- download_local "$netfile"
- ;;
- bzr)
- (( get_vcs )) && download_bzr "$netfile"
- ;;
- git)
- (( get_vcs )) && download_git "$netfile"
- ;;
- hg)
- (( get_vcs )) && download_hg "$netfile"
- ;;
- svn)
- (( get_vcs )) && download_svn "$netfile"
- ;;
- *)
- download_file "$netfile"
- ;;
- esac
+ if declare -f download_$proto > /dev/null; then
+ download_$proto "$netfile"
+ else
+ download_file "$netfile"
+ fi
popd &>/dev/null
done
@@ -92,22 +77,10 @@ extract_sources() {
for netfile in "${all_sources[@]}"; do
local file=$(get_filename "$netfile")
local proto=$(get_protocol "$netfile")
- case "$proto" in
- bzr)
- extract_bzr "$netfile"
- ;;
- git)
- extract_git "$netfile"
- ;;
- hg)
- extract_hg "$netfile"
- ;;
- svn)
- extract_svn "$netfile"
- ;;
- *)
- extract_file "$file"
- ;;
- esac
+ if declare -f extract_$proto > /dev/null; then
+ extract_$proto "$netfile"
+ else
+ extract_file "$file"
+ fi
done
}
diff --git a/scripts/libmakepkg/source/bzr.sh.in b/scripts/libmakepkg/source/bzr.sh.in
index 52193b58..d3f7db3b 100644
--- a/scripts/libmakepkg/source/bzr.sh.in
+++ b/scripts/libmakepkg/source/bzr.sh.in
@@ -29,6 +29,11 @@ source "$LIBRARY/util/pkgbuild.sh"
download_bzr() {
+ # abort early if parent says not to fetch
+ if declare -p get_vcs > /dev/null 2>&1; then
+ (( get_vcs )) || return
+ fi
+
local netfile=$1
local url=$(get_url "$netfile")
diff --git a/scripts/libmakepkg/source/git.sh.in b/scripts/libmakepkg/source/git.sh.in
index 130c11e1..497a668c 100644
--- a/scripts/libmakepkg/source/git.sh.in
+++ b/scripts/libmakepkg/source/git.sh.in
@@ -29,6 +29,11 @@ source "$LIBRARY/util/pkgbuild.sh"
download_git() {
+ # abort early if parent says not to fetch
+ if declare -p get_vcs > /dev/null 2>&1; then
+ (( get_vcs )) || return
+ fi
+
local netfile=$1
local dir=$(get_filepath "$netfile")
diff --git a/scripts/libmakepkg/source/hg.sh.in b/scripts/libmakepkg/source/hg.sh.in
index ae9aed3b..4984883e 100644
--- a/scripts/libmakepkg/source/hg.sh.in
+++ b/scripts/libmakepkg/source/hg.sh.in
@@ -29,6 +29,11 @@ source "$LIBRARY/util/pkgbuild.sh"
download_hg() {
+ # abort early if parent says not to fetch
+ if declare -p get_vcs > /dev/null 2>&1; then
+ (( get_vcs )) || return
+ fi
+
local netfile=$1
local dir=$(get_filepath "$netfile")
diff --git a/scripts/libmakepkg/source/svn.sh.in b/scripts/libmakepkg/source/svn.sh.in
index f98779f2..48f4f24e 100644
--- a/scripts/libmakepkg/source/svn.sh.in
+++ b/scripts/libmakepkg/source/svn.sh.in
@@ -29,6 +29,11 @@ source "$LIBRARY/util/pkgbuild.sh"
download_svn() {
+ # abort early if parent says not to fetch
+ if declare -p get_vcs > /dev/null 2>&1; then
+ (( get_vcs )) || return
+ fi
+
local netfile=$1
local fragment=${netfile#*#}