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 <shiningxc@gmail.com> --- 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 "${source[@]}"; 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 "${source[@]}"; 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 "${source[@]}"; 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 "${source[@]}"; do - file=$(strip_url "$netfile") + 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 @@ -957,7 +970,7 @@ create_srcpackage() { local netfile for netfile in "${source[@]}"; 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