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 <1007380@gmail.com> --- 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