libmakepkg: extract functions for source download and extraction
Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
parent
1a17249159
commit
3d4529335c
11 changed files with 749 additions and 524 deletions
|
@ -43,6 +43,7 @@ libmakepkgdir = $(datarootdir)/makepkg
|
||||||
LIBMAKEPKGDIRS = \
|
LIBMAKEPKGDIRS = \
|
||||||
lint_package \
|
lint_package \
|
||||||
lint_pkgbuild \
|
lint_pkgbuild \
|
||||||
|
source \
|
||||||
tidy \
|
tidy \
|
||||||
util
|
util
|
||||||
|
|
||||||
|
@ -73,6 +74,13 @@ LIBMAKEPKG_IN = \
|
||||||
libmakepkg/lint_pkgbuild/provides.sh \
|
libmakepkg/lint_pkgbuild/provides.sh \
|
||||||
libmakepkg/lint_pkgbuild/source.sh \
|
libmakepkg/lint_pkgbuild/source.sh \
|
||||||
libmakepkg/lint_pkgbuild/util.sh \
|
libmakepkg/lint_pkgbuild/util.sh \
|
||||||
|
libmakepkg/source.sh \
|
||||||
|
libmakepkg/source/bzr.sh \
|
||||||
|
libmakepkg/source/file.sh \
|
||||||
|
libmakepkg/source/git.sh \
|
||||||
|
libmakepkg/source/hg.sh \
|
||||||
|
libmakepkg/source/local.sh \
|
||||||
|
libmakepkg/source/svn.sh \
|
||||||
libmakepkg/tidy.sh \
|
libmakepkg/tidy.sh \
|
||||||
libmakepkg/tidy/docs.sh \
|
libmakepkg/tidy/docs.sh \
|
||||||
libmakepkg/tidy/emptydirs.sh \
|
libmakepkg/tidy/emptydirs.sh \
|
||||||
|
|
2
scripts/libmakepkg/.gitignore
vendored
2
scripts/libmakepkg/.gitignore
vendored
|
@ -2,6 +2,8 @@ lint_package.sh
|
||||||
lint_package/*.sh
|
lint_package/*.sh
|
||||||
lint_pkgbuild.sh
|
lint_pkgbuild.sh
|
||||||
lint_pkgbuild/*.sh
|
lint_pkgbuild/*.sh
|
||||||
|
source.sh
|
||||||
|
source/*.sh
|
||||||
tidy.sh
|
tidy.sh
|
||||||
tidy/*.sh
|
tidy/*.sh
|
||||||
/util.sh
|
/util.sh
|
||||||
|
|
113
scripts/libmakepkg/source.sh.in
Normal file
113
scripts/libmakepkg/source.sh.in
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# source.sh - functions for downloading and extracting sources
|
||||||
|
#
|
||||||
|
# Copyright (c) 2015 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 2
|
||||||
|
;;
|
||||||
|
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
|
||||||
|
}
|
106
scripts/libmakepkg/source/bzr.sh.in
Normal file
106
scripts/libmakepkg/source/bzr.sh.in
Normal file
|
@ -0,0 +1,106 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# bzr.sh - function for handling the download and "extraction" of Bazaar sources
|
||||||
|
#
|
||||||
|
# Copyright (c) 2015 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_BZR_SH" ]] && return
|
||||||
|
LIBMAKEPKG_SOURCE_BZR_SH=1
|
||||||
|
|
||||||
|
|
||||||
|
LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
|
||||||
|
|
||||||
|
source "$LIBRARY/util/message.sh"
|
||||||
|
source "$LIBRARY/util/pkgbuild.sh"
|
||||||
|
|
||||||
|
|
||||||
|
download_bzr() {
|
||||||
|
local netfile=$1
|
||||||
|
|
||||||
|
local url=$(get_url "$netfile")
|
||||||
|
if [[ $url != bzr+ssh* ]]; then
|
||||||
|
url=${url#bzr+}
|
||||||
|
fi
|
||||||
|
url=${url%%#*}
|
||||||
|
|
||||||
|
local repo=$(get_filename "$netfile")
|
||||||
|
local displaylocation="$url"
|
||||||
|
|
||||||
|
local dir=$(get_filepath "$netfile")
|
||||||
|
[[ -z "$dir" ]] && dir="$SRCDEST/$(get_filename "$netfile")"
|
||||||
|
|
||||||
|
if [[ ! -d "$dir" ]] || dir_is_empty "$dir" ; then
|
||||||
|
msg2 "$(gettext "Branching %s ...")" "${displaylocation}"
|
||||||
|
if ! bzr branch "$url" "$dir" --no-tree --use-existing-dir; then
|
||||||
|
error "$(gettext "Failure while branching %s")" "${displaylocation}"
|
||||||
|
plain "$(gettext "Aborting...")"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
elif (( ! HOLDVER )); then
|
||||||
|
msg2 "$(gettext "Pulling %s ...")" "${displaylocation}"
|
||||||
|
cd_safe "$dir"
|
||||||
|
if ! bzr pull "$url"; then
|
||||||
|
# only warn on failure to allow offline builds
|
||||||
|
warning "$(gettext "Failure while pulling %s")" "${displaylocation}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
extract_bzr() {
|
||||||
|
local netfile=$1
|
||||||
|
|
||||||
|
local repo=$(get_filename "$netfile")
|
||||||
|
local fragment=${netfile#*#}
|
||||||
|
if [[ $fragment = "$netfile" ]]; then
|
||||||
|
unset fragment
|
||||||
|
fi
|
||||||
|
|
||||||
|
rev="last:1"
|
||||||
|
if [[ -n $fragment ]]; then
|
||||||
|
case ${fragment%%=*} in
|
||||||
|
revision)
|
||||||
|
rev="${fragment#*=}"
|
||||||
|
displaylocation="$url -r ${fragment#*=}"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
error "$(gettext "Unrecognized reference: %s")" "${fragment}"
|
||||||
|
plain "$(gettext "Aborting...")"
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
local dir=$(get_filepath "$netfile")
|
||||||
|
[[ -z "$dir" ]] && dir="$SRCDEST/$(get_filename "$netfile")"
|
||||||
|
|
||||||
|
msg2 "$(gettext "Creating working copy of %s %s repo...")" "${repo}" "bzr"
|
||||||
|
pushd "$srcdir" &>/dev/null
|
||||||
|
|
||||||
|
if [[ -d "${dir##*/}" ]]; then
|
||||||
|
cd_safe "${dir##*/}"
|
||||||
|
if ! (bzr pull "$dir" -q --overwrite -r "$rev" && bzr clean-tree -q --detritus --force); then
|
||||||
|
error "$(gettext "Failure while updating working copy of %s %s repo")" "${repo}" "bzr"
|
||||||
|
plain "$(gettext "Aborting...")"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
elif ! bzr checkout "$dir" -r "$rev"; then
|
||||||
|
error "$(gettext "Failure while creating working copy of %s %s repo")" "${repo}" "bzr"
|
||||||
|
plain "$(gettext "Aborting...")"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
popd &>/dev/null
|
||||||
|
}
|
147
scripts/libmakepkg/source/file.sh.in
Normal file
147
scripts/libmakepkg/source/file.sh.in
Normal file
|
@ -0,0 +1,147 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# file.sh - function for handling the download and extraction of source files
|
||||||
|
#
|
||||||
|
# Copyright (c) 2015 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_FILE_SH" ]] && return
|
||||||
|
LIBMAKEPKG_SOURCE_FILE_SH=1
|
||||||
|
|
||||||
|
|
||||||
|
LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
|
||||||
|
|
||||||
|
source "$LIBRARY/util/message.sh"
|
||||||
|
source "$LIBRARY/util/pkgbuild.sh"
|
||||||
|
|
||||||
|
|
||||||
|
download_file() {
|
||||||
|
local netfile=$1
|
||||||
|
|
||||||
|
local filepath=$(get_filepath "$netfile")
|
||||||
|
if [[ -n "$filepath" ]]; then
|
||||||
|
msg2 "$(gettext "Found %s")" "${filepath##*/}"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
local proto=$(get_protocol "$netfile")
|
||||||
|
|
||||||
|
# find the client we should use for this URL
|
||||||
|
local -a cmdline
|
||||||
|
IFS=' ' read -a cmdline < <(get_downloadclient "$proto")
|
||||||
|
(( ${#cmdline[@]} )) || exit
|
||||||
|
|
||||||
|
local filename=$(get_filename "$netfile")
|
||||||
|
local url=$(get_url "$netfile")
|
||||||
|
|
||||||
|
if [[ $proto = "scp" ]]; then
|
||||||
|
# scp downloads should not pass the protocol in the url
|
||||||
|
url="${url##*://}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
msg2 "$(gettext "Downloading %s...")" "$filename"
|
||||||
|
|
||||||
|
# temporary download file, default to last component of the URL
|
||||||
|
local dlfile="${url##*/}"
|
||||||
|
|
||||||
|
# replace %o by the temporary dlfile if it exists
|
||||||
|
if [[ ${cmdline[*]} = *%o* ]]; then
|
||||||
|
dlfile=$filename.part
|
||||||
|
cmdline=("${cmdline[@]//%o/$dlfile}")
|
||||||
|
fi
|
||||||
|
# add the URL, either in place of %u or at the end
|
||||||
|
if [[ ${cmdline[*]} = *%u* ]]; then
|
||||||
|
cmdline=("${cmdline[@]//%u/$url}")
|
||||||
|
else
|
||||||
|
cmdline+=("$url")
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! command -- "${cmdline[@]}" >&2; then
|
||||||
|
[[ ! -s $dlfile ]] && rm -f -- "$dlfile"
|
||||||
|
error "$(gettext "Failure while downloading %s")" "$filename"
|
||||||
|
plain "$(gettext "Aborting...")"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# rename the temporary download file to the final destination
|
||||||
|
if [[ $dlfile != "$filename" ]]; then
|
||||||
|
mv -f "$SRCDEST/$dlfile" "$SRCDEST/$filename"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
extract_file() {
|
||||||
|
local file=$1
|
||||||
|
|
||||||
|
local filepath=$(get_filepath "$file")
|
||||||
|
rm -f "$srcdir/${file}"
|
||||||
|
ln -s "$filepath" "$srcdir/"
|
||||||
|
|
||||||
|
if in_array "$file" "${noextract[@]}"; then
|
||||||
|
# skip source files in the noextract=() array
|
||||||
|
# these are marked explicitly to NOT be extracted
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# do not rely on extension for file type
|
||||||
|
local file_type=$(file -bizL "$file")
|
||||||
|
local ext=${file##*.}
|
||||||
|
local cmd=''
|
||||||
|
case "$file_type" in
|
||||||
|
*application/x-tar*|*application/zip*|*application/x-zip*|*application/x-cpio*)
|
||||||
|
cmd="bsdtar" ;;
|
||||||
|
*application/x-gzip*)
|
||||||
|
case "$ext" in
|
||||||
|
gz|z|Z) cmd="gzip" ;;
|
||||||
|
*) return;;
|
||||||
|
esac ;;
|
||||||
|
*application/x-bzip*)
|
||||||
|
case "$ext" in
|
||||||
|
bz2|bz) cmd="bzip2" ;;
|
||||||
|
*) return;;
|
||||||
|
esac ;;
|
||||||
|
*application/x-xz*)
|
||||||
|
case "$ext" in
|
||||||
|
xz) cmd="xz" ;;
|
||||||
|
*) return;;
|
||||||
|
esac ;;
|
||||||
|
*)
|
||||||
|
# See if bsdtar can recognize the file
|
||||||
|
if bsdtar -tf "$file" -q '*' &>/dev/null; then
|
||||||
|
cmd="bsdtar"
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
fi ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
local ret=0
|
||||||
|
msg2 "$(gettext "Extracting %s with %s")" "$file" "$cmd"
|
||||||
|
if [[ $cmd = "bsdtar" ]]; then
|
||||||
|
$cmd -xf "$file" || ret=$?
|
||||||
|
else
|
||||||
|
rm -f -- "${file%.*}"
|
||||||
|
$cmd -dcf "$file" > "${file%.*}" || ret=$?
|
||||||
|
fi
|
||||||
|
if (( ret )); then
|
||||||
|
error "$(gettext "Failed to extract %s")" "$file"
|
||||||
|
plain "$(gettext "Aborting...")"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (( EUID == 0 )); then
|
||||||
|
# change perms of all source files to root user & root group
|
||||||
|
chown -R 0:0 "$srcdir"
|
||||||
|
fi
|
||||||
|
}
|
127
scripts/libmakepkg/source/git.sh.in
Normal file
127
scripts/libmakepkg/source/git.sh.in
Normal file
|
@ -0,0 +1,127 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# git.sh - function for handling the download and "extraction" of Git sources
|
||||||
|
#
|
||||||
|
# Copyright (c) 2015 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_GIT_SH" ]] && return
|
||||||
|
LIBMAKEPKG_SOURCE_GIT_SH=1
|
||||||
|
|
||||||
|
|
||||||
|
LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
|
||||||
|
|
||||||
|
source "$LIBRARY/util/message.sh"
|
||||||
|
source "$LIBRARY/util/pkgbuild.sh"
|
||||||
|
|
||||||
|
|
||||||
|
download_git() {
|
||||||
|
local netfile=$1
|
||||||
|
|
||||||
|
local dir=$(get_filepath "$netfile")
|
||||||
|
[[ -z "$dir" ]] && dir="$SRCDEST/$(get_filename "$netfile")"
|
||||||
|
|
||||||
|
local repo=$(get_filename "$netfile")
|
||||||
|
|
||||||
|
local url=$(get_url "$netfile")
|
||||||
|
url=${url#git+}
|
||||||
|
url=${url%%#*}
|
||||||
|
|
||||||
|
if [[ ! -d "$dir" ]] || dir_is_empty "$dir" ; then
|
||||||
|
msg2 "$(gettext "Cloning %s %s repo...")" "${repo}" "git"
|
||||||
|
if ! git clone --mirror "$url" "$dir"; then
|
||||||
|
error "$(gettext "Failure while downloading %s %s repo")" "${repo}" "git"
|
||||||
|
plain "$(gettext "Aborting...")"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
elif (( ! HOLDVER )); then
|
||||||
|
cd_safe "$dir"
|
||||||
|
# Make sure we are fetching the right repo
|
||||||
|
if [[ "$url" != "$(git config --get remote.origin.url)" ]] ; then
|
||||||
|
error "$(gettext "%s is not a clone of %s")" "$dir" "$url"
|
||||||
|
plain "$(gettext "Aborting...")"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
msg2 "$(gettext "Updating %s %s repo...")" "${repo}" "git"
|
||||||
|
if ! git fetch --all -p; then
|
||||||
|
# only warn on failure to allow offline builds
|
||||||
|
warning "$(gettext "Failure while updating %s %s repo")" "${repo}" "git"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
extract_git() {
|
||||||
|
local netfile=$1
|
||||||
|
|
||||||
|
local fragment=${netfile#*#}
|
||||||
|
if [[ $fragment = "$netfile" ]]; then
|
||||||
|
unset fragment
|
||||||
|
fi
|
||||||
|
|
||||||
|
local repo=${netfile##*/}
|
||||||
|
repo=${repo%%#*}
|
||||||
|
repo=${repo%%.git*}
|
||||||
|
|
||||||
|
local dir=$(get_filepath "$netfile")
|
||||||
|
[[ -z "$dir" ]] && dir="$SRCDEST/$(get_filename "$netfile")"
|
||||||
|
|
||||||
|
msg2 "$(gettext "Creating working copy of %s %s repo...")" "${repo}" "git"
|
||||||
|
pushd "$srcdir" &>/dev/null
|
||||||
|
|
||||||
|
local updating=0
|
||||||
|
if [[ -d "${dir##*/}" ]]; then
|
||||||
|
updating=1
|
||||||
|
cd_safe "${dir##*/}"
|
||||||
|
if ! git fetch; then
|
||||||
|
error "$(gettext "Failure while updating working copy of %s %s repo")" "${repo}" "git"
|
||||||
|
plain "$(gettext "Aborting...")"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
cd_safe "$srcdir"
|
||||||
|
elif ! git clone "$dir" "${dir##*/}"; then
|
||||||
|
error "$(gettext "Failure while creating working copy of %s %s repo")" "${repo}" "git"
|
||||||
|
plain "$(gettext "Aborting...")"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd_safe "${dir##*/}"
|
||||||
|
|
||||||
|
local ref=origin/HEAD
|
||||||
|
if [[ -n $fragment ]]; then
|
||||||
|
case ${fragment%%=*} in
|
||||||
|
commit|tag)
|
||||||
|
ref=${fragment##*=}
|
||||||
|
;;
|
||||||
|
branch)
|
||||||
|
ref=origin/${fragment##*=}
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
error "$(gettext "Unrecognized reference: %s")" "${fragment}"
|
||||||
|
plain "$(gettext "Aborting...")"
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $ref != "origin/HEAD" ]] || (( updating )) ; then
|
||||||
|
if ! git checkout --force --no-track -B makepkg $ref; then
|
||||||
|
error "$(gettext "Failure while creating working copy of %s %s repo")" "${repo}" "git"
|
||||||
|
plain "$(gettext "Aborting...")"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
popd &>/dev/null
|
||||||
|
}
|
104
scripts/libmakepkg/source/hg.sh.in
Normal file
104
scripts/libmakepkg/source/hg.sh.in
Normal file
|
@ -0,0 +1,104 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# hg.sh - function for handling the download and "extraction" of Mercurial sources
|
||||||
|
#
|
||||||
|
# Copyright (c) 2015 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_HG_SH" ]] && return
|
||||||
|
LIBMAKEPKG_SOURCE_HG_SH=1
|
||||||
|
|
||||||
|
|
||||||
|
LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
|
||||||
|
|
||||||
|
source "$LIBRARY/util/message.sh"
|
||||||
|
source "$LIBRARY/util/pkgbuild.sh"
|
||||||
|
|
||||||
|
|
||||||
|
download_hg() {
|
||||||
|
local netfile=$1
|
||||||
|
|
||||||
|
local dir=$(get_filepath "$netfile")
|
||||||
|
[[ -z "$dir" ]] && dir="$SRCDEST/$(get_filename "$netfile")"
|
||||||
|
|
||||||
|
local repo=$(get_filename "$netfile")
|
||||||
|
|
||||||
|
local url=$(get_url "$netfile")
|
||||||
|
url=${url#hg+}
|
||||||
|
url=${url%%#*}
|
||||||
|
|
||||||
|
if [[ ! -d "$dir" ]] || dir_is_empty "$dir" ; then
|
||||||
|
msg2 "$(gettext "Cloning %s %s repo...")" "${repo}" "hg"
|
||||||
|
if ! hg clone -U "$url" "$dir"; then
|
||||||
|
error "$(gettext "Failure while downloading %s %s repo")" "${repo}" "hg"
|
||||||
|
plain "$(gettext "Aborting...")"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
elif (( ! HOLDVER )); then
|
||||||
|
msg2 "$(gettext "Updating %s %s repo...")" "${repo}" "hg"
|
||||||
|
cd_safe "$dir"
|
||||||
|
if ! hg pull; then
|
||||||
|
# only warn on failure to allow offline builds
|
||||||
|
warning "$(gettext "Failure while updating %s %s repo")" "${repo}" "hg"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
extract_hg() {
|
||||||
|
local netfile=$1
|
||||||
|
|
||||||
|
local fragment=${netfile#*#}
|
||||||
|
if [[ $fragment = "$netfile" ]]; then
|
||||||
|
unset fragment
|
||||||
|
fi
|
||||||
|
|
||||||
|
local dir=$(get_filepath "$netfile")
|
||||||
|
[[ -z "$dir" ]] && dir="$SRCDEST/$(get_filename "$netfile")"
|
||||||
|
|
||||||
|
local repo=${netfile##*/}
|
||||||
|
repo=${repo%%#*}
|
||||||
|
|
||||||
|
msg2 "$(gettext "Creating working copy of %s %s repo...")" "${repo}" "hg"
|
||||||
|
pushd "$srcdir" &>/dev/null
|
||||||
|
|
||||||
|
local ref=tip
|
||||||
|
if [[ -n $fragment ]]; then
|
||||||
|
case ${fragment%%=*} in
|
||||||
|
branch|revision|tag)
|
||||||
|
ref="${fragment##*=}"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
error "$(gettext "Unrecognized reference: %s")" "${fragment}"
|
||||||
|
plain "$(gettext "Aborting...")"
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -d "${dir##*/}" ]]; then
|
||||||
|
cd_safe "${dir##*/}"
|
||||||
|
if ! (hg pull && hg update -C -r "$ref"); then
|
||||||
|
error "$(gettext "Failure while updating working copy of %s %s repo")" "${repo}" "hg"
|
||||||
|
plain "$(gettext "Aborting...")"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
elif ! hg clone -u "$ref" "$dir" "${dir##*/}"; then
|
||||||
|
error "$(gettext "Failure while creating working copy of %s %s repo")" "${repo}" "hg"
|
||||||
|
plain "$(gettext "Aborting...")"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
popd &>/dev/null
|
||||||
|
}
|
42
scripts/libmakepkg/source/local.sh.in
Normal file
42
scripts/libmakepkg/source/local.sh.in
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# local.sh - function for handling the "download" of local sources
|
||||||
|
#
|
||||||
|
# Copyright (c) 2015 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_LOCAL_SH" ]] && return
|
||||||
|
LIBMAKEPKG_SOURCE_LOCAL_SH=1
|
||||||
|
|
||||||
|
|
||||||
|
LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
|
||||||
|
|
||||||
|
source "$LIBRARY/util/message.sh"
|
||||||
|
source "$LIBRARY/util/pkgbuild.sh"
|
||||||
|
|
||||||
|
|
||||||
|
download_local() {
|
||||||
|
local netfile=$1
|
||||||
|
local filepath=$(get_filepath "$netfile")
|
||||||
|
|
||||||
|
if [[ -n "$filepath" ]]; then
|
||||||
|
msg2 "$(gettext "Found %s")" "${filepath##*/}"
|
||||||
|
else
|
||||||
|
local filename=$(get_filename "$netfile")
|
||||||
|
error "$(gettext "%s was not found in the build directory and is not a URL.")" "$filename"
|
||||||
|
exit 1 # $E_MISSING_FILE
|
||||||
|
fi
|
||||||
|
}
|
93
scripts/libmakepkg/source/svn.sh.in
Normal file
93
scripts/libmakepkg/source/svn.sh.in
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# svn.sh - function for handling the download and "extraction" of Subversion sources
|
||||||
|
#
|
||||||
|
# Copyright (c) 2015 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_SVN_SH" ]] && return
|
||||||
|
LIBMAKEPKG_SOURCE_SVN_SH=1
|
||||||
|
|
||||||
|
|
||||||
|
LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
|
||||||
|
|
||||||
|
source "$LIBRARY/util/message.sh"
|
||||||
|
source "$LIBRARY/util/pkgbuild.sh"
|
||||||
|
|
||||||
|
|
||||||
|
download_svn() {
|
||||||
|
local netfile=$1
|
||||||
|
|
||||||
|
local fragment=${netfile#*#}
|
||||||
|
if [[ $fragment = "$netfile" ]]; then
|
||||||
|
unset fragment
|
||||||
|
fi
|
||||||
|
|
||||||
|
local dir=$(get_filepath "$netfile")
|
||||||
|
[[ -z "$dir" ]] && dir="$SRCDEST/$(get_filename "$netfile")"
|
||||||
|
|
||||||
|
local repo=$(get_filename "$netfile")
|
||||||
|
|
||||||
|
local url=$(get_url "$netfile")
|
||||||
|
if [[ $url != svn+ssh* ]]; then
|
||||||
|
url=${url#svn+}
|
||||||
|
fi
|
||||||
|
url=${url%%#*}
|
||||||
|
|
||||||
|
local ref=HEAD
|
||||||
|
if [[ -n $fragment ]]; then
|
||||||
|
case ${fragment%%=*} in
|
||||||
|
revision)
|
||||||
|
ref="${fragment##*=}"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
error "$(gettext "Unrecognized reference: %s")" "${fragment}"
|
||||||
|
plain "$(gettext "Aborting...")"
|
||||||
|
exit 1
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -d "$dir" ]] || dir_is_empty "$dir" ; then
|
||||||
|
msg2 "$(gettext "Cloning %s %s repo...")" "${repo}" "svn"
|
||||||
|
mkdir -p "$dir/.makepkg"
|
||||||
|
if ! svn checkout -r ${ref} --config-dir "$dir/.makepkg" "$url" "$dir"; then
|
||||||
|
error "$(gettext "Failure while downloading %s %s repo")" "${repo}" "svn"
|
||||||
|
plain "$(gettext "Aborting...")"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
elif (( ! HOLDVER )); then
|
||||||
|
msg2 "$(gettext "Updating %s %s repo...")" "${repo}" "svn"
|
||||||
|
cd_safe "$dir"
|
||||||
|
if ! svn update -r ${ref}; then
|
||||||
|
# only warn on failure to allow offline builds
|
||||||
|
warning "$(gettext "Failure while updating %s %s repo")" "${repo}" "svn"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
extract_svn() {
|
||||||
|
local netfile=$1
|
||||||
|
|
||||||
|
local dir=$(get_filepath "$netfile")
|
||||||
|
[[ -z "$dir" ]] && dir="$SRCDEST/$(get_filename "$netfile")"
|
||||||
|
|
||||||
|
local repo=${netfile##*/}
|
||||||
|
repo=${repo%%#*}
|
||||||
|
|
||||||
|
msg2 "$(gettext "Creating working copy of %s %s repo...")" "${repo}" "svn"
|
||||||
|
|
||||||
|
cp -au "$dir" "$srcdir"
|
||||||
|
}
|
|
@ -175,502 +175,6 @@ enter_fakeroot() {
|
||||||
fakeroot -- $0 -F "${ARGLIST[@]}" || exit $?
|
fakeroot -- $0 -F "${ARGLIST[@]}" || exit $?
|
||||||
}
|
}
|
||||||
|
|
||||||
download_local() {
|
|
||||||
local netfile=$1
|
|
||||||
local filepath=$(get_filepath "$netfile")
|
|
||||||
|
|
||||||
if [[ -n "$filepath" ]]; then
|
|
||||||
msg2 "$(gettext "Found %s")" "${filepath##*/}"
|
|
||||||
else
|
|
||||||
local filename=$(get_filename "$netfile")
|
|
||||||
error "$(gettext "%s was not found in the build directory and is not a URL.")" "$filename"
|
|
||||||
exit 1 # $E_MISSING_FILE
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
download_file() {
|
|
||||||
local netfile=$1
|
|
||||||
|
|
||||||
local filepath=$(get_filepath "$netfile")
|
|
||||||
if [[ -n "$filepath" ]]; then
|
|
||||||
msg2 "$(gettext "Found %s")" "${filepath##*/}"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
local proto=$(get_protocol "$netfile")
|
|
||||||
|
|
||||||
# find the client we should use for this URL
|
|
||||||
local -a cmdline
|
|
||||||
IFS=' ' read -a cmdline < <(get_downloadclient "$proto")
|
|
||||||
(( ${#cmdline[@]} )) || exit
|
|
||||||
|
|
||||||
local filename=$(get_filename "$netfile")
|
|
||||||
local url=$(get_url "$netfile")
|
|
||||||
|
|
||||||
if [[ $proto = "scp" ]]; then
|
|
||||||
# scp downloads should not pass the protocol in the url
|
|
||||||
url="${url##*://}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
msg2 "$(gettext "Downloading %s...")" "$filename"
|
|
||||||
|
|
||||||
# temporary download file, default to last component of the URL
|
|
||||||
local dlfile="${url##*/}"
|
|
||||||
|
|
||||||
# replace %o by the temporary dlfile if it exists
|
|
||||||
if [[ ${cmdline[*]} = *%o* ]]; then
|
|
||||||
dlfile=$filename.part
|
|
||||||
cmdline=("${cmdline[@]//%o/$dlfile}")
|
|
||||||
fi
|
|
||||||
# add the URL, either in place of %u or at the end
|
|
||||||
if [[ ${cmdline[*]} = *%u* ]]; then
|
|
||||||
cmdline=("${cmdline[@]//%u/$url}")
|
|
||||||
else
|
|
||||||
cmdline+=("$url")
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! command -- "${cmdline[@]}" >&2; then
|
|
||||||
[[ ! -s $dlfile ]] && rm -f -- "$dlfile"
|
|
||||||
error "$(gettext "Failure while downloading %s")" "$filename"
|
|
||||||
plain "$(gettext "Aborting...")"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# rename the temporary download file to the final destination
|
|
||||||
if [[ $dlfile != "$filename" ]]; then
|
|
||||||
mv -f "$SRCDEST/$dlfile" "$SRCDEST/$filename"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
extract_file() {
|
|
||||||
local file=$1
|
|
||||||
|
|
||||||
local filepath=$(get_filepath "$file")
|
|
||||||
rm -f "$srcdir/${file}"
|
|
||||||
ln -s "$filepath" "$srcdir/"
|
|
||||||
|
|
||||||
if in_array "$file" "${noextract[@]}"; then
|
|
||||||
# skip source files in the noextract=() array
|
|
||||||
# these are marked explicitly to NOT be extracted
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
# do not rely on extension for file type
|
|
||||||
local file_type=$(file -bizL "$file")
|
|
||||||
local ext=${file##*.}
|
|
||||||
local cmd=''
|
|
||||||
case "$file_type" in
|
|
||||||
*application/x-tar*|*application/zip*|*application/x-zip*|*application/x-cpio*)
|
|
||||||
cmd="bsdtar" ;;
|
|
||||||
*application/x-gzip*)
|
|
||||||
case "$ext" in
|
|
||||||
gz|z|Z) cmd="gzip" ;;
|
|
||||||
*) return;;
|
|
||||||
esac ;;
|
|
||||||
*application/x-bzip*)
|
|
||||||
case "$ext" in
|
|
||||||
bz2|bz) cmd="bzip2" ;;
|
|
||||||
*) return;;
|
|
||||||
esac ;;
|
|
||||||
*application/x-xz*)
|
|
||||||
case "$ext" in
|
|
||||||
xz) cmd="xz" ;;
|
|
||||||
*) return;;
|
|
||||||
esac ;;
|
|
||||||
*)
|
|
||||||
# See if bsdtar can recognize the file
|
|
||||||
if bsdtar -tf "$file" -q '*' &>/dev/null; then
|
|
||||||
cmd="bsdtar"
|
|
||||||
else
|
|
||||||
return 0
|
|
||||||
fi ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
local ret=0
|
|
||||||
msg2 "$(gettext "Extracting %s with %s")" "$file" "$cmd"
|
|
||||||
if [[ $cmd = "bsdtar" ]]; then
|
|
||||||
$cmd -xf "$file" || ret=$?
|
|
||||||
else
|
|
||||||
rm -f -- "${file%.*}"
|
|
||||||
$cmd -dcf "$file" > "${file%.*}" || ret=$?
|
|
||||||
fi
|
|
||||||
if (( ret )); then
|
|
||||||
error "$(gettext "Failed to extract %s")" "$file"
|
|
||||||
plain "$(gettext "Aborting...")"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if (( EUID == 0 )); then
|
|
||||||
# change perms of all source files to root user & root group
|
|
||||||
chown -R 0:0 "$srcdir"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
download_bzr() {
|
|
||||||
local netfile=$1
|
|
||||||
|
|
||||||
local url=$(get_url "$netfile")
|
|
||||||
if [[ $url != bzr+ssh* ]]; then
|
|
||||||
url=${url#bzr+}
|
|
||||||
fi
|
|
||||||
url=${url%%#*}
|
|
||||||
|
|
||||||
local repo=$(get_filename "$netfile")
|
|
||||||
local displaylocation="$url"
|
|
||||||
|
|
||||||
local dir=$(get_filepath "$netfile")
|
|
||||||
[[ -z "$dir" ]] && dir="$SRCDEST/$(get_filename "$netfile")"
|
|
||||||
|
|
||||||
if [[ ! -d "$dir" ]] || dir_is_empty "$dir" ; then
|
|
||||||
msg2 "$(gettext "Branching %s ...")" "${displaylocation}"
|
|
||||||
if ! bzr branch "$url" "$dir" --no-tree --use-existing-dir; then
|
|
||||||
error "$(gettext "Failure while branching %s")" "${displaylocation}"
|
|
||||||
plain "$(gettext "Aborting...")"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
elif (( ! HOLDVER )); then
|
|
||||||
msg2 "$(gettext "Pulling %s ...")" "${displaylocation}"
|
|
||||||
cd_safe "$dir"
|
|
||||||
if ! bzr pull "$url"; then
|
|
||||||
# only warn on failure to allow offline builds
|
|
||||||
warning "$(gettext "Failure while pulling %s")" "${displaylocation}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
extract_bzr() {
|
|
||||||
local netfile=$1
|
|
||||||
|
|
||||||
local repo=$(get_filename "$netfile")
|
|
||||||
local fragment=${netfile#*#}
|
|
||||||
if [[ $fragment = "$netfile" ]]; then
|
|
||||||
unset fragment
|
|
||||||
fi
|
|
||||||
|
|
||||||
rev="last:1"
|
|
||||||
if [[ -n $fragment ]]; then
|
|
||||||
case ${fragment%%=*} in
|
|
||||||
revision)
|
|
||||||
rev="${fragment#*=}"
|
|
||||||
displaylocation="$url -r ${fragment#*=}"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
error "$(gettext "Unrecognized reference: %s")" "${fragment}"
|
|
||||||
plain "$(gettext "Aborting...")"
|
|
||||||
exit 1
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
local dir=$(get_filepath "$netfile")
|
|
||||||
[[ -z "$dir" ]] && dir="$SRCDEST/$(get_filename "$netfile")"
|
|
||||||
|
|
||||||
msg2 "$(gettext "Creating working copy of %s %s repo...")" "${repo}" "bzr"
|
|
||||||
pushd "$srcdir" &>/dev/null
|
|
||||||
|
|
||||||
if [[ -d "${dir##*/}" ]]; then
|
|
||||||
cd_safe "${dir##*/}"
|
|
||||||
if ! (bzr pull "$dir" -q --overwrite -r "$rev" && bzr clean-tree -q --detritus --force); then
|
|
||||||
error "$(gettext "Failure while updating working copy of %s %s repo")" "${repo}" "bzr"
|
|
||||||
plain "$(gettext "Aborting...")"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
elif ! bzr checkout "$dir" -r "$rev"; then
|
|
||||||
error "$(gettext "Failure while creating working copy of %s %s repo")" "${repo}" "bzr"
|
|
||||||
plain "$(gettext "Aborting...")"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
popd &>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
download_git() {
|
|
||||||
local netfile=$1
|
|
||||||
|
|
||||||
local dir=$(get_filepath "$netfile")
|
|
||||||
[[ -z "$dir" ]] && dir="$SRCDEST/$(get_filename "$netfile")"
|
|
||||||
|
|
||||||
local repo=$(get_filename "$netfile")
|
|
||||||
|
|
||||||
local url=$(get_url "$netfile")
|
|
||||||
url=${url#git+}
|
|
||||||
url=${url%%#*}
|
|
||||||
|
|
||||||
if [[ ! -d "$dir" ]] || dir_is_empty "$dir" ; then
|
|
||||||
msg2 "$(gettext "Cloning %s %s repo...")" "${repo}" "git"
|
|
||||||
if ! git clone --mirror "$url" "$dir"; then
|
|
||||||
error "$(gettext "Failure while downloading %s %s repo")" "${repo}" "git"
|
|
||||||
plain "$(gettext "Aborting...")"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
elif (( ! HOLDVER )); then
|
|
||||||
cd_safe "$dir"
|
|
||||||
# Make sure we are fetching the right repo
|
|
||||||
if [[ "$url" != "$(git config --get remote.origin.url)" ]] ; then
|
|
||||||
error "$(gettext "%s is not a clone of %s")" "$dir" "$url"
|
|
||||||
plain "$(gettext "Aborting...")"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
msg2 "$(gettext "Updating %s %s repo...")" "${repo}" "git"
|
|
||||||
if ! git fetch --all -p; then
|
|
||||||
# only warn on failure to allow offline builds
|
|
||||||
warning "$(gettext "Failure while updating %s %s repo")" "${repo}" "git"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
extract_git() {
|
|
||||||
local netfile=$1
|
|
||||||
|
|
||||||
local fragment=${netfile#*#}
|
|
||||||
if [[ $fragment = "$netfile" ]]; then
|
|
||||||
unset fragment
|
|
||||||
fi
|
|
||||||
|
|
||||||
local repo=${netfile##*/}
|
|
||||||
repo=${repo%%#*}
|
|
||||||
repo=${repo%%.git*}
|
|
||||||
|
|
||||||
local dir=$(get_filepath "$netfile")
|
|
||||||
[[ -z "$dir" ]] && dir="$SRCDEST/$(get_filename "$netfile")"
|
|
||||||
|
|
||||||
msg2 "$(gettext "Creating working copy of %s %s repo...")" "${repo}" "git"
|
|
||||||
pushd "$srcdir" &>/dev/null
|
|
||||||
|
|
||||||
local updating=0
|
|
||||||
if [[ -d "${dir##*/}" ]]; then
|
|
||||||
updating=1
|
|
||||||
cd_safe "${dir##*/}"
|
|
||||||
if ! git fetch; then
|
|
||||||
error "$(gettext "Failure while updating working copy of %s %s repo")" "${repo}" "git"
|
|
||||||
plain "$(gettext "Aborting...")"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
cd_safe "$srcdir"
|
|
||||||
elif ! git clone "$dir" "${dir##*/}"; then
|
|
||||||
error "$(gettext "Failure while creating working copy of %s %s repo")" "${repo}" "git"
|
|
||||||
plain "$(gettext "Aborting...")"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd_safe "${dir##*/}"
|
|
||||||
|
|
||||||
local ref=origin/HEAD
|
|
||||||
if [[ -n $fragment ]]; then
|
|
||||||
case ${fragment%%=*} in
|
|
||||||
commit|tag)
|
|
||||||
ref=${fragment##*=}
|
|
||||||
;;
|
|
||||||
branch)
|
|
||||||
ref=origin/${fragment##*=}
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
error "$(gettext "Unrecognized reference: %s")" "${fragment}"
|
|
||||||
plain "$(gettext "Aborting...")"
|
|
||||||
exit 1
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ $ref != "origin/HEAD" ]] || (( updating )) ; then
|
|
||||||
if ! git checkout --force --no-track -B makepkg $ref; then
|
|
||||||
error "$(gettext "Failure while creating working copy of %s %s repo")" "${repo}" "git"
|
|
||||||
plain "$(gettext "Aborting...")"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
popd &>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
download_hg() {
|
|
||||||
local netfile=$1
|
|
||||||
|
|
||||||
local dir=$(get_filepath "$netfile")
|
|
||||||
[[ -z "$dir" ]] && dir="$SRCDEST/$(get_filename "$netfile")"
|
|
||||||
|
|
||||||
local repo=$(get_filename "$netfile")
|
|
||||||
|
|
||||||
local url=$(get_url "$netfile")
|
|
||||||
url=${url#hg+}
|
|
||||||
url=${url%%#*}
|
|
||||||
|
|
||||||
if [[ ! -d "$dir" ]] || dir_is_empty "$dir" ; then
|
|
||||||
msg2 "$(gettext "Cloning %s %s repo...")" "${repo}" "hg"
|
|
||||||
if ! hg clone -U "$url" "$dir"; then
|
|
||||||
error "$(gettext "Failure while downloading %s %s repo")" "${repo}" "hg"
|
|
||||||
plain "$(gettext "Aborting...")"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
elif (( ! HOLDVER )); then
|
|
||||||
msg2 "$(gettext "Updating %s %s repo...")" "${repo}" "hg"
|
|
||||||
cd_safe "$dir"
|
|
||||||
if ! hg pull; then
|
|
||||||
# only warn on failure to allow offline builds
|
|
||||||
warning "$(gettext "Failure while updating %s %s repo")" "${repo}" "hg"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
extract_hg() {
|
|
||||||
local netfile=$1
|
|
||||||
|
|
||||||
local fragment=${netfile#*#}
|
|
||||||
if [[ $fragment = "$netfile" ]]; then
|
|
||||||
unset fragment
|
|
||||||
fi
|
|
||||||
|
|
||||||
local dir=$(get_filepath "$netfile")
|
|
||||||
[[ -z "$dir" ]] && dir="$SRCDEST/$(get_filename "$netfile")"
|
|
||||||
|
|
||||||
local repo=${netfile##*/}
|
|
||||||
repo=${repo%%#*}
|
|
||||||
|
|
||||||
msg2 "$(gettext "Creating working copy of %s %s repo...")" "${repo}" "hg"
|
|
||||||
pushd "$srcdir" &>/dev/null
|
|
||||||
|
|
||||||
local ref=tip
|
|
||||||
if [[ -n $fragment ]]; then
|
|
||||||
case ${fragment%%=*} in
|
|
||||||
branch|revision|tag)
|
|
||||||
ref="${fragment##*=}"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
error "$(gettext "Unrecognized reference: %s")" "${fragment}"
|
|
||||||
plain "$(gettext "Aborting...")"
|
|
||||||
exit 1
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -d "${dir##*/}" ]]; then
|
|
||||||
cd_safe "${dir##*/}"
|
|
||||||
if ! (hg pull && hg update -C -r "$ref"); then
|
|
||||||
error "$(gettext "Failure while updating working copy of %s %s repo")" "${repo}" "hg"
|
|
||||||
plain "$(gettext "Aborting...")"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
elif ! hg clone -u "$ref" "$dir" "${dir##*/}"; then
|
|
||||||
error "$(gettext "Failure while creating working copy of %s %s repo")" "${repo}" "hg"
|
|
||||||
plain "$(gettext "Aborting...")"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
popd &>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
download_svn() {
|
|
||||||
local netfile=$1
|
|
||||||
|
|
||||||
local fragment=${netfile#*#}
|
|
||||||
if [[ $fragment = "$netfile" ]]; then
|
|
||||||
unset fragment
|
|
||||||
fi
|
|
||||||
|
|
||||||
local dir=$(get_filepath "$netfile")
|
|
||||||
[[ -z "$dir" ]] && dir="$SRCDEST/$(get_filename "$netfile")"
|
|
||||||
|
|
||||||
local repo=$(get_filename "$netfile")
|
|
||||||
|
|
||||||
local url=$(get_url "$netfile")
|
|
||||||
if [[ $url != svn+ssh* ]]; then
|
|
||||||
url=${url#svn+}
|
|
||||||
fi
|
|
||||||
url=${url%%#*}
|
|
||||||
|
|
||||||
local ref=HEAD
|
|
||||||
if [[ -n $fragment ]]; then
|
|
||||||
case ${fragment%%=*} in
|
|
||||||
revision)
|
|
||||||
ref="${fragment##*=}"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
error "$(gettext "Unrecognized reference: %s")" "${fragment}"
|
|
||||||
plain "$(gettext "Aborting...")"
|
|
||||||
exit 1
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ! -d "$dir" ]] || dir_is_empty "$dir" ; then
|
|
||||||
msg2 "$(gettext "Cloning %s %s repo...")" "${repo}" "svn"
|
|
||||||
mkdir -p "$dir/.makepkg"
|
|
||||||
if ! svn checkout -r ${ref} --config-dir "$dir/.makepkg" "$url" "$dir"; then
|
|
||||||
error "$(gettext "Failure while downloading %s %s repo")" "${repo}" "svn"
|
|
||||||
plain "$(gettext "Aborting...")"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
elif (( ! HOLDVER )); then
|
|
||||||
msg2 "$(gettext "Updating %s %s repo...")" "${repo}" "svn"
|
|
||||||
cd_safe "$dir"
|
|
||||||
if ! svn update -r ${ref}; then
|
|
||||||
# only warn on failure to allow offline builds
|
|
||||||
warning "$(gettext "Failure while updating %s %s repo")" "${repo}" "svn"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
extract_svn() {
|
|
||||||
local netfile=$1
|
|
||||||
|
|
||||||
local dir=$(get_filepath "$netfile")
|
|
||||||
[[ -z "$dir" ]] && dir="$SRCDEST/$(get_filename "$netfile")"
|
|
||||||
|
|
||||||
local repo=${netfile##*/}
|
|
||||||
repo=${repo%%#*}
|
|
||||||
|
|
||||||
msg2 "$(gettext "Creating working copy of %s %s repo...")" "${repo}" "svn"
|
|
||||||
|
|
||||||
cp -au "$dir" "$srcdir"
|
|
||||||
}
|
|
||||||
|
|
||||||
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 2
|
|
||||||
;;
|
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
# Automatically update pkgver variable if a pkgver() function is provided
|
# Automatically update pkgver variable if a pkgver() function is provided
|
||||||
# Re-sources the PKGBUILD afterwards to allow for other variables that use $pkgver
|
# Re-sources the PKGBUILD afterwards to allow for other variables that use $pkgver
|
||||||
update_pkgver() {
|
update_pkgver() {
|
||||||
|
@ -1226,34 +730,6 @@ check_source_integrity() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
error_function() {
|
error_function() {
|
||||||
if [[ -p $logpipe ]]; then
|
if [[ -p $logpipe ]]; then
|
||||||
rm "$logpipe"
|
rm "$logpipe"
|
||||||
|
|
|
@ -28,6 +28,13 @@ scripts/libmakepkg/lint_pkgbuild/pkgver.sh.in
|
||||||
scripts/libmakepkg/lint_pkgbuild/provides.sh.in
|
scripts/libmakepkg/lint_pkgbuild/provides.sh.in
|
||||||
scripts/libmakepkg/lint_pkgbuild/source.sh.in
|
scripts/libmakepkg/lint_pkgbuild/source.sh.in
|
||||||
scripts/libmakepkg/lint_pkgbuild/util.sh.in
|
scripts/libmakepkg/lint_pkgbuild/util.sh.in
|
||||||
|
scripts/libmakepkg/source.sh.in
|
||||||
|
scripts/libmakepkg/source/bzr.sh.in
|
||||||
|
scripts/libmakepkg/source/file.sh.in
|
||||||
|
scripts/libmakepkg/source/git.sh.in
|
||||||
|
scripts/libmakepkg/source/hg.sh.in
|
||||||
|
scripts/libmakepkg/source/local.sh.in
|
||||||
|
scripts/libmakepkg/source/svn.sh.in
|
||||||
scripts/libmakepkg/tidy.sh.in
|
scripts/libmakepkg/tidy.sh.in
|
||||||
scripts/libmakepkg/tidy/docs.sh.in
|
scripts/libmakepkg/tidy/docs.sh.in
|
||||||
scripts/libmakepkg/tidy/emptydirs.sh.in
|
scripts/libmakepkg/tidy/emptydirs.sh.in
|
||||||
|
|
Loading…
Add table
Reference in a new issue