[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Quilt-dev] [PATCH RFC] inspect: Split the patch/tar/unzip wrapper t
From: |
Jean Delvare |
Subject: |
Re: [Quilt-dev] [PATCH RFC] inspect: Split the patch/tar/unzip wrapper to a separate script |
Date: |
Tue, 4 Nov 2014 14:19:50 +0100 |
On Sat, 25 Oct 2014 18:51:59 +0200, Jean Delvare wrote:
> I couldn't find any reason why the patch/tar/unzip wrapper is
> generated each time inspect is invoked. Make it a separate script in
> its own right and let the patch, tar and unzip links point to it.
>
> This makes this piece of code easier to read, edit, trace and debug.
> This also solves the case where the filesystem hosting the temporary
> files is mounted with noexec.
> ---
> Andreas, do you happen to know the reason why the wrapper script was
> generated on-the-fly originally? I hope I'm not missing anything.
>
> Makefile.in | 6
> quilt/scripts/inspect-wrapper.in | 265 ++++++++++++++++++++++++++++++++++++
> quilt/scripts/inspect.in | 282
> ---------------------------------------
> 3 files changed, 271 insertions(+), 282 deletions(-)
If there are no objections, I will commit this patch tomorrow.
Jean
> --- a/Makefile.in
> +++ b/Makefile.in
> @@ -78,8 +78,8 @@ QUILT := $(QUILT_IN)
> SRC += $(QUILT_SRC:%=quilt/%)
> DIRT += $(QUILT_IN:%=quilt/%)
>
> -SCRIPTS_IN := patchfns inspect dependency-graph edmail \
> - remove-trailing-ws backup-files
> +SCRIPTS_IN := patchfns inspect inspect-wrapper dependency-graph
> \
> + edmail remove-trailing-ws backup-files
>
> SCRIPTS_SRC := $(SCRIPTS_IN:%=%.in)
> SCRIPTS := $(SCRIPTS_IN)
> @@ -390,7 +390,7 @@ test/.depend : Makefile $(TESTS)
> -e 's:quilt/graph:quilt/graph quilt/scripts/dependency-graph:' \
> -e 's:quilt/mail:quilt/mail quilt/scripts/edmail:' \
> -e 's:quilt/refresh:quilt/refresh
> quilt/scripts/remove-trailing-ws:' \
> - -e 's:quilt/setup:quilt/setup quilt/scripts/inspect:' \
> + -e 's:quilt/setup:quilt/setup quilt/scripts/inspect
> quilt/scripts/inspect-wrapper:' \
> > $@
>
> ifneq ($(shell . $(QUILTRC) ; echo $$QUILT_PATCHES_PREFIX),)
> --- /dev/null
> +++ b/quilt/scripts/inspect-wrapper.in
> @@ -0,0 +1,265 @@
> +#! @BASH@
> +
> +# find original data file by md5sum
> +original_file()
> +{
> + local file=$1 md5sum
> +
> + set -- $(md5sum < $file)
> + md5sum=$1
> + while read md5sum_ file_
> + do
> + if [ "$md5sum" = "$md5sum_" ]
> + then
> + echo ${file_#\*}
> + return 0
> + fi
> + done < $tmpdir/md5sums
> +
> + # Try harder
> + if ! [ -e $tmpdir/more-md5sums ]
> + then
> + ( cd $RPM_BUILD_DIR
> + find . -type f \
> + | sed -e 's:^.\/::' \
> + | xargs md5sum \
> + ) > $tmpdir/more-md5sums
> + fi
> +
> + while read md5sum_ file_
> + do
> + if [ "$md5sum" = "$md5sum_" ]
> + then
> + echo ${file_#\*}
> + return 0
> + fi
> + done < $tmpdir/more-md5sums
> +
> + return 1
> +}
> +
> +# Extract a command line option with or without argument
> +cmdline_option()
> +{
> + local letter=$1 no_arg=$2
> + shift
> +
> + while [ $# -ne 0 ]
> + do
> + if [ "${1:0:2}" = -$letter ]
> + then
> + if [ -z "$no_arg" ]
> + then
> + [ "$1" = -$letter ] && set -- "$1$2"
> + fi
> + echo $1
> + break
> + fi
> + shift
> + done
> +}
> +
> +# Extract the -p option from the command line
> +strip_option()
> +{
> + set -- $(cmdline_option p "$@")
> + [ "$1" != -p1 ] && echo $1
> +}
> +
> +# Extract the -R option from the command line
> +reverse_option()
> +{
> + set -- $(cmdline_option R no_arg "$@")
> + echo $1
> +}
> +
> +patch_opt_d()
> +{
> + local subdir=$(cmdline_option d "$@")
> + [ -z "$subdir" ] || echo "${subdir:2}"
> +
> +}
> +
> +patch_input_file()
> +{
> + while [ $# -gt 0 ]
> + do
> + case "$1" in
> + -i|--input)
> + if [ $# -ge 2 ]
> + then
> + echo "$2"
> + return
> + fi
> + ;;
> + -i*)
> + echo "${1#-i}"
> + return
> + ;;
> + --input=*)
> + echo "${1#--input=}"
> + return
> + ;;
> + esac
> + shift
> + done
> + return 1
> +}
> +
> +tar_input_file()
> +{
> + case "$1" in
> + # Modern option format
> + -*)
> + while [ $# -gt 0 ]
> + do
> + case "$1" in
> + # Extract the file name (long option)
> + --file)
> + echo "$2"
> + return
> + ;;
> + --file=*)
> + echo "${1#--file=}"
> + return
> + ;;
> + # Skip other long options
> + --*)
> + shift
> + ;;
> + # Extract the file name (short option)
> + -*f)
> + echo "$2"
> + return
> + ;;
> + -f*)
> + echo "${1#-f}"
> + return
> + ;;
> + # Skip other short options and parameters
> + *)
> + shift
> + ;;
> + esac
> + done
> + ;;
> + # Legacy option format (must always come first)
> + *C*f*)
> + echo "$3"
> + return
> + ;;
> + *f*)
> + echo "$2"
> + return
> + ;;
> + ?*)
> + # Eat legacy options and try again
> + until [ $# -eq 0 -o "${1:0:1}" = "-" ]
> + do
> + shift
> + done
> + tar_input_file "$@"
> + return
> + ;;
> + esac
> + return 1
> +}
> +
> +unzip_input_file()
> +{
> + while [ $# -gt 0 ]
> + do
> + case "$1" in
> + -*)
> + shift
> + ;;
> + *)
> + echo "$1"
> + return
> + ;;
> + esac
> + done
> + return 1
> +}
> +
> +tar_opt_C()
> +{
> + case "$1" in
> + *C*f*)
> + echo "$2"
> + return ;;
> + esac
> +}
> +
> +pwd_to_dir()
> +{
> + local subdir=$1 dir
> +
> + if [ -n "$subdir" ]
> + then
> + dir=$(cd "$subdir" && echo $PWD)
> + else
> + dir=$PWD
> + fi
> + dir=${dir/$RPM_BUILD_DIR}
> + dir=${dir##/}
> + dir=${dir// /\\ }
> +
> + echo "$dir"
> +}
> +
> +PATH=${PATH#*:}
> +# If we are called too early, pass through without processing
> +[ -n "$RPM_BUILD_DIR" ] || exec ${0##*/} "$@"
> +
> +tmpdir=${RPM_BUILD_DIR%/*}
> +case "${0##*/}" in
> +patch)
> + inputfile=$(patch_input_file "$@")
> + ;;
> +tar)
> + inputfile=$(tar_input_file "$@")
> + # For tar, file - means read from stdin
> + [ "$inputfile" = "-" ] && inputfile=
> + ;;
> +unzip)
> + inputfile=$(unzip_input_file "$@")
> + ;;
> +esac
> +if [ -z "$inputfile" ]
> +then
> + # put data from stdin into tmpfile
> + cat > $tmpdir/data
> +fi
> +
> +unpackfile=$(original_file ${inputfile:-$tmpdir/data})
> +if [ -n "$unpackfile" ]
> +then
> + case "${0##*/}" in
> + patch)
> + echo -n p >&4
> + subdir=$(patch_opt_d "$@")
> + dir=$(pwd_to_dir $subdir)
> + echo "${0##*/} ${dir:-.} $unpackfile" \
> + $(strip_option "$@") $(reverse_option "$@") >&3
> + ;;
> + tar)
> + echo -n t >&4
> + subdir=$(tar_opt_C "$@")
> + dir=$(pwd_to_dir $subdir)
> + echo "${0##*/} ${dir:-.} $unpackfile" >&3
> + ;;
> + unzip)
> + echo -n Z >&4
> + dir=$(pwd_to_dir)
> + echo "${0##*/} ${dir:-.} $unpackfile" >&3
> + ;;
> + esac
> +fi
> +
> +if [ -n "$inputfile" ]
> +then
> + ${0##*/} "$@"
> +else
> + ${0##*/} "$@" < $tmpdir/data
> +fi
> --- a/quilt/scripts/inspect.in
> +++ b/quilt/scripts/inspect.in
> @@ -142,285 +142,9 @@ done > $tmpdir/md5sums
> echo >&4
> shopt -u nullglob
>
> -# wrapper script for patch, tar and unzip
> -cat <<-'EOF' > $tmpdir/bin/wrapper
> - #! @BASH@
> -
> - # find original data file by md5sum
> - original_file()
> - {
> - local file=$1 md5sum
> -
> - set -- $(md5sum < $file)
> - md5sum=$1
> - while read md5sum_ file_
> - do
> - if [ "$md5sum" = "$md5sum_" ]
> - then
> - echo ${file_#\*}
> - return 0
> - fi
> - done < $tmpdir/md5sums
> -
> - # Try harder
> - if ! [ -e $tmpdir/more-md5sums ]
> - then
> - ( cd $RPM_BUILD_DIR
> - find . -type f \
> - | sed -e 's:^.\/::' \
> - | xargs md5sum \
> - ) > $tmpdir/more-md5sums
> - fi
> -
> - while read md5sum_ file_
> - do
> - if [ "$md5sum" = "$md5sum_" ]
> - then
> - echo ${file_#\*}
> - return 0
> - fi
> - done < $tmpdir/more-md5sums
> -
> - return 1
> - }
> -
> - # Extract a command line option with or without argument
> - cmdline_option()
> - {
> - local letter=$1 no_arg=$2
> - shift
> -
> - while [ $# -ne 0 ]
> - do
> - if [ "${1:0:2}" = -$letter ]
> - then
> - if [ -z "$no_arg" ]
> - then
> - [ "$1" = -$letter ] && set -- "$1$2"
> - fi
> - echo $1
> - break
> - fi
> - shift
> - done
> - }
> -
> - # Extract the -p option from the command line
> - strip_option()
> - {
> - set -- $(cmdline_option p "$@")
> - [ "$1" != -p1 ] && echo $1
> - }
> -
> - # Extract the -R option from the command line
> - reverse_option()
> - {
> - set -- $(cmdline_option R no_arg "$@")
> - echo $1
> - }
> -
> - patch_opt_d()
> - {
> - local subdir=$(cmdline_option d "$@")
> - [ -z "$subdir" ] || echo "${subdir:2}"
> -
> - }
> -
> - patch_input_file()
> - {
> - while [ $# -gt 0 ]; do
> - case "$1" in
> - -i|--input)
> - if [ $# -ge 2 ]
> - then
> - echo "$2"
> - return
> - fi
> - ;;
> - -i*)
> - echo "${1#-i}"
> - return
> - ;;
> - --input=*)
> - echo "${1#--input=}"
> - return
> - ;;
> - esac
> - shift
> - done
> - return 1
> - }
> -
> - tar_input_file()
> - {
> - case "$1" in
> - # Modern option format
> - -*)
> - while [ $# -gt 0 ]; do
> - case "$1" in
> - # Extract the file name (long option)
> - --file)
> - echo "$2"
> - return
> - ;;
> - --file=*)
> - echo "${1#--file=}"
> - return
> - ;;
> - # Skip other long options
> - --*)
> - shift
> - ;;
> - # Extract the file name (short option)
> - -*f)
> - echo "$2"
> - return
> - ;;
> - -f*)
> - echo "${1#-f}"
> - return
> - ;;
> - # Skip other short options and parameters
> - *)
> - shift
> - ;;
> - esac
> - done
> - ;;
> - # Legacy option format (must always come first)
> - *C*f*)
> - echo "$3"
> - return
> - ;;
> - *f*)
> - echo "$2"
> - return
> - ;;
> - ?*)
> - # Eat legacy options and try again
> - until [ $# -eq 0 -o "${1:0:1}" = "-" ]; do
> - shift
> - done
> - tar_input_file "$@"
> - return
> - ;;
> - esac
> - return 1
> - }
> -
> - unzip_input_file()
> - {
> - while [ $# -gt 0 ]; do
> - case "$1" in
> - -*)
> - shift
> - ;;
> - *)
> - echo "$1"
> - return
> - ;;
> - esac
> - done
> - return 1
> - }
> -
> - tar_opt_C()
> - {
> - case "$1" in
> - *C*f*)
> - echo "$2"
> - return ;;
> - esac
> - }
> -
> - pwd_to_dir()
> - {
> - local subdir=$1 dir
> -
> - if [ -n "$subdir" ]
> - then
> - dir=$(cd "$subdir" && echo $PWD)
> - else
> - dir=$PWD
> - fi
> - dir=${dir/$RPM_BUILD_DIR}
> - dir=${dir##/}
> - dir=${dir// /\\ }
> -
> - echo "$dir"
> - }
> -
> - PATH=${PATH#*:}
> - # If we are called too early, pass through without processing
> - [ -n "$RPM_BUILD_DIR" ] || exec ${0##*/} "$@"
> -
> - tmpdir=${RPM_BUILD_DIR%/*}
> - case "${0##*/}" in
> - patch)
> - inputfile=$(patch_input_file "$@")
> - ;;
> - tar)
> - inputfile=$(tar_input_file "$@")
> - # For tar, file - means read from stdin
> - [ "$inputfile" = "-" ] && inputfile=
> - ;;
> - unzip)
> - inputfile=$(unzip_input_file "$@")
> - ;;
> - esac
> - if [ -z "$inputfile" ]
> - then
> - # put data from stdin into tmpfile
> - cat > $tmpdir/data
> - fi
> -
> - unpackfile=$(original_file ${inputfile:-$tmpdir/data})
> - if [ -n "$unpackfile" ]
> - then
> - case "${0##*/}" in
> - patch)
> - echo -n p >&4
> - subdir=$(patch_opt_d "$@")
> - dir=$(pwd_to_dir $subdir)
> - echo "${0##*/} ${dir:-.} $unpackfile" \
> - $(strip_option "$@") $(reverse_option "$@") >&3
> - ;;
> - tar)
> - echo -n t >&4
> - subdir=$(tar_opt_C "$@")
> - dir=$(pwd_to_dir $subdir)
> - echo "${0##*/} ${dir:-.} $unpackfile" >&3
> - ;;
> - unzip)
> - echo -n Z >&4
> - dir=$(pwd_to_dir)
> - echo "${0##*/} ${dir:-.} $unpackfile" >&3
> - ;;
> - esac
> - fi
> -
> - if [ -n "$inputfile" ]
> - then
> - ${0##*/} "$@"
> - else
> - ${0##*/} "$@" < $tmpdir/data
> - fi
> -EOF
> -
> -chmod 755 $tmpdir/bin/wrapper
> -# If $TMPDIR is mounted with noexec, rpmbuild won't be able to execute
> -# our wrapper script
> -if [ ! -x $tmpdir/bin/wrapper ]
> -then
> - printf "Cannot execute %s; filesystem mounted with noexec?\n" \
> - $tmpdir/bin/wrapper >&2
> - printf "Setting %s in ~/.quiltrc may help\n" "VARTMPDIR" >&2
> - exit 1
> -fi
> -
> -ln -s wrapper $tmpdir/bin/patch
> -ln -s wrapper $tmpdir/bin/tar
> -ln -s wrapper $tmpdir/bin/unzip
> +ln -s $QUILT_DIR/scripts/inspect-wrapper $tmpdir/bin/patch
> +ln -s $QUILT_DIR/scripts/inspect-wrapper $tmpdir/bin/tar
> +ln -s $QUILT_DIR/scripts/inspect-wrapper $tmpdir/bin/unzip
>
> # let rpm do all the dirty specfile stuff ...
> echo -n "### rpmbuild: " >&4
>
>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Quilt-dev] [PATCH RFC] inspect: Split the patch/tar/unzip wrapper to a separate script,
Jean Delvare <=