[pacman-dev] [PATCHv2] makepkg: Separate vcs download and extract

William Giokas 1007380 at gmail.com
Fri Mar 8 13:25:29 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>
---

Instead of separating out the extract functions into a separate part of
makepkg, I just grouped them with the download_* functions. Saved quite a
few deletions.

 scripts/makepkg.sh.in | 253 +++++++++++++++++++++++++++++++++++++-------------
 1 file changed, 188 insertions(+), 65 deletions(-)

diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index c9661e9..58c403e 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
 }
 
@@ -1224,6 +1314,12 @@ check_source_integrity() {
 
 extract_sources() {
 	msg "$(gettext "Extracting sources...")"
+
+	local GET_VCS=1
+	if [[ $1 == "fast" ]]; then
+		GET_VCS=0
+	fi
+
 	local netfile
 	for netfile in "${source[@]}"; do
 		local file=$(get_filename "$netfile")
@@ -1232,54 +1328,81 @@ 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 (( PKGVERFUNC && GET_VCS )); then
+		update_pkgver
+		check_pkgver || exit 1
+		check_build_status
+	fi
+}
+
+
+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"
-- 
1.8.2.rc1.24.g06d67b8



More information about the pacman-dev mailing list