1
0
mirror of https://github.com/moparisthebest/pacman synced 2024-12-22 15:58:50 -05:00

makepkg: allow using GIT source URLs

Allow specifing GIT sources using the following syntax

source=('<folder>::<repo>#<fragment>')

This will download the git repo <repo> into <folder> (into $SRCDIR
if set, otherwise $startdir). <repo> must start with "git", but
non-git protocols are handled using (e.g.) "git+http://...".

The <fragment> can be used to specify a branch, tag, or commit to
build from. e.g. branch=maint.

Checksum entries for git sources should be "SKIP".

Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
Allan McRae 2012-06-04 10:37:35 +10:00
parent 57e06394dd
commit 91d119af1c

View File

@ -343,6 +343,88 @@ download_file() {
ln -s "$SRCDEST/$filename" "$srcdir/"
}
download_git() {
local netfile=$1
local fragment=${netfile##*#}
if [[ $fragment = "$netfile" ]]; then
unset fragment
fi
local dir=${netfile%%::*}
local repo=${netfile##*/}
repo=${repo%%#*}
repo=${repo%%.git*}
if [[ $dir = "$netfile" ]]; then
dir="${repo}"
fi
if [[ ! -d "$startdir"/$dir ]]; then
dir="$SRCDEST"/$dir
else
dir="$startdir"/$dir
fi
local url=$(get_url "$netfile")
url=${url##*git+}
url=${url%%#*}
if [[ ! -d "$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
else
msg2 "$(gettext "Updating %s %s repo...")" "${repo}" "git"
cd_safe "$dir"
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
msg2 "$(gettext "Creating working copy of %s %s repo...")" "${repo}" "git"
pushd "$srcdir" &>/dev/null
rm -rf "${dir##*/}"
if ! git clone "$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
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 [[ -n $ref ]]; then
if ! git checkout -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_sources() {
msg "$(gettext "Retrieving Sources...")"
@ -359,6 +441,9 @@ download_sources() {
ftp|http|https|rsync|scp)
download_file "$netfile"
;;
git*)
download_git "$netfile"
;;
*)
error "$(gettext "Unknown download protocol: %s")" "$proto"
plain "$(gettext "Aborting...")"