summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Giokas <1007380@gmail.com>2013-03-09 21:36:55 +0100
committerAllan McRae <allan@archlinux.org>2013-03-10 00:01:56 +0100
commitfcdaa46b651904fb88ea325d014bd85edd8a08fe (patch)
tree41fec36ed25f8f602971a8bca88c0f7bfbe1282a
parent06d761a0207d579d4976a8c61257516c2b368911 (diff)
downloadpacman-fcdaa46b651904fb88ea325d014bd85edd8a08fe.tar.gz
pacman-fcdaa46b651904fb88ea325d014bd85edd8a08fe.tar.xz
makepkg: Separate vcs download and extract
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> Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r--scripts/makepkg.sh.in199
1 files changed, 131 insertions, 68 deletions
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index c9661e93..9cb21ccf 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -379,6 +379,59 @@ download_file() {
ln -s "$SRCDEST/$filename" "$srcdir/"
}
+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
+ chown -R 0:0 "$srcdir"
+ fi
+}
+
download_bzr() {
local netfile=$1
@@ -386,11 +439,6 @@ download_bzr() {
url=${url##*bzr+}
url=${url%%#*}
- local fragment=${netfile#*#}
- if [[ $fragment = "$netfile" ]]; then
- unset fragment
- fi
-
local displaylocation="$url"
local revision=('-r-1')
@@ -431,6 +479,18 @@ download_bzr() {
warning "$(gettext "Failure while pulling %s")" "${displaylocation}"
fi
fi
+}
+
+extract_bzr() {
+ 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...")" "${dir}" "bzr"
pushd "$srcdir" &>/dev/null
@@ -448,11 +508,6 @@ download_bzr() {
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,6 +540,22 @@ download_git() {
warning "$(gettext "Failure while updating %s %s repo")" "${repo}" "git"
fi
fi
+}
+
+extract_git() {
+ local netfile=$1
+
+ local fragment=${netfile#*#}
+ if [[ $fragment = "$netfile" ]]; then
+ unset fragment
+ fi
+
+ local repo=${netfile##*/}
+ repo=${repo%%#*}
+ repo=${repo%%.git*}
+
+ local dir=$(get_filepath "$netfile")
+ [[ -z "$dir" ]] && dir="$SRCDEST/$(get_filename "$netfile")"
msg2 "$(gettext "Creating working copy of %s %s repo...")" "${repo}" "git"
pushd "$srcdir" &>/dev/null
@@ -528,11 +599,6 @@ download_git() {
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,6 +624,21 @@ download_hg() {
warning "$(gettext "Failure while updating %s %s repo")" "${repo}" "hg"
fi
fi
+}
+
+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")"
+
+ local repo=${netfile##*/}
+ repo=${repo%%#*}
msg2 "$(gettext "Creating working copy of %s %s repo...")" "${repo}" "hg"
pushd "$srcdir" &>/dev/null
@@ -620,6 +701,21 @@ download_svn() {
warning "$(gettext "Failure while updating %s %s repo")" "${repo}" "svn"
fi
fi
+}
+
+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")"
+
+ local repo=${netfile##*/}
+ repo=${repo%%#*}
msg2 "$(gettext "Creating working copy of %s %s repo...")" "${repo}" "svn"
pushd "$srcdir" &>/dev/null
@@ -682,12 +778,6 @@ download_sources() {
esac
done
- if (( PKGVERFUNC && GET_VCS )); then
- update_pkgver
- check_pkgver || exit 1
- check_build_status
- fi
-
popd &>/dev/null
}
@@ -1232,57 +1322,30 @@ extract_sources() {
# these are marked explicitly to NOT be extracted
continue
fi
-
-
- # 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 ;;
+ local proto=$(get_protocol "$netfile")
+ case "$proto" in
+ bzr*)
+ extract_bzr "$netfile"
+ ;;
+ git*)
+ extract_git "$netfile"
+ ;;
+ hg*)
+ extract_hg "$netfile"
+ ;;
+ svn*)
+ extract_svn "$netfile"
+ ;;
*)
- # See if bsdtar can recognize the file
- if bsdtar -tf "$file" -q '*' &>/dev/null; then
- cmd="bsdtar"
- else
- continue
- fi ;;
+ extract_file "$file"
+ ;;
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
done
- if (( EUID == 0 )); then
- # change perms of all source files to root user & root group
- chown -R 0:0 "$srcdir"
+ if (( PKGVERFUNC )); then
+ update_pkgver
+ check_pkgver || exit 1
+ check_build_status
fi
}