[pacman-dev] [PATCH] makepkg: refactor absolute filename detection
Allan McRae
allan at archlinux.org
Wed Jun 2 23:18:01 EDT 2010
On 28/05/10 00:35, Cedric Staniewski wrote:
> Move the absolute filename detection to a new function to reduce code
> duplication.
>
> This patch also fixes the --allsource option that did not include remote
> source files if they reside in $startdir instead of $SRCDEST.
>
> Signed-off-by: Cedric Staniewski<cedric at gmx.ca>
> ---
>
> Changes:
> - renamed error_source_file_not_found to missing_source_exit
> - removed differentiation in download_sources: now it prints "Found %s" instead
> of "Found %s in build dir" and "Using cached copy of %s"
>
I have very minor comments below. Suggested naming comments are
debatable...
> scripts/makepkg.sh.in | 99 ++++++++++++++++++++++++-------------------------
> 1 files changed, 48 insertions(+), 51 deletions(-)
>
> diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
> index 8c0da8b..00167f7 100644
> --- a/scripts/makepkg.sh.in
> +++ b/scripts/makepkg.sh.in
> @@ -179,6 +179,33 @@ trap 'trap_exit "$(gettext "An unknown error has occurred. Exiting...")"' ERR
> # 1) "filename::http://path/to/file"
> # 2) "http://path/to/file"
>
> +# Return the absolute filename of a source entry
> +#
> +# This function accepts a source entry or the already extracted filename of a
> +# source entry as input
> +get_absolute_filename() {
get_filepath()?
> + local file="$(get_filename "$1")"
> +
> + if [[ -f "$startdir/$file" ]] ; then
> + file="$startdir/$file"
> + else
I'd prefer and "elif" here as it seems cleaner.
> + if [[ -f "$SRCDEST/$file" ]] ; then
> + file="$SRCDEST/$file"
> + else
> + return 1
> + fi
> + fi
> +
> + echo "$file"
> +}
> +
> +# Print 'source not found' error message and exit makepkg
> +missing_source_exit() {
I do not really think a three line function needs documented. Also, I
think "missing_source_file" sounds a better name especially when you
read it after a "||" as it is used.
> + error "$(gettext "Unable to find source file %s.")" "$(get_filename "$1")"
> + plain "$(gettext "Aborting...")"
> + exit 1 # $E_MISSING_FILE
> +}
> +
> # extract the filename from a source entry
> get_filename() {
> # if a filename is specified, use it
<snip>
> @@ -645,25 +653,17 @@ extract_sources() {
> msg "$(gettext "Extracting Sources...")"
> local netfile
> for netfile in "${source[@]}"; do
> - file=$(get_filename "$netfile")
> + absfile="$(get_absolute_filename "$netfile")" || missing_source_exit "$netfile"
> + file=${absfile##*/}
> if in_array "$file" ${noextract[@]}; then
> #skip source files in the noextract=() array
> # these are marked explicitly to NOT be extracted
> continue
> fi
>
> - if [[ ! -f $file ]] ; then
> - if [[ ! -f $SRCDEST/$file ]] ; then
> - error "$(gettext "Unable to find source file %s for extraction.")" "$file"
> - plain "$(gettext "Aborting...")"
> - exit 1
> - else
> - file="$SRCDEST/$file"
> - fi
> - fi
>
> # fix flyspray #6246
> - local file_type=$(file -bizL "$file")
> + local file_type=$(file -bizL "$absfile")
I do not think that this change is not needed.
> local ext=${file##*.}
> local cmd=''
> case "$file_type" in
> @@ -693,10 +693,10 @@ extract_sources() {
> local ret=0
> msg2 "$(gettext "Extracting %s with %s")" "$file" "$cmd"
> if [[ $cmd = bsdtar ]]; then
> - $cmd -xf "$file" || ret=$?
> + $cmd -xf "$absfile" || ret=$?
> else
> rm -f "${file%.*}"
> - $cmd -dcf "$file"> "${file%.*}" || ret=$?
> + $cmd -dcf "$absfile"> "${file%.*}" || ret=$?
or these two. We have set up symlinks in $srcdir so we should just use them
> fi
> if (( ret )); then
> error "$(gettext "Failed to extract %s")" "$file"
> @@ -1097,13 +1097,10 @@ create_srcpackage() {
>
> local netfile
> for netfile in "${source[@]}"; do
> - local file=$(get_filename "$netfile")
> - if [[ -f $netfile ]]; then
> - msg2 "$(gettext "Adding %s...")" "$netfile"
> - ln -s "${startdir}/$netfile" "${srclinks}/${pkgbase}"
> - elif (( SOURCEONLY == 2 ))&& [[ -f $SRCDEST/$file ]]; then
> - msg2 "$(gettext "Adding %s...")" "$file"
> - ln -s "$SRCDEST/$file" "${srclinks}/${pkgbase}/"
> + if [[ -f $netfile ]] || (( SOURCEONLY == 2 )); then
> + local file=$(get_absolute_filename "$netfile") || missing_source_exit "$netfile"
> + msg2 "$(gettext "Adding %s...")" "${file##*/}"
> + ln -s "$file" "${srclinks}/${pkgbase}"
> fi
> done
>
While this works, I would prefer to keep the distinction between local
and downloaded files. So something like:
local file
for file in "${source[@]}"; do
if [[ -f $file ]]; then
msg2 "$(gettext "Adding %s...")" "$file"
ln -s "${startdir}/$file" "${srclinks}/${pkgbase}"
elif (( SOURCEONLY == 2 )); then
local absfile=$(get_absolute_filename "$file") ||
missing_source_exit "$file"
msg2 "$(gettext "Adding %s...")" "${absfile##*/}"
ln -s "$absfile" "${srclinks}/${pkgbase}"
fi
done
Note the renaming of "netfile" as the name makes little sense anymore...
With those comments addressed, this patch is good to go.
I would like this in the 3.4 release if possible since it is a bug fix.
Given it has string changes, that would mean it would need resubmitted
soon. I apologize for rushing you after taking so long to comment, but
I can take care of the changes if you are busy at the moment.
Allan
More information about the pacman-dev
mailing list