Hello community, here is the log from the commit of package quilt for openSUSE:Factory checked in at 2014-12-17 19:17:58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/quilt (Old) and /work/SRC/openSUSE:Factory/.quilt.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "quilt" Changes: -------- --- /work/SRC/openSUSE:Factory/quilt/quilt.changes 2014-10-31 18:27:07.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.quilt.new/quilt.changes 2014-12-17 19:16:56.000000000 +0100 @@ -1,0 +2,45 @@ +Mon Dec 8 10:39:42 CET 2014 - jdelv...@suse.de + +- Update upstream references. +- hackweek-11-11-setup-alternative-implementation.patch: Delete, + replaced with new implementation. +- hackweek-11-11-setup-trace-call-first.patch: inspect-wrapper: + Trace calls earlier. +- hackweek-11-12-setup-alternative-implementation-v2.patch: New + implementation of "setup --fast" option. + +------------------------------------------------------------------- +Tue Nov 4 13:30:30 CET 2014 - jdelv...@suse.de + +- quilt.spec: Only use Recommends for SUSE targets, as it was not + supported upstream until very recently so it breaks the build + on Fedora_18, RHEL_6 and CentOS_6. + +------------------------------------------------------------------- +Mon Nov 3 14:09:31 CET 2014 - jdelv...@suse.de + +- quilt-check-modified-series.patch: Add upstream reference. +- quilt-check-modified-series-rearm.patch: pop: Rearm consistency + check if needed. +- hackweek-11-01-comment-update.patch: inspect: Comment update. +- hackweek-11-02-cleanups.patch: setup/inspect: Cleanups. +- hackweek-11-03-inspect-list-all-options.patch: inspect: List all + options in usage text. +- hackweek-11-04-pass-through.patch: inspect: Pass through the + wrappers when appropriate. +- hackweek-11-05-no-explicit-rm.patch: inspect: Don't explicitly + delete the temporary data file. +- hackweek-11-06-exclude-from-md5sums.patch: inspect: Exclude more + files from md5sums. +- hackweek-11-07-normalize-path.patch: setup: Introduce function + normalize_path. +- hackweek-11-08-inspect-split-wrapper-script.patch: inspect: Split + the patch/tar/unzip wrapper to a separate script. +- hackweek-11-09-inspect-temporary-data-file.patch: + inspect-wrapper: Minor code optimization. +- hackweek-11-10-setup-fix-path-to-extra-patches.patch: setup: Fix + path to extra patches in series file. +- hackweek-11-11-setup-alternative-implementation.patch: setup: Add + --fast option. + +------------------------------------------------------------------- New: ---- hackweek-11-01-comment-update.patch hackweek-11-02-cleanups.patch hackweek-11-03-inspect-list-all-options.patch hackweek-11-04-pass-through.patch hackweek-11-05-no-explicit-rm.patch hackweek-11-06-exclude-from-md5sums.patch hackweek-11-07-normalize-path.patch hackweek-11-08-inspect-split-wrapper-script.patch hackweek-11-09-inspect-temporary-data-file.patch hackweek-11-10-setup-fix-path-to-extra-patches.patch hackweek-11-11-setup-trace-call-first.patch hackweek-11-12-setup-alternative-implementation-v2.patch quilt-check-modified-series-rearm.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ quilt.spec ++++++ --- /var/tmp/diff_new_pack.BKMoKu/_old 2014-12-17 19:16:57.000000000 +0100 +++ /var/tmp/diff_new_pack.BKMoKu/_new 2014-12-17 19:16:57.000000000 +0100 @@ -51,11 +51,26 @@ Patch10: push-add-auto-refresh.patch Patch11: inspect-skip-version-check.patch Patch12: quilt-check-modified-series.patch +Patch13: quilt-check-modified-series-rearm.patch +Patch61: hackweek-11-01-comment-update.patch +Patch62: hackweek-11-02-cleanups.patch +Patch63: hackweek-11-03-inspect-list-all-options.patch +Patch64: hackweek-11-04-pass-through.patch +Patch65: hackweek-11-05-no-explicit-rm.patch +Patch66: hackweek-11-06-exclude-from-md5sums.patch +Patch67: hackweek-11-07-normalize-path.patch +Patch68: hackweek-11-08-inspect-split-wrapper-script.patch +Patch69: hackweek-11-09-inspect-temporary-data-file.patch +Patch70: hackweek-11-10-setup-fix-path-to-extra-patches.patch +Patch71: hackweek-11-11-setup-trace-call-first.patch +Patch72: hackweek-11-12-setup-alternative-implementation-v2.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildArch: noarch +%if 0%{?suse_version} Recommends: procmail Recommends: bzip2 Recommends: /usr/bin/rpmbuild +%endif %if 0%{?suse_version} > 1120 Recommends: xz %endif @@ -82,6 +97,19 @@ %patch10 -p1 %patch11 -p1 %patch12 -p1 +%patch13 -p1 +%patch61 -p1 +%patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 +%patch69 -p1 +%patch70 -p1 +%patch71 -p1 +%patch72 -p1 %build # --with-rpmbuild=/usr/lib/rpm/rpmb: @@ -93,7 +121,7 @@ CFLAGS="%{optflags}" \ ./configure --prefix=/usr \ --mandir=%{_mandir} \ - --docdir=%{_docdir}/%{name} \ + --docdir=%{_docdir}/%{name}%{!?suse_version:-%{version}} \ --with-sendmail=/usr/sbin/sendmail \ --with-diffstat=/usr/bin/diffstat \ --with-patch-wrapper \ ++++++ hackweek-11-01-comment-update.patch ++++++ From: Jean Delvare <jdelv...@suse.de> Subject: inspect: Comment update Upstream: Committed (40f5bfbbd4f0a3f9e74c2129a142aab7f6f8ac14) --- quilt/scripts/inspect.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/quilt/scripts/inspect.in +++ b/quilt/scripts/inspect.in @@ -150,7 +150,7 @@ done > $tmpdir/md5sums echo >&4 shopt -u nullglob -# wrapper script for patch and tar +# wrapper script for patch, tar and unzip cat <<-'EOF' > $tmpdir/bin/wrapper #! @BASH@ ++++++ hackweek-11-02-cleanups.patch ++++++ From: Jean Delvare <jdelv...@suse.de> Subject: setup/inspect: Cleanups Upstream: Committed (aa5d1389f7ce7ca2fc51e791ec33b68404fdea6b) * Drop quotes that aren't needed and break syntax highlighting in some editors. * Coding style cleanups. --- quilt/scripts/inspect.in | 23 +++++++++++++---------- quilt/setup.in | 6 +++--- 2 files changed, 16 insertions(+), 13 deletions(-) --- a/quilt/scripts/inspect.in +++ b/quilt/scripts/inspect.in @@ -65,7 +65,7 @@ else specdir=$PWD fi -tmpdir="$(gen_tempfile -d ${VARTMPDIR:-/var/tmp}/${0##*/})" +tmpdir=$(gen_tempfile -d ${VARTMPDIR:-/var/tmp}/${0##*/}) mkdir -p $tmpdir || exit 1 add_exit_handler "rm -rf $tmpdir" mkdir -p $tmpdir/build @@ -116,7 +116,7 @@ do filetype="xz" ;; *) - filetype="$(file -b "$file")" + filetype=$(file -b "$file") ;; esac @@ -239,7 +239,8 @@ cat <<-'EOF' > $tmpdir/bin/wrapper while [ $# -gt 0 ]; do case "$1" in -i|--input) - if [ $# -ge 2 ]; then + if [ $# -ge 2 ] + then echo "$2" return fi @@ -372,12 +373,13 @@ cat <<-'EOF' > $tmpdir/bin/wrapper inputfile=$(unzip_input_file "$@") ;; esac - if [ -z "$inputfile" ]; then - # put data from stdin into tmpfile - cat > $tmpdir/data + if [ -z "$inputfile" ] + then + # put data from stdin into tmpfile + cat > $tmpdir/data fi - unpackfile="$(original_file ${inputfile:-$tmpdir/data})" + unpackfile=$(original_file ${inputfile:-$tmpdir/data}) if [ -n "$unpackfile" ] then case "${0##*/}" in @@ -403,10 +405,11 @@ cat <<-'EOF' > $tmpdir/bin/wrapper fi PATH=${PATH#*:} - if [ -n "$inputfile" ]; then - ${0##*/} "$@" + if [ -n "$inputfile" ] + then + ${0##*/} "$@" else - ${0##*/} "$@" < $tmpdir/data + ${0##*/} "$@" < $tmpdir/data fi EOF --- a/quilt/setup.in +++ b/quilt/setup.in @@ -205,7 +205,7 @@ case "$1" in "# Source: "*) shift 2 source="$@" - filetype="$(file -b "$source")" + filetype=$(file -b "$source") case "$filetype" in Zip*) echo "unzip ${tar_dir:-.} ${source// /\\ }" @@ -273,9 +273,9 @@ while read tag dir arg1 arg2 do case "$tag" in tar|unzip) - tar_dir="$dir" + tar_dir=$dir [ "$tar_dir" = . ] && tar_dir= - tar_file="$arg1" + tar_file=$arg1 ;; patch) if [ ! -e "$prefix$dir/$QUILT_PATCHES" ] ++++++ hackweek-11-03-inspect-list-all-options.patch ++++++ From: Jean Delvare <jdelv...@suse.de> Subject: inspect: List all options in usage text Upstream: Committed (c57b81b7367ebc6f3757b114302b537d6e305431) Options -v and --sourcedir were not listed. --- quilt/scripts/inspect.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/quilt/scripts/inspect.in +++ b/quilt/scripts/inspect.in @@ -21,7 +21,7 @@ cd ${SUBDIR:-.} usage() { - echo "Usage: ${0##*/} [--fuzz=N] specfile" + echo "Usage: ${0##*/} [-v] [--sourcedir dir] [--fuzz=N] specfile" exit 1 } ++++++ hackweek-11-04-pass-through.patch ++++++ From: Jean Delvare <jdelv...@suse.de> Subject: inspect: Pass through the wrappers when appropriate Upstream: Committed (e3ee2d8596cbac98d29d72292b6b45706c0010af) The wrappers may be called before the %prep section is entered, in which case RPM_BUILD_DIR isn't set yet. In that case we want to pass trough transparently. --- quilt/scripts/inspect.in | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) --- a/quilt/scripts/inspect.in +++ b/quilt/scripts/inspect.in @@ -358,6 +358,10 @@ cat <<-'EOF' > $tmpdir/bin/wrapper echo "$dir" } + PATH=${PATH#*:} + # If we are called too early, pass through without processing + [ -n "$RPM_BUILD_DIR" ] || exec ${0##*/} "$@" + tmpdir=${RPM_BUILD_DIR%/*} rm -f $tmpdir/data case "${0##*/}" in @@ -404,7 +408,6 @@ cat <<-'EOF' > $tmpdir/bin/wrapper esac fi - PATH=${PATH#*:} if [ -n "$inputfile" ] then ${0##*/} "$@" ++++++ hackweek-11-05-no-explicit-rm.patch ++++++ From: Jean Delvare <jdelv...@suse.de> Subject: inspect: Don't explicitly delete the temporary data file Upstream: Committed (3931a551f43751c6c18e6439864a7d012f2d5f4e) This temporary data file is overwritten as needed and the directory it sits in is blasted when the script exits, so there is no point in explicitly deleting this file at the beginning of each wrapper invocation. This simple change speeds up "inspect" by 3-4% in my tests. --- quilt/scripts/inspect.in | 1 - 1 file changed, 1 deletion(-) --- a/quilt/scripts/inspect.in +++ b/quilt/scripts/inspect.in @@ -363,7 +363,6 @@ cat <<-'EOF' > $tmpdir/bin/wrapper [ -n "$RPM_BUILD_DIR" ] || exec ${0##*/} "$@" tmpdir=${RPM_BUILD_DIR%/*} - rm -f $tmpdir/data case "${0##*/}" in patch) inputfile=$(patch_input_file "$@") ++++++ hackweek-11-06-exclude-from-md5sums.patch ++++++ From: Jean Delvare <jdelv...@suse.de> Subject: inspect: Exclude more files from md5sums Upstream: Committed (367ef38abdfc93ceef435f805c97af7a092ea46e) A few more files can be excluded from md5sums as we know they are neither patches nor archives: * _constraints, _service and baselibs.conf, from the Build Service * signature files * rpmlintrc files --- quilt/scripts/inspect.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) --- a/quilt/scripts/inspect.in +++ b/quilt/scripts/inspect.in @@ -95,7 +95,7 @@ for file in $sourcedir/* do basename=${file##*/} case "$basename" in - ready|bigpack|MD5SUMS|MD5SUMS.meta|*.spec|*.changes) + ready|bigpack|_constraints|_service|baselibs.conf|MD5SUMS|MD5SUMS.meta|*.spec|*.changes|*.sig|*.sign|*rpmlintrc) continue ;; esac ++++++ hackweek-11-07-normalize-path.patch ++++++ From: Jean Delvare <jdelv...@suse.de> Subject: setup: Introduce function normalize_path Upstream: Committed (1e8e4ff9b8027235d0577369719c0c58ba460cf8) Move the path normalization code to a separate function, to avoid redundancy and make the code more readable. --- quilt/setup.in | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) --- a/quilt/setup.in +++ b/quilt/setup.in @@ -71,6 +71,15 @@ check_for_existing_files() return $status } +# Resolve ".." in path and clean up double slashes +normalize_path() +{ + echo "$1" | sed -r -e 's://:/:g' \ + -e ':again' \ + -e 's:/[^/]+/\.\.(/|$):\1:g' \ + -e 'tagain' +} + create_symlink() { local target=$1 link=$2 up @@ -80,16 +89,8 @@ create_symlink() return fi - set -- "$(echo "$PWD/$target" | \ - sed -r -e 's://:/:g' \ - -e ':again' \ - -e 's:/[^/]+/\.\.(/|$):\1:g' \ - -e 'tagain')" \ - "$(echo "$PWD/$link" | \ - sed -r -e 's://:/:g' \ - -e ':again' \ - -e 's:/[^/]+/\.\.(/|$):\1:g' \ - -e 'tagain')" + set -- "$(normalize_path "$PWD/$target")" \ + "$(normalize_path "$PWD/$link")" while [ "${1%%/*}" = "${2%%/*}" ] do set -- "${1#*/}" "${2#*/}" ++++++ hackweek-11-08-inspect-split-wrapper-script.patch ++++++ From: Jean Delvare <jdelv...@suse.de> Subject: inspect: Split the patch/tar/unzip wrapper to a separate script Upstream: Committed (9f1f21a1fcd6700c9f9fda8c1b953f7e76538c76) 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. --- Makefile.in | 6 quilt/scripts/inspect-wrapper.in | 265 ++++++++++++++++++++++++++++++++++++ quilt/scripts/inspect.in | 282 --------------------------------------- 3 files changed, 271 insertions(+), 282 deletions(-) --- a/Makefile.in +++ b/Makefile.in @@ -79,8 +79,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) @@ -391,7 +391,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 @@ -150,285 +150,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 ++++++ hackweek-11-09-inspect-temporary-data-file.patch ++++++ From: Jean Delvare <jdelv...@suse.de> Subject: inspect-wrapper: Minor code optimization Upstream: Committed (f159ee6f0bcd6b9abdc8830a1228d902e93311ae) Don't test if inputfile is set twice in a row. --- quilt/scripts/inspect-wrapper.in | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) --- a/quilt/scripts/inspect-wrapper.in +++ b/quilt/scripts/inspect-wrapper.in @@ -226,13 +226,15 @@ unzip) inputfile=$(unzip_input_file "$@") ;; esac -if [ -z "$inputfile" ] +if [ -n "$inputfile" ] then + unpackfile=$(original_file "$inputfile") +else # put data from stdin into tmpfile cat > $tmpdir/data + unpackfile=$(original_file $tmpdir/data) fi -unpackfile=$(original_file ${inputfile:-$tmpdir/data}) if [ -n "$unpackfile" ] then case "${0##*/}" in ++++++ hackweek-11-10-setup-fix-path-to-extra-patches.patch ++++++ From: Jean Delvare <jdelv...@suse.de> Subject: setup: Fix path to extra patches in series file Upstream: Committed (1e5d95849e4a09427efefc7bd7e9f33bf911f526) Extra patches (typically contained in archives) end up in the working directory, not the source directory where regular patches live. In the most common case, it makes no difference because both directories are the same. However, as soon as options -d or --sourcedir are used in conjunction with extra patches, the working directory and the source directory are different, and the paths to the extra patches in the series file get wrong. While we can't possible handle the case where the source and working directories are completely different, we can easily handle the most typical case where the working directory is a subdirectory of the source directory. --- quilt/scripts/inspect-wrapper.in | 2 +- quilt/setup.in | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) --- a/quilt/scripts/inspect-wrapper.in +++ b/quilt/scripts/inspect-wrapper.in @@ -30,7 +30,7 @@ original_file() do if [ "$md5sum" = "$md5sum_" ] then - echo ${file_#\*} + echo $QUILT_SETUP_PREFIX${file_#\*} return 0 fi done < $tmpdir/more-md5sums --- a/quilt/setup.in +++ b/quilt/setup.in @@ -101,6 +101,27 @@ create_symlink() ln -s "${1:-.}" "$link" } +dir_to_dir() +{ + local from=$1 to=$2 + + [ "${from:0:1}" = / ] || from=$PWD/$from + from=$(normalize_path "$from") + + [ "${to:0:1}" = / ] || to=$PWD/$to + to=$(normalize_path "$to") + + # If the target is a subdirectory of the origin, we can express the path + # in a relative way. Otherwise, return the absolute path. + if [ "${to:0:${#from}}" = "$from" ] + then + to=${to:${#from}} + to=${to#/} + fi + + echo "$to" +} + usage() { printf $"Usage: quilt setup [-d path-prefix] [-v] [--sourcedir dir] [--fuzz=N] {specfile|seriesfile}\n" @@ -170,6 +191,11 @@ fi tmpfile=$(gen_tempfile) add_exit_handler "rm -f $tmpfile" +# The patches link will point to the source directory, while extra patches +# may be available under $prefix. If the latter is a subdirectory of the former, +# a prefix can be added to fix up the path to the extra patches. +export QUILT_SETUP_PREFIX=$(dir_to_dir "$sourcedir" "$prefix") + case "$1" in *.spec) spec_file=$1 ++++++ hackweek-11-11-setup-trace-call-first.patch ++++++ From: Jean Delvare <jdelv...@suse.de> Subject: inspect-wrapper: Trace calls earlier Upstream: Submitted (2014-12-07) Trace the calls to the patch/tar/unzip wrapper earlier. That way, if anything goes wrong, we know which type of file was being processed. Even if nothing goes wrong, the user now sees the file type as it is being processed (which can take a long time.) --- quilt/scripts/inspect-wrapper.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) --- a/quilt/scripts/inspect-wrapper.in +++ b/quilt/scripts/inspect-wrapper.in @@ -215,14 +215,17 @@ PATH=${PATH#*:} tmpdir=${RPM_BUILD_DIR%/*} case "${0##*/}" in patch) + echo -n p >&4 inputfile=$(patch_input_file "$@") ;; tar) + echo -n t >&4 inputfile=$(tar_input_file "$@") # For tar, file - means read from stdin [ "$inputfile" = "-" ] && inputfile= ;; unzip) + echo -n Z >&4 inputfile=$(unzip_input_file "$@") ;; esac @@ -239,20 +242,17 @@ 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 ;; ++++++ hackweek-11-12-setup-alternative-implementation-v2.patch ++++++ From: Jean Delvare <jdelv...@suse.de> Subject: setup: Add --fast option Upstream: Submitted (2014-12-07) This is an alternative implementation of "quilt setup" for rpm spec files, which is much faster than the original implementation. The idea is to have rpmbuild generate our working tree directly, instead of taking note of everything it does and then replaying that record from scratch. The new implementation is enabled with option --fast. The original implementation can be selected with --slow, which is the default. Having this option makes it possible to set the default to --fast in ~/.quiltrc and revert to --slow on the command line on a case-by-case basis. This will also make it easier if we decide to change the default in the future. In general, the generated working tree should be the same with --slow or --fast. There are 3 known exceptions though: * The header of the series files is incomplete when using --fast, which means that you can't reuse these series files to feed "quilt setup" later. * If the spec file generates files other than with the tar, unzip and patch commands, you wouldn't get these files in your working tree with --slow, but with --fast you will. * With --fast, all patches are added to the series file, regardless of whether they apply or not. This also means that patches which fail to apply are not reported as such until you attempt to push them. On large packages, this alternative implementation was found to be up to 4 times faster than the original implementation. --- This is my SUSE hackweek 11 project, more information at: https://hackweek.suse.com/11/projects/194 quilt/scripts/inspect-wrapper.in | 5 ++++ quilt/scripts/inspect.in | 23 ++++++++++++++++++-- quilt/setup.in | 43 +++++++++++++++++++++++++++++++++++---- 3 files changed, 64 insertions(+), 7 deletions(-) --- a/quilt/scripts/inspect-wrapper.in +++ b/quilt/scripts/inspect-wrapper.in @@ -220,12 +220,14 @@ patch) ;; tar) echo -n t >&4 + [ -n "$QUILT_SETUP_FAST" ] && exec ${0##*/} "$@" inputfile=$(tar_input_file "$@") # For tar, file - means read from stdin [ "$inputfile" = "-" ] && inputfile= ;; unzip) echo -n Z >&4 + [ -n "$QUILT_SETUP_FAST" ] && exec ${0##*/} "$@" inputfile=$(unzip_input_file "$@") ;; esac @@ -259,6 +261,9 @@ then esac fi +# In fast mode, we don't actually apply patches +[ ${0##*/}$QUILT_SETUP_FAST = patch1 ] && exit 0 + if [ -n "$inputfile" ] then ${0##*/} "$@" --- a/quilt/scripts/inspect.in +++ b/quilt/scripts/inspect.in @@ -21,11 +21,11 @@ cd ${SUBDIR:-.} usage() { - echo "Usage: ${0##*/} [-v] [--sourcedir dir] [--fuzz=N] specfile" + echo "Usage: ${0##*/} [-v] [--sourcedir dir] [--targetdir dir] [--fuzz=N] specfile" exit 1 } -options=$(getopt -o v --long sourcedir:,fuzz: -n "${0##*/}" -- "$@") || exit +options=$(getopt -o v --long sourcedir:,targetdir:,fuzz: -n "${0##*/}" -- "$@") || exit eval set -- "$options" @@ -40,6 +40,9 @@ do --sourcedir) sourcedir=${2%/}/ shift 2 ;; + --targetdir) + targetdir=$2 + shift 2 ;; --fuzz) # Only works with rpm 4.6 and later DEFINE_FUZZ="%define _default_patch_fuzz $2" @@ -68,8 +71,16 @@ fi tmpdir=$(gen_tempfile -d ${VARTMPDIR:-/var/tmp}/${0##*/}) mkdir -p $tmpdir || exit 1 add_exit_handler "rm -rf $tmpdir" -mkdir -p $tmpdir/build mkdir -p $tmpdir/bin +if [ -n "$targetdir" ] +then + # Fast mode + [ -d "$targetdir" ] || mkdir -p "$targetdir" || exit 1 + ln -s "$targetdir" $tmpdir/build +else + # Standard mode + mkdir -p $tmpdir/build +fi # Older versions of Suse packages have a symbolic release number, and rpmbuild # won't like that, so change it to something compliant. @@ -98,6 +109,11 @@ do ready|bigpack|_constraints|_service|baselibs.conf|MD5SUMS|MD5SUMS.meta|*.spec|*.changes|*.sig|*.sign|*rpmlintrc) continue ;; + # In fast mode, we are only interested in patches, so filter out + # archives + *.tar|*.tar.Z|*.tar.gz|*.tgz|*.tar.bz2|*.tar.xz|*.zip) + [ -n "$targetdir" ] && continue + ;; esac [ -f "$file" ] || continue echo -n "." >&4 @@ -158,6 +174,7 @@ ln -s $QUILT_DIR/scripts/inspect-wrapper echo -n "### rpmbuild: " >&4 export PATH="$tmpdir/bin:$PATH" +export QUILT_SETUP_FAST=${targetdir:+1} rpmbuild --eval "%define _sourcedir $sourcedir" \ --eval "%define _specdir $specdir" \ --eval "%define _builddir $tmpdir/build" \ --- a/quilt/setup.in +++ b/quilt/setup.in @@ -124,7 +124,7 @@ dir_to_dir() usage() { - printf $"Usage: quilt setup [-d path-prefix] [-v] [--sourcedir dir] [--fuzz=N] {specfile|seriesfile}\n" + printf $"Usage: quilt setup [-d path-prefix] [-v] [--sourcedir dir] [--fuzz=N] [--slow|--fast] {specfile|seriesfile}\n" if [ x$1 = x-h ] then printf $" @@ -139,6 +139,17 @@ Initializes a source tree from an rpm sp --fuzz=N Set the maximum fuzz factor (needs rpm 4.6 or later). + +--slow Use the original, slow method to process the spec file. This is the + default for now, but that might change in the future. In this mode, + rpmbuild generates a working tree in a temporary directory while all + its actions are recorded, and then everything is replayed from scratch + in the target directory. + +--fast Use an alternative, faster method to process the spec file. In this + mode, rpmbuild is told to generate a working tree directly in the + target directory. If the input is a series file, it is assumed that + all archives have been extracted manually beforehand. " exit 0 else @@ -146,7 +157,7 @@ Initializes a source tree from an rpm sp fi } -options=`getopt -o d:vh --long sourcedir:,fuzz: -- "$@"` +options=`getopt -o d:vh --long sourcedir:,fuzz:,slow,fast -- "$@"` if [ $? -ne 0 ] then @@ -175,6 +186,12 @@ do --fuzz) opt_fuzz="--fuzz $2" shift 2 ;; + --slow) + opt_fast= + shift ;; + --fast) + opt_fast=1 + shift ;; --) shift break ;; @@ -208,8 +225,24 @@ case "$1" in exit 1 fi - if ! $QUILT_DIR/scripts/inspect $verbose $opt_sourcedir $opt_fuzz \ - "$spec_file" 2>&1 > $tmpfile + if [ -n "$opt_fast" ] + then + if [ "${prefix:0:1}" = / ] + then + targetdir=$prefix + else + targetdir=$PWD/$prefix + fi + + $QUILT_DIR/scripts/inspect $verbose $opt_sourcedir $opt_fuzz \ + --targetdir "$targetdir" \ + "$spec_file" 2>&1 > $tmpfile + else + $QUILT_DIR/scripts/inspect $verbose $opt_sourcedir $opt_fuzz \ + "$spec_file" 2>&1 > $tmpfile + fi + + if [ $? -ne 0 ] then printf $"The %%prep section of %s failed; results may be incomplete\n" "$spec_file" if [ -z "$verbose" ] @@ -257,8 +290,10 @@ case "$1" in esac # Make sure that unpacking will not overwrite anything +[ -n "$opt_fast" ] || \ check_for_existing_directories || exit 1 +[ -n "$opt_fast" ] || \ while read tag dir arg1 arg2 do case "$tag" in ++++++ quilt-check-modified-series-rearm.patch ++++++ From: Jean Delvare <jdelv...@suse.de> Subject: pop: Rearm consistency check if needed Upstream: Committed (b42985c9b2a5f8329ad393842487c4142951818e) If the series file is inconsistent, "quilt pop" will disable the consistency check as it updates the timestamp of the database file. It's OK if all patches are popped. If not then the series file may still be inconsistent. In that case, we want to update the timestamp of the series file, to rearm the consistency check. --- quilt/pop.in | 9 +++++++++ test/altered-series.test | 23 +++++++++++++++++------ 2 files changed, 26 insertions(+), 6 deletions(-) --- a/quilt/pop.in +++ b/quilt/pop.in @@ -243,6 +243,13 @@ then exit 2 fi +# We will update the list of applied patches, which in turn will disable the +# consistency check. Enable it again if needed. +if [ -z "$opt_all" -a ! "$DB" -nt "$SERIES" ] && ! consistency_check +then + rearm_check=1 +fi + for patch in $patches do [ -z "$opt_refresh" ] || quilt_command refresh $QUILT_REFRESH_ARGS @@ -264,6 +271,8 @@ else # corner cases such as files added to a patch but not modified. $QUILT_DIR/scripts/backup-files -L -s -B "$QUILT_PC/$patch/" - printf $"Now at patch %s\n" "$(print_patch "$patch")" + + [ -z "$rearm_check" ] || touch "$SERIES" fi ### Local Variables: ### mode: shell-script --- a/test/altered-series.test +++ b/test/altered-series.test @@ -6,22 +6,24 @@ $ cat > patches/series < 02.patch < 03.patch -$ quilt push -q +$ quilt push -q 2 > Applying patch patches/01.patch > Patch patches/01.patch does not exist; applied empty patch -> Now at patch patches/01.patch +> Applying patch patches/02.patch +> Patch patches/02.patch does not exist; applied empty patch +> Now at patch patches/02.patch $ quilt series -v -> = patches/01.patch -> patches/02.patch +> + patches/01.patch +> = patches/02.patch > patches/03.patch # Touch the series file but preserve the order -> OK $ touch patches/series $ quilt series -v -> = patches/01.patch -> patches/02.patch +> + patches/01.patch +> = patches/02.patch > patches/03.patch # Change the order of the patch series -> complain @@ -33,6 +35,15 @@ $ cat > patches/series $ quilt series -v > The series file no longer matches the applied patches. Please run 'quilt pop > -a'. +$ quilt pop +> Patch patches/02.patch appears to be empty, removing +> +> Now at patch patches/01.patch + +# That wasn't enough, keep complaining +$ quilt series -v +> The series file no longer matches the applied patches. Please run 'quilt pop -a'. + $ quilt pop -a > Patch patches/01.patch appears to be empty, removing > ++++++ quilt-check-modified-series.patch ++++++ --- /var/tmp/diff_new_pack.BKMoKu/_old 2014-12-17 19:16:57.000000000 +0100 +++ /var/tmp/diff_new_pack.BKMoKu/_new 2014-12-17 19:16:57.000000000 +0100 @@ -1,6 +1,6 @@ From: Jean Delvare <jdelv...@suse.de> Subject: Check for series file consistency -Upstream: Submitted (2014-10-14) +Upstream: Committed (54268c1aab28ce763ec028982bf54236488dacc5) Quilt allows manual changes to the series file to some degree. For example, adding comments or reordering patches in the unapplied -- To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org