[pacman-dev] [PATCH 4/5] ibmakepkg: extract functions for handling source URLs

Allan McRae allan at archlinux.org
Sun May 17 14:11:15 UTC 2015


Signed-off-by: Allan McRae <allan at archlinux.org>
---
 scripts/Makefile.am                  |   3 +-
 scripts/libmakepkg/.gitignore        |   1 +
 scripts/libmakepkg/util/source.sh.in | 144 +++++++++++++++++++++++++++++++++++
 scripts/makepkg.sh.in                | 119 -----------------------------
 scripts/po/POTFILES.in               |   1 +
 5 files changed, 148 insertions(+), 120 deletions(-)
 create mode 100644 scripts/libmakepkg/util/source.sh.in

diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index fb32f16..5cced98 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -83,7 +83,8 @@ LIBMAKEPKG_IN = \
 	libmakepkg/tidy/strip.sh \
 	libmakepkg/tidy/upx.sh \
 	libmakepkg/tidy/zipman.sh \
-	libmakepkg/util.sh
+	libmakepkg/util.sh \
+	libmakepkg/util/source.sh
 
 LIBMAKEPKG_DIST = \
 	$(LIBMAKEPKG) \
diff --git a/scripts/libmakepkg/.gitignore b/scripts/libmakepkg/.gitignore
index 0b8f88f..18442a8 100644
--- a/scripts/libmakepkg/.gitignore
+++ b/scripts/libmakepkg/.gitignore
@@ -5,3 +5,4 @@ lint_pkgbuild/*.sh
 tidy.sh
 tidy/*.sh
 /util.sh
+util/source.sh
\ No newline at end of file
diff --git a/scripts/libmakepkg/util/source.sh.in b/scripts/libmakepkg/util/source.sh.in
new file mode 100644
index 0000000..0a4f671
--- /dev/null
+++ b/scripts/libmakepkg/util/source.sh.in
@@ -0,0 +1,144 @@
+#!/bin/bash
+#
+#   source.sh - functions to extract information from source URLs
+#
+#   Copyright (c) 2010-2015 Pacman Development Team <pacman-dev at archlinux.org>
+#
+#   This program is free software; you can redistribute it and/or modify
+#   it under the terms of the GNU General Public License as published by
+#   the Free Software Foundation; either version 2 of the License, or
+#   (at your option) any later version.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License
+#   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+[[ -n "$LIBMAKEPKG_UTIL_SOURCE_SH" ]] && return
+LIBMAKEPKG_UTIL_SOURCE_SH=1
+
+LIBRARY=${LIBRARY:-'@libmakepkgdir@'}
+
+source "$LIBRARY/util/message.sh"
+
+
+# a source entry can have two forms :
+# 1) "filename::http://path/to/file"
+# 2) "http://path/to/file"
+
+# extract the URL from a source entry
+get_url() {
+	# strip an eventual filename
+	printf "%s\n" "${1#*::}"
+}
+
+# extract the protocol from a source entry - return "local" for local sources
+get_protocol() {
+	if [[ $1 = *://* ]]; then
+		# strip leading filename
+		local proto="${1#*::}"
+		printf "%s\n" "${proto%%://*}"
+	elif [[ $1 = *lp:* ]]; then
+		local proto="${1#*::}"
+		printf "%s\n" "${proto%%lp:*}"
+	else
+		printf "%s\n" local
+	fi
+}
+
+# extract the filename from a source entry
+get_filename() {
+	local netfile=$1
+
+	# if a filename is specified, use it
+	if [[ $netfile = *::* ]]; then
+		printf "%s\n" ${netfile%%::*}
+		return
+	fi
+
+	local proto=$(get_protocol "$netfile")
+
+	case $proto in
+		bzr*|git*|hg*|svn*)
+			filename=${netfile%%#*}
+			filename=${filename%/}
+			filename=${filename##*/}
+			if [[ $proto = bzr* ]]; then
+				filename=${filename#*lp:}
+			fi
+			if [[ $proto = git* ]]; then
+				filename=${filename%%.git*}
+			fi
+			;;
+		*)
+			# if it is just an URL, we only keep the last component
+			filename="${netfile##*/}"
+			;;
+	esac
+	printf "%s\n" "${filename}"
+}
+
+# Return the absolute filename of a source entry
+get_filepath() {
+	local file="$(get_filename "$1")"
+	local proto="$(get_protocol "$1")"
+
+	case $proto in
+		bzr*|git*|hg*|svn*)
+			if [[ -d "$startdir/$file" ]]; then
+				file="$startdir/$file"
+			elif [[ -d "$SRCDEST/$file" ]]; then
+				file="$SRCDEST/$file"
+			else
+				return 1
+			fi
+			;;
+		*)
+			if [[ -f "$startdir/$file" ]]; then
+				file="$startdir/$file"
+			elif [[ -f "$SRCDEST/$file" ]]; then
+				file="$SRCDEST/$file"
+			else
+				return 1
+			fi
+			;;
+	esac
+
+	printf "%s\n" "$file"
+}
+
+get_downloadclient() {
+	local proto=$1
+
+	# loop through DOWNLOAD_AGENTS variable looking for protocol
+	local i
+	for i in "${DLAGENTS[@]}"; do
+		local handler="${i%%::*}"
+		if [[ $proto = "$handler" ]]; then
+			local agent="${i#*::}"
+			break
+		fi
+	done
+
+	# if we didn't find an agent, return an error
+	if [[ -z $agent ]]; then
+		error "$(gettext "Unknown download protocol: %s")" "$proto"
+		plain "$(gettext "Aborting...")"
+		exit 1 # $E_CONFIG_ERROR
+	fi
+
+	# ensure specified program is installed
+	local program="${agent%% *}"
+	if [[ ! -x $program ]]; then
+		local baseprog="${program##*/}"
+		error "$(gettext "The download program %s is not installed.")" "$baseprog"
+		plain "$(gettext "Aborting...")"
+		exit 1 # $E_MISSING_PROGRAM
+	fi
+
+	printf "%s\n" "$agent"
+}
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index cc1fea4..140bb1a 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -170,130 +170,11 @@ clean_up() {
 	remove_deps
 }
 
-
 enter_fakeroot() {
 	msg "$(gettext "Entering %s environment...")" "fakeroot"
 	fakeroot -- $0 -F "${ARGLIST[@]}" || exit $?
 }
 
-
-# a source entry can have two forms :
-# 1) "filename::http://path/to/file"
-# 2) "http://path/to/file"
-
-# Return the absolute filename of a source entry
-get_filepath() {
-	local file="$(get_filename "$1")"
-	local proto="$(get_protocol "$1")"
-
-	case $proto in
-		bzr*|git*|hg*|svn*)
-			if [[ -d "$startdir/$file" ]]; then
-				file="$startdir/$file"
-			elif [[ -d "$SRCDEST/$file" ]]; then
-				file="$SRCDEST/$file"
-			else
-				return 1
-			fi
-			;;
-		*)
-			if [[ -f "$startdir/$file" ]]; then
-				file="$startdir/$file"
-			elif [[ -f "$SRCDEST/$file" ]]; then
-				file="$SRCDEST/$file"
-			else
-				return 1
-			fi
-			;;
-	esac
-
-	printf "%s\n" "$file"
-}
-
-# extract the filename from a source entry
-get_filename() {
-	local netfile=$1
-
-	# if a filename is specified, use it
-	if [[ $netfile = *::* ]]; then
-		printf "%s\n" ${netfile%%::*}
-		return
-	fi
-
-	local proto=$(get_protocol "$netfile")
-
-	case $proto in
-		bzr*|git*|hg*|svn*)
-			filename=${netfile%%#*}
-			filename=${filename%/}
-			filename=${filename##*/}
-			if [[ $proto = bzr* ]]; then
-				filename=${filename#*lp:}
-			fi
-			if [[ $proto = git* ]]; then
-				filename=${filename%%.git*}
-			fi
-			;;
-		*)
-			# if it is just an URL, we only keep the last component
-			filename="${netfile##*/}"
-			;;
-	esac
-	printf "%s\n" "${filename}"
-}
-
-# extract the URL from a source entry
-get_url() {
-	# strip an eventual filename
-	printf "%s\n" "${1#*::}"
-}
-
-# extract the protocol from a source entry - return "local" for local sources
-get_protocol() {
-	if [[ $1 = *://* ]]; then
-		# strip leading filename
-		local proto="${1#*::}"
-		printf "%s\n" "${proto%%://*}"
-	elif [[ $1 = *lp:* ]]; then
-		local proto="${1#*::}"
-		printf "%s\n" "${proto%%lp:*}"
-	else
-		printf "%s\n" local
-	fi
-}
-
-get_downloadclient() {
-	local proto=$1
-
-	# loop through DOWNLOAD_AGENTS variable looking for protocol
-	local i
-	for i in "${DLAGENTS[@]}"; do
-		local handler="${i%%::*}"
-		if [[ $proto = "$handler" ]]; then
-			local agent="${i#*::}"
-			break
-		fi
-	done
-
-	# if we didn't find an agent, return an error
-	if [[ -z $agent ]]; then
-		error "$(gettext "Unknown download protocol: %s")" "$proto"
-		plain "$(gettext "Aborting...")"
-		exit 1 # $E_CONFIG_ERROR
-	fi
-
-	# ensure specified program is installed
-	local program="${agent%% *}"
-	if [[ ! -x $program ]]; then
-		local baseprog="${program##*/}"
-		error "$(gettext "The download program %s is not installed.")" "$baseprog"
-		plain "$(gettext "Aborting...")"
-		exit 1 # $E_MISSING_PROGRAM
-	fi
-
-	printf "%s\n" "$agent"
-}
-
 download_local() {
 	local netfile=$1
 	local filepath=$(get_filepath "$netfile")
diff --git a/scripts/po/POTFILES.in b/scripts/po/POTFILES.in
index 43916c0..30bc3f4 100644
--- a/scripts/po/POTFILES.in
+++ b/scripts/po/POTFILES.in
@@ -39,5 +39,6 @@ scripts/libmakepkg/tidy/strip.sh.in
 scripts/libmakepkg/tidy/upx.sh.in
 scripts/libmakepkg/tidy/zipman.sh.in
 scripts/libmakepkg/util/message.sh
+scripts/libmakepkg/util/source.sh.in
 scripts/library/output_format.sh
 scripts/library/parseopts.sh
-- 
2.4.1


More information about the pacman-dev mailing list