[pacman-dev] [PATCH] makepkg : allow to specify a download filename

Dan McGee dpmcgee at gmail.com
Sat Aug 23 20:25:09 EDT 2008


On Sat, Aug 23, 2008 at 7:11 PM, Xavier Chantry <shiningxc at gmail.com> wrote:
> 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 at 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')`
It is also possible to specify an optional filename, which is helpful
with weird URLs and for handling multiple source files with the same
name. The syntax is: <example>

'also' helps it flow; 'practical' just isn't that common of a word to
use in this situation; URL is capitalized elsewhere in this manpage
and plural makes a bit more sense. Finally, I thought splitting the
example into its own sentence helps keep it from being a run-on.

> 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}"
> --

Looks great, although if we want to get this in maint, it would be
best to get further testing from those who use makepkg daily.

-Dan



More information about the pacman-dev mailing list