pacman/scripts/libmakepkg/source.sh.in
Eli Schwartz ac0e21a6df libmakepkg: optimize get_protocol to always return proto, not proto+uri
e.g. git+https:// is commonly used for git repositories cloned over
HTTPS, but we assume a proto with a plus in it is actually a protocol
followed by some URI handler. So we might as well simplify the return
value and not have to always add glob matching everywhere when checking
the proto in use.

This is required in order to use the proto directly in function calls,
which will be used in a followup patch.

Signed-off-by: Allan McRae <allan@archlinux.org>
2019-01-22 09:38:21 +10:00

113 lines
2.4 KiB
Bash

#!/bin/bash
#
# source.sh - functions for downloading and extracting sources
#
# Copyright (c) 2015-2018 Pacman Development Team <pacman-dev@archlinux.org>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
[[ -n "$LIBMAKEPKG_SOURCE_SH" ]] && return
LIBMAKEPKG_SOURCE_SH=1
LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
source "$LIBRARY/util/message.sh"
source "$LIBRARY/util/pkgbuild.sh"
source "$LIBRARY/util/source.sh"
for lib in "$LIBRARY/source/"*.sh; do
source "$lib"
done
download_sources() {
local netfile all_sources
local get_source_fn=get_all_sources_for_arch get_vcs=1
msg "$(gettext "Retrieving sources...")"
while true; do
case $1 in
allarch)
get_source_fn=get_all_sources
;;
novcs)
get_vcs=0
;;
*)
break
;;
esac
shift
done
"$get_source_fn" 'all_sources'
for netfile in "${all_sources[@]}"; do
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
popd &>/dev/null
done
}
extract_sources() {
msg "$(gettext "Extracting sources...")"
local netfile all_sources
get_all_sources_for_arch 'all_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
done
}