A source entry can now have the following form, to specify a different
filename :
"filename::http://path/to/file";

Of course, the old syntax is still supported :
"http://path/to/file";

And as before, in the second case, the filename used is simply "file".

This fixes FS#11292, because handling multiple source files with the same
name is now possible (just choose a different filename).

But it will also allow to deal much more nicely with funny url like this by
using a sane filename (and unfortunately, there are quite a few) :
http://www.vim.org/scripts/download_script.php?src_id=6992

Signed-off-by: Xavier Chantry <[EMAIL PROTECTED]>
---
 doc/PKGBUILD.5.txt    |    4 ++++
 scripts/makepkg.sh.in |   35 ++++++++++++++++++++++++-----------
 2 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/doc/PKGBUILD.5.txt b/doc/PKGBUILD.5.txt
index cf6eb23..743eba1 100644
--- a/doc/PKGBUILD.5.txt
+++ b/doc/PKGBUILD.5.txt
@@ -87,6 +87,10 @@ similar to `$_basekernver`.
        variables if possible when specifying the download location. Any files
        that are compressed will automatically be extracted, unless found in
        the noextract array listed below.
+       +
+       It is possible to specify an optional filename, which is practical with
+       some weird url, and also for handling multiple source files with the 
same
+       name : `source=('filename::url')`
 
 *noextract (array)*::
        An array of filenames corresponding to those from the source array. 
Files
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index ddf6cd8..d30713f 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -163,11 +163,23 @@ trap 'trap_exit "$(gettext "TERM signal caught. 
Exiting...")"' TERM HUP QUIT
 trap 'trap_exit "$(gettext "Aborted by user! Exiting...")"' INT
 trap 'trap_exit "$(gettext "An unknown error has occured. Exiting...")"' ERR
 
-
-strip_url() {
-       echo "$1" | sed 's|^.*://.*/||g'
+# a source entry can have two forms :
+# 1) "filename::http://path/to/file";
+# 2) "http://path/to/file";
+
+# extract the filename from a source entry
+get_filename() {
+       # if a filename is specified, use it
+       local filename=$(echo $1 | sed 's|::.*||')
+       # if it is just an url, we only keep the last component
+       echo "$filename" | sed 's|^.*://.*/||g'
 }
 
+# extract the url from a source entry
+get_url() {
+       # strip an eventual filename
+       echo $1 | sed 's|.*::||'
+}
 
 ##
 # Checks to see if options are present in makepkg.conf or PKGBUILD;
@@ -418,7 +430,8 @@ download_sources() {
 
        local netfile
        for netfile in "[EMAIL PROTECTED]"; do
-               local file=$(strip_url "$netfile")
+               local file=$(get_filename "$netfile")
+               local url=$(get_url "$netfile")
                if [ -f "$startdir/$file" ]; then
                        msg2 "$(gettext "Found %s in build dir")" "$file"
                        rm -f "$srcdir/$file"
@@ -432,18 +445,18 @@ download_sources() {
                fi
 
                # if we get here, check to make sure it was a URL, else fail
-               if [ "$file" = "$netfile" ]; then
+               if [ "$file" = "$url" ]; then
                        error "$(gettext "%s was not found in the build 
directory and is not a URL.")" "$netfile"
                        exit 1 # $E_MISSING_FILE
                fi
 
                # find the client we should use for this URL
-               local dlclient=$(get_downloadclient "$netfile") || exit $?
+               local dlclient=$(get_downloadclient "$url") || exit $?
 
                msg2 "$(gettext "Downloading %s...")" "$file"
                # fix flyspray bug #3289
                local ret=0
-               download_file "$dlclient" "$netfile" "$file" || ret=$?
+               download_file "$dlclient" "$url" "$file" || ret=$?
                if [ $ret -gt 0 ]; then
                        error "$(gettext "Failure while downloading %s")" 
"$file"
                        plain "$(gettext "Aborting...")"
@@ -491,7 +504,7 @@ generate_checksums() {
 
                local netfile
                for netfile in "[EMAIL PROTECTED]"; do
-                       local file="$(strip_url "$netfile")"
+                       local file="$(get_filename "$netfile")"
 
                        if [ ! -f "$file" ] ; then
                                if [ ! -f "$SRCDEST/$file" ] ; then
@@ -529,7 +542,7 @@ check_checksums() {
                        local idx=0
                        local file
                        for file in "[EMAIL PROTECTED]"; do
-                               file="$(strip_url "$file")"
+                               file="$(get_filename "$file")"
                                echo -n "    $file ... " >&2
 
                                if [ ! -f "$file" ] ; then
@@ -574,7 +587,7 @@ extract_sources() {
        msg "$(gettext "Extracting Sources...")"
        local netfile
        for netfile in "[EMAIL PROTECTED]"; do
-               file=$(strip_url "$netfile")
+               file=$(get_filename "$netfile")
                if in_array "$file" [EMAIL PROTECTED]; then
                        #skip source files in the noextract=() array
                        #  these are marked explicitly to NOT be extracted
@@ -957,7 +970,7 @@ create_srcpackage() {
 
        local netfile
        for netfile in "[EMAIL PROTECTED]"; do
-               local file=$(strip_url "$netfile")
+               local file=$(get_filename "$netfile")
                if [ -f "$netfile" ]; then
                        msg2 "$(gettext "Adding %s...")" "$netfile"
                        ln -s "${startdir}/$netfile" "${srclinks}/${pkgname}"
-- 
1.6.0

_______________________________________________
pacman-dev mailing list
[email protected]
http://archlinux.org/mailman/listinfo/pacman-dev

Reply via email to