[pacman-dev] [PATCH] makepkg: separate dl and extract for vcs sources
William Giokas
1007380 at gmail.com
Fri Feb 22 20:46:02 EST 2013
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 at 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
More information about the pacman-dev
mailing list