makepkg : allow to specify a download filename
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> Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
parent
24d7c6a372
commit
d6f62ba22d
3 changed files with 55 additions and 25 deletions
|
@ -87,6 +87,10 @@ similar to `$_basekernver`.
|
||||||
variables if possible when specifying the download location. Any files
|
variables if possible when specifying the download location. Any files
|
||||||
that are compressed will automatically be extracted, unless found in
|
that are compressed will automatically be extracted, unless found in
|
||||||
the noextract array listed below.
|
the noextract array listed below.
|
||||||
|
+
|
||||||
|
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: `source=('filename::url')`
|
||||||
|
|
||||||
*noextract (array)*::
|
*noextract (array)*::
|
||||||
An array of filenames corresponding to those from the source array. Files
|
An array of filenames corresponding to those from the source array. Files
|
||||||
|
|
|
@ -34,12 +34,13 @@ Options
|
||||||
**DLAGENTS=(**\'protocol::/path/to/command [options]' ...**)**::
|
**DLAGENTS=(**\'protocol::/path/to/command [options]' ...**)**::
|
||||||
Sets the download agents used to fetch source files specified with a URL in
|
Sets the download agents used to fetch source files specified with a URL in
|
||||||
the linkman:PKGBUILD[5] file. Options can be specified for each command as
|
the linkman:PKGBUILD[5] file. Options can be specified for each command as
|
||||||
well; the download URL is placed on the end of the command. This is more
|
well, and any protocol can have a download agent. Several examples are provided
|
||||||
flexible than the former `FTPAGENT` variable, as any protocol can have a
|
in the default makepkg.conf.
|
||||||
download agent. Several examples are provided in the default makepkg.conf.
|
+
|
||||||
All instances of `%u` will be replaced with the download URL. If present,
|
If present, `%u` will be replaced with the download URL. Otherwise, the
|
||||||
instances of `%o` will be replaced with the local filename, plus a ``.part''
|
download URL will be placed on the end of the command. If present, `%o` will
|
||||||
extension, which allows to do file resumes properly.
|
be replaced with the local filename, plus a ``.part'' extension, which allows
|
||||||
|
makepkg to handle resuming file downloads.
|
||||||
|
|
||||||
**CARCH=**"carch"::
|
**CARCH=**"carch"::
|
||||||
Specifies your computer architecture; possible values include such things
|
Specifies your computer architecture; possible values include such things
|
||||||
|
|
|
@ -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 "Aborted by user! Exiting...")"' INT
|
||||||
trap 'trap_exit "$(gettext "An unknown error has occured. Exiting...")"' ERR
|
trap 'trap_exit "$(gettext "An unknown error has occured. Exiting...")"' ERR
|
||||||
|
|
||||||
|
# a source entry can have two forms :
|
||||||
|
# 1) "filename::http://path/to/file"
|
||||||
|
# 2) "http://path/to/file"
|
||||||
|
|
||||||
strip_url() {
|
# extract the filename from a source entry
|
||||||
echo "$1" | sed 's|^.*://.*/||g'
|
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;
|
# Checks to see if options are present in makepkg.conf or PKGBUILD;
|
||||||
|
@ -284,18 +296,33 @@ get_downloadclient() {
|
||||||
}
|
}
|
||||||
|
|
||||||
download_file() {
|
download_file() {
|
||||||
|
# download command
|
||||||
local dlcmd=$1
|
local dlcmd=$1
|
||||||
local netfile=$2
|
# url of the file
|
||||||
|
local url=$2
|
||||||
|
# destination file
|
||||||
local file=$3
|
local file=$3
|
||||||
|
# temporary download file, default to last component of the url
|
||||||
|
local dlfile=$(echo "$url" | sed 's|^.*://.*/||g')
|
||||||
|
|
||||||
if echo "$dlcmd" | grep -q "%u" ; then
|
# replace %o by the temporary dlfile if it exists
|
||||||
|
if echo "$dlcmd" | grep -q "%o" ; then
|
||||||
dlcmd=${dlcmd//%o/$file.part}
|
dlcmd=${dlcmd//%o/$file.part}
|
||||||
dlcmd=${dlcmd//%u/$netfile}
|
dlfile="$file.part"
|
||||||
|
fi
|
||||||
|
# add the url, either in place of %u or at the end
|
||||||
|
if echo "$dlcmd" | grep -q "%u" ; then
|
||||||
|
dlcmd=${dlcmd//%u/$url}
|
||||||
else
|
else
|
||||||
dlcmd="$dlcmd $netfile"
|
dlcmd="$dlcmd $url"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
$dlcmd
|
$dlcmd || return $?
|
||||||
|
|
||||||
|
# rename the temporary download file to the final destination
|
||||||
|
if [ "$dlfile" != "$file" ]; then
|
||||||
|
mv -f "$SRCDEST/$dlfile" "$SRCDEST/$file"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
check_deps() {
|
check_deps() {
|
||||||
|
@ -418,7 +445,8 @@ download_sources() {
|
||||||
|
|
||||||
local netfile
|
local netfile
|
||||||
for netfile in "${source[@]}"; do
|
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
|
if [ -f "$startdir/$file" ]; then
|
||||||
msg2 "$(gettext "Found %s in build dir")" "$file"
|
msg2 "$(gettext "Found %s in build dir")" "$file"
|
||||||
rm -f "$srcdir/$file"
|
rm -f "$srcdir/$file"
|
||||||
|
@ -432,26 +460,23 @@ download_sources() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# if we get here, check to make sure it was a URL, else fail
|
# 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"
|
error "$(gettext "%s was not found in the build directory and is not a URL.")" "$file"
|
||||||
exit 1 # $E_MISSING_FILE
|
exit 1 # $E_MISSING_FILE
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# find the client we should use for this URL
|
# 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"
|
msg2 "$(gettext "Downloading %s...")" "$file"
|
||||||
# fix flyspray bug #3289
|
# fix flyspray bug #3289
|
||||||
local ret=0
|
local ret=0
|
||||||
download_file "$dlclient" "$netfile" "$file" || ret=$?
|
download_file "$dlclient" "$url" "$file" || ret=$?
|
||||||
if [ $ret -gt 0 ]; then
|
if [ $ret -gt 0 ]; then
|
||||||
error "$(gettext "Failure while downloading %s")" "$file"
|
error "$(gettext "Failure while downloading %s")" "$file"
|
||||||
plain "$(gettext "Aborting...")"
|
plain "$(gettext "Aborting...")"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
if echo "$dlclient" | grep -q "%o" ; then
|
|
||||||
mv -f "$SRCDEST/$file.part" "$SRCDEST/$file"
|
|
||||||
fi
|
|
||||||
rm -f "$srcdir/$file"
|
rm -f "$srcdir/$file"
|
||||||
ln -s "$SRCDEST/$file" "$srcdir/"
|
ln -s "$SRCDEST/$file" "$srcdir/"
|
||||||
done
|
done
|
||||||
|
@ -491,7 +516,7 @@ generate_checksums() {
|
||||||
|
|
||||||
local netfile
|
local netfile
|
||||||
for netfile in "${source[@]}"; do
|
for netfile in "${source[@]}"; do
|
||||||
local file="$(strip_url "$netfile")"
|
local file="$(get_filename "$netfile")"
|
||||||
|
|
||||||
if [ ! -f "$file" ] ; then
|
if [ ! -f "$file" ] ; then
|
||||||
if [ ! -f "$SRCDEST/$file" ] ; then
|
if [ ! -f "$SRCDEST/$file" ] ; then
|
||||||
|
@ -537,7 +562,7 @@ check_checksums() {
|
||||||
local idx=0
|
local idx=0
|
||||||
local file
|
local file
|
||||||
for file in "${source[@]}"; do
|
for file in "${source[@]}"; do
|
||||||
file="$(strip_url "$file")"
|
file="$(get_filename "$file")"
|
||||||
echo -n " $file ... " >&2
|
echo -n " $file ... " >&2
|
||||||
|
|
||||||
if [ ! -f "$file" ] ; then
|
if [ ! -f "$file" ] ; then
|
||||||
|
@ -576,7 +601,7 @@ extract_sources() {
|
||||||
msg "$(gettext "Extracting Sources...")"
|
msg "$(gettext "Extracting Sources...")"
|
||||||
local netfile
|
local netfile
|
||||||
for netfile in "${source[@]}"; do
|
for netfile in "${source[@]}"; do
|
||||||
file=$(strip_url "$netfile")
|
file=$(get_filename "$netfile")
|
||||||
if in_array "$file" ${noextract[@]}; then
|
if in_array "$file" ${noextract[@]}; then
|
||||||
#skip source files in the noextract=() array
|
#skip source files in the noextract=() array
|
||||||
# these are marked explicitly to NOT be extracted
|
# these are marked explicitly to NOT be extracted
|
||||||
|
@ -959,7 +984,7 @@ create_srcpackage() {
|
||||||
|
|
||||||
local netfile
|
local netfile
|
||||||
for netfile in "${source[@]}"; do
|
for netfile in "${source[@]}"; do
|
||||||
local file=$(strip_url "$netfile")
|
local file=$(get_filename "$netfile")
|
||||||
if [ -f "$netfile" ]; then
|
if [ -f "$netfile" ]; then
|
||||||
msg2 "$(gettext "Adding %s...")" "$netfile"
|
msg2 "$(gettext "Adding %s...")" "$netfile"
|
||||||
ln -s "${startdir}/$netfile" "${srclinks}/${pkgname}"
|
ln -s "${startdir}/$netfile" "${srclinks}/${pkgname}"
|
||||||
|
|
Loading…
Add table
Reference in a new issue