Previously makepkg would clone vcs sources in the download function,
regardless of the noextract settings. Now the download_* functions only
download or update the vcs sources, and the new extract_* functions just
create working copies using the specified protocols. The extract_sources
function will call the needed extract function for the protocol
specified. The tarball extraction has also been moved into its own
extract_file function to keep things consistent.

Signed-off-by: William Giokas <[email protected]>
---

This isn't really needed, I know, but it would facilitate the --verify
function skipping the extraction/cloning of vcs sources while still
downloading/updateing them. Using `download_sources fast` would make sense
to me to skip the version updating, as that will fail without any $srcdir/.

 scripts/makepkg.sh.in | 375 ++++++++++++++++++++++++++++----------------------
 1 file changed, 212 insertions(+), 163 deletions(-)

diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index bd29d73..60bf81a 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -431,28 +431,11 @@ download_bzr() {
                        warning "$(gettext "Failure while pulling %s")" 
"${displaylocation}"
                fi
        fi
-
-       msg2 "$(gettext "Creating working copy of %s %s repo...")" "${dir}" 
"bzr"
-       pushd "$srcdir" &>/dev/null
-       rm -rf "${dir##*/}"
-
-       if ! bzr checkout "$dir" --lightweight; then
-               error "$(gettext "Failure while creating working copy of %s %s 
repo")" "${dir}" "bzr"
-               plain "$(gettext "Aborting...")"
-               exit 1
-       fi
-
-       popd &>/dev/null
 }
 
 download_git() {
        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")"
 
@@ -485,54 +468,11 @@ download_git() {
                        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_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")"
 
@@ -558,41 +498,11 @@ download_hg() {
                        warning "$(gettext "Failure while updating %s %s 
repo")" "${repo}" "hg"
                fi
        fi
-
-       msg2 "$(gettext "Creating working copy of %s %s repo...")" "${repo}" 
"hg"
-       pushd "$srcdir" &>/dev/null
-       rm -rf "${dir##*/}"
-
-       local ref
-       if [[ -n $fragment ]]; then
-               case ${fragment%%=*} in
-                       branch|revision|tag)
-                               ref=('-u' "${fragment##*=}")
-                               ;;
-                       *)
-                               error "$(gettext "Unrecognized reference: %s")" 
"${fragment}"
-                               plain "$(gettext "Aborting...")"
-                               exit 1
-               esac
-       fi
-
-       if ! hg clone "${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")"
 
@@ -620,30 +530,6 @@ download_svn() {
                        warning "$(gettext "Failure while updating %s %s 
repo")" "${repo}" "svn"
                fi
        fi
-
-       msg2 "$(gettext "Creating working copy of %s %s repo...")" "${repo}" 
"svn"
-       pushd "$srcdir" &>/dev/null
-       rm -rf "${dir##*/}"
-
-       local ref
-       if [[ -n $fragment ]]; then
-               case ${fragment%%=*} in
-                       revision)
-                               ref=('-r' "${fragment##*=}")
-                               ;;
-                       *)
-                               error "$(gettext "Unrecognized reference: %s")" 
"${fragment}"
-                               plain "$(gettext "Aborting...")"
-                               exit 1
-               esac
-       fi
-
-       if ! svn export ${ref[@]} "$dir"; then
-               error "$(gettext "Failure while creating working copy of %s %s 
repo")" "${repo}" "svn"
-               plain "$(gettext "Aborting...")"
-       fi
-
-       popd &>/dev/null
 }
 
 download_sources() {
@@ -1222,63 +1108,195 @@ check_source_integrity() {
        fi
 }
 
-extract_sources() {
-       msg "$(gettext "Extracting sources...")"
-       local netfile
-       for netfile in "${source[@]}"; do
-               local file=$(get_filename "$netfile")
-               if in_array "$file" "${noextract[@]}"; then
-                       #skip source files in the noextract=() array
-                       #  these are marked explicitly to NOT be extracted
-                       continue
-               fi
+extract_bzr() {
+       local netfile=$1
+
+       local dir=$(get_filepath "$netfile")
+       [[ -z "$dir" ]] && dir="$SRCDEST/$(get_filename "$netfile")"
+
+       msg2 "$(gettext "Creating working copy of %s %s repo...")" "${dir}" 
"bzr"
+       pushd "$srcdir" &>/dev/null
+       rm -rf "${dir##*/}"
+
+       if ! bzr checkout "$dir" --lightweight; then
+               error "$(gettext "Failure while creating working copy of %s %s 
repo")" "${dir}" "bzr"
+               plain "$(gettext "Aborting...")"
+               exit 1
+       fi
+
+       popd &>/dev/null
+}
+
+extract_git() {
+       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")"
+
+       msg "$(gettext "Creating working copy of %s %s repo...")" "${repo}" 
"git"
+       pushd "$srcdir" &>/dev/null
+       rm -rf "${dir##*/}"
 
-               # fix flyspray #6246
-               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" ;;
-                                       *) continue;;
-                               esac ;;
-                       *application/x-bzip*)
-                               case "$ext" in
-                                       bz2|bz) cmd="bzip2" ;;
-                                       *) continue;;
-                               esac ;;
-                       *application/x-xz*)
-                               case "$ext" in
-                                       xz) cmd="xz" ;;
-                                       *) continue;;
-                               esac ;;
+       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##*=}
+                               ;;
                        *)
-                               # See if bsdtar can recognize the file
-                               if bsdtar -tf "$file" -q '*' &>/dev/null; then
-                                       cmd="bsdtar"
-                               else
-                                       continue
-                               fi ;;
+                               error "$(gettext "Unrecognized reference: %s")" 
"${fragment}"
+                               plain "$(gettext "Aborting...")"
+                               exit 1
                esac
+       fi
 
-               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"
+       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
-       done
+       fi
+
+       popd &>/dev/null
+}
+
+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")"
+
+       msg2 "$(gettext "Creating working copy of %s %s repo...")" "${repo}" 
"hg"
+       pushd "$srcdir" &>/dev/null
+       rm -rf "${dir##*/}"
+
+       local ref
+       if [[ -n $fragment ]]; then
+               case ${fragment%%=*} in
+                       branch|revision|tag)
+                               ref=('-u' "${fragment##*=}")
+                               ;;
+                       *)
+                               error "$(gettext "Unrecognized reference: %s")" 
"${fragment}"
+                               plain "$(gettext "Aborting...")"
+                               exit 1
+               esac
+       fi
+
+       if ! hg clone "${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
+}
+
+extract_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")"
+
+       msg2 "$(gettext "Creating working copy of %s %s repo...")" "${repo}" 
"svn"
+       pushd "$srcdir" &>/dev/null
+       rm -rf "${dir##*/}"
+
+       local ref
+       if [[ -n $fragment ]]; then
+               case ${fragment%%=*} in
+                       revision)
+                               ref=('-r' "${fragment##*=}")
+                               ;;
+                       *)
+                               error "$(gettext "Unrecognized reference: %s")" 
"${fragment}"
+                               plain "$(gettext "Aborting...")"
+                               exit 1
+               esac
+       fi
+
+       if ! svn export ${ref[@]} "$dir"; then
+               error "$(gettext "Failure while creating working copy of %s %s 
repo")" "${repo}" "svn"
+               plain "$(gettext "Aborting...")"
+       fi
+
+       popd &>/dev/null
+}
+
+extract_file() {
+       local file=$1
+
+       # fix flyspray #6246
+       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" ;;
+                               *) continue;;
+                       esac ;;
+               *application/x-bzip*)
+                       case "$ext" in
+                               bz2|bz) cmd="bzip2" ;;
+                               *) continue;;
+                       esac ;;
+               *application/x-xz*)
+                       case "$ext" in
+                               xz) cmd="xz" ;;
+                               *) continue;;
+                       esac ;;
+               *)
+                       # See if bsdtar can recognize the file
+                       if bsdtar -tf "$file" -q '*' &>/dev/null; then
+                               cmd="bsdtar"
+                       else
+                               continue
+                       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
@@ -1286,6 +1304,37 @@ extract_sources() {
        fi
 }
 
+extract_sources() {
+       msg "$(gettext "Preparing sources...")"
+       local netfile
+       for netfile in "${source[@]}"; do
+               local file=$(get_filename "$netfile")
+               if in_array "$file" "${noextract[@]}"; then
+                       #skip source files in the noextract=() array
+                       #  these are marked explicitly to NOT be extracted
+                       continue
+               fi
+               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() {
        if [[ -p $logpipe ]]; then
                rm "$logpipe"
-- 
1.8.2.rc0.22.gb3600c3


Reply via email to