On Wed, Jun 27, 2012 at 08:58:12AM +1000, Allan McRae wrote:
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> --- scripts/makepkg.sh.in | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+)
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index 985bbbd..2b29759 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -341,6 +341,88 @@ download_file() { ln -s "$SRCDEST/$filename" "$srcdir/" }
+download_git() { + local netfile=$1 + + local fragment=${netfile##*#} + if [[ $fragment = "$netfile" ]]; then + unset fragment + fi + + local folder=${netfile%%::*}
This makes my OCD twitch -- dir instead of folder?
+ local repo=${netfile##*/} + repo=${repo%%#*} + repo=${repo%%.git*} + + if [[ $folder = "$netfile" ]]; then + folder="${repo}" + fi + + if [[ ! -d "$startdir"/$folder && -d "$SRCDEST"/$folder ]]; then + folder="$SRCDEST"/$folder + else + folder="$startdir"/$folder + fi
None of the quoting in this block is strictly necessary.
+ + local url=$(get_url "$netfile") + url=${url##*git+} + url=${url%%#*} + + if [[ ! -d $folder ]]; then + msg2 "$(gettext "Cloning %s %s repo...")" "${repo}" "git" + if ! git clone --mirror "$url" "$folder"; 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 "$folder" + 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 ${folder##*/} + + if ! git clone $folder; then
Your spare quotes from above can go here.
+ error "$(gettext "Failure while creating working copy of %s %s repo")" "${repo}" "git" + plain "$(gettext "Aborting...")" + exit 1 + fi + + cd_safe ${folder##*/}
Quotes here too, please.
+ + local ref + if [[ -n $fragment ]]; then + case $fragment in + commit=*|tag*)
tag=* rather than tag* ? You might want to trim $fragment right in the switch to avoid all the glob matching, i.e. case ${fragmen%%=*} in commit|tag) .... branch) ....
+ 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
Is that branch name really intentional here? Why not name it the same as $ref?
+ 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...")"
@@ -357,6 +439,9 @@ download_sources() { ftp|http|https|rsync|scp) download_file "$nethe tfile" ;; + git*) + download_git "$netfile" + ;; *) error "$(gettext "Unknown download protocol: %s")" "$proto" plain "$(gettext "Aborting...")" -- 1.7.11.1