Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12:GA
quilt
expand.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File expand.diff of Package quilt
Index: quilt-0.50/quilt/expand.in =================================================================== --- /dev/null +++ quilt-0.50/quilt/expand.in @@ -0,0 +1,236 @@ +#! @BASH@ + +# This script is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# See the COPYING and AUTHORS files for more details. + +# Read in library functions +if [ "$(type -t patch_file_name)" != function ] +then + if ! [ -r $QUILT_DIR/scripts/patchfns ] + then + echo "Cannot read library @SCRIPTS@/patchfns" >&2 + exit 1 + fi + . $QUILT_DIR/scripts/patchfns +fi + +usage() +{ + printf $"Usage: quilt expand [patch]\n" + if [ x$1 = x-h ] + then + printf $" +Expand the topmost or specified collapsed patch into its individual patches. +" + exit 0 + else + exit 1 + fi +} + +fill_orig() { + local orig=$1 patch exclude + + cp -rld "$QUILT_PC/$combined_patch" "$orig" + + for patch in $(patches_after "$combined_patch") + do + is_applied "$patch" || break + ( cd "$QUILT_PC/$patch" \ + && find -type f \ + | xargs -r cp -il --parents --target-directory "$orig" \ + 2> /dev/null + ) + done + + if [ ${QUILT_PATCHES:0:1} != / ] + then + exclude="$exclude"'-path "./$QUILT_PATCHES" -prune -o ' + fi + if [ ${QUILT_PC:0:1} != / ] + then + exclude="$exclude"'-path "./$QUILT_PC" -prune -o ' + fi + eval find $exclude -type f -print \ + | xargs -r cp -il --parents --target-directory "$orig" \ + 2> /dev/null + + find "$orig" -size 0 \ + | xargs -r rm -f +} + +move_pc_dirs() { + local pc_dir=$1 + + for ((n = 0; n < ${#patches[@]}; n++)) + do + mkdir -p $(dirname "$QUILT_PC/${patches[n]}") \ + && mv "$pc_dir/${patches[n]}" "$QUILT_PC/${patches[n]}" \ + || return 1 + done +} + +expand_in_list() { + local series=$1 replace=$2 tmpfile=$(gen_tempfile $series.XXXXXX) + awk ' + /^'"$(quote_re $combined_patch)"'([ \t]|$)/ \ + { print patches + replaced++ + next } + { print } + END { exit (replaced != 1) } + ' patches="$replace" \ + < $series > $tmpfile + if [ $? = 0 ] + then + mv $tmpfile $series + else + rm -f $tmpfile + return 1 + fi +} + +options=`getopt -o h --long help: -- "$@"` + +if [ $? -ne 0 ] +then + usage +fi + +eval set -- "$options" + +while true +do + case "$1" in + -h) + usage -h ;; + --) + shift + break ;; + esac +done + +if [ $# -gt 1 ] +then + usage +fi + +if [ -n "$1" ] +then + if ! combined_patch=$(find_patch $1) + then + printf $"Patch %s is not in series file\n" "$1" >&2 + exit 1 + fi +else + if ! combined_patch=$(top_patch) + then + printf $"No patches applied\n" >&2 + exit 1 + fi +fi + +combined_series=$(patch_file_name $combined_patch \ + | sed -e 's:\.gz$::' -e 's:\.bz2$::' -e 's:\.xz$::' -e 's:\.lzma$::').series + +if ! [ -f "$combined_series" ] +then + printf $"Patch %s is not a combined patch\n" "$(print_patch "$1")" + exit 1 +fi + +patches=( $(sed -e $'s:[ \t].*::' $combined_series) ) + +if ! is_applied "$combined_patch" +then + for ((n = 0; n < ${#patches[@]}; n++)) + do + printf $"Applying patch %s\n" "$(print_patch "${patches[n]}")" + done + if ! expand_in_list "$SERIES" "$(< "$combined_series")" + then + printf "Expanding %s failed\n" \ + "$(print_patch "$combined_patch")" + exit 1 + fi + exit 0 +fi + +for ((n = 0; n < ${#patches[@]}; n++)) +do + patch=${patches[n]} + if ! [ -e "$(patch_file_name "$patch")" ] + then + printf $"Component patch %s of %s not found\n" "$patch" \ + "$(print_patch "$combined_patch")" + exit 1 + fi + if is_applied "$patch" + then + printf $"Component patch %s of %s appears to be applied\n" \ + "$(print_patch "$patch")" \ + "$(print_patch "$combined_patch")" + exit 1 + fi +done + +tmpdir=$(gen_tempfile -d $QUILT_PC/expand) +trap "rm -rf $tmpdir" EXIT + +[ "${tmpdir:0:1}" = / ] || tmpdir=$PWD/$tmpdir + +fill_orig $tmpdir/orig +cp -rld $tmpdir/orig $tmpdir/tree + +for ((n = 0; n < ${#patches[@]}; n++)) +do + patch=${patches[n]} + pc_dir=$tmpdir/pc/$patch + patch_args=$(SERIES=$combined_series; patch_args $patch) + + printf $"Applying patch %s\n" "$(print_patch "$patch")" + if ! cat_file "$(patch_file_name "$patch")" \ + | patch $QUILT_PATCH_OPTS $patch_args \ + --backup --prefix="$pc_dir/" \ + -Efs -d "$tmpdir/tree" >/dev/null + then + printf $"Patch %s does not apply; aborting expand\n" \ + "$(print_patch "$patch")" + exit 1 + fi + touch $pc_dir/.timestamp +done + +printf $"Verifying against patch %s\n" "$(print_patch "$combined_patch")" +if ! cat_file "$(patch_file_name "$combined_patch")" \ + | patch $QUILT_PATCH_OPTS $(patch_args $combined_patch) \ + --no-backup-if-mismatch -Efs -d "$tmpdir/orig" >/dev/null +then + printf $"Patch %s does not apply; aborting expand\n" \ + "$(print_patch "combined_patch")" + exit 1 +fi + +if ! diff -Nqr "$tmpdir/orig" "$tmpdir/tree" > /dev/null +then + diff -Nur "$tmpdir/orig" "$tmpdir/tree" + printf $"The patches do not add up to the combined patch\n" + exit 1 +fi + +if ! move_pc_dirs "$tmpdir/pc" || + ! expand_in_list $DB "$(sed -e $'s:[ \t].*::' "$combined_series")" || + ! expand_in_list "$SERIES" "$(< "$combined_series")" || + ! rm -rf $QUILT_PC/$combined_patch +then + printf "Expanding %s failed\n" "$(print_patch "$combined_patch")" + exit 1 +fi + +### Local Variables: +### mode: shell-script +### End: +# vim:filetype=sh Index: quilt-0.50/test/expand.test =================================================================== --- /dev/null +++ quilt-0.50/test/expand.test @@ -0,0 +1,121 @@ + $ rm -rf d + $ mkdir -p d/patches + $ cd d + + $ echo not part of any > patch + $ echo foo > foo + $ echo bar > bar + $ echo void > void + $ quilt new patch1 + > Patch patches/patch1 is now on top + + $ quilt add foo + > File foo added to patch patches/patch1 + + $ echo foo2 > foo + $ quilt refresh + > Refreshed patch patches/patch1 + + $ quilt new subdir/patch2 + > Patch patches/subdir/patch2 is now on top + + $ quilt add bar void + > File bar added to patch patches/subdir/patch2 + > File void added to patch patches/subdir/patch2 + + $ echo bar2 > bar + $ rm void + $ quilt refresh + > Refreshed patch patches/subdir/patch2 + + $ quilt diff -p0 --combine - --no-index > patches/combined + $ quilt pop -qa + > Removing patch patches/subdir/patch2 + > Removing patch patches/patch1 + > No patches applied + + $ mv patches/series patches/combined.series + $ echo combined -p0 > patches/series + $ quilt push -q + > Applying patch patches/combined + > Now at patch patches/combined + + $ quilt expand + > Applying patch patches/patch1 + > Applying patch patches/subdir/patch2 + > Verifying against patch patches/combined + + $ quilt series + > patches/patch1 + > patches/subdir/patch2 + + $ quilt pop -qaR + > Removing patch patches/subdir/patch2 + > Removing patch patches/patch1 + > No patches applied + + $ quilt push -qa + > Applying patch patches/patch1 + > Applying patch patches/subdir/patch2 + > Now at patch patches/subdir/patch2 + + $ quilt new patch3 + > Patch patches/patch3 is now on top + + $ quilt add void + > File void added to patch patches/patch3 + + $ echo void > void + $ quilt refresh -p0 + > Refreshed patch patches/patch3 + + $ mkdir -p patches/subdir2 + $ quilt diff -p1 --combine - --no-index > patches/subdir2/combined2 + $ quilt pop -qaR + > Removing patch patches/patch3 + > Removing patch patches/subdir/patch2 + > Removing patch patches/patch1 + > No patches applied + + $ mv patches/series patches/subdir2/combined2.series + $ echo subdir2/combined2 > patches/series + $ quilt push -q + > Applying patch patches/subdir2/combined2 + > Now at patch patches/subdir2/combined2 + + $ quilt expand + > Applying patch patches/patch1 + > Applying patch patches/subdir/patch2 + > Applying patch patches/patch3 + > Verifying against patch patches/subdir2/combined2 + + $ quilt series + > patches/patch1 + > patches/subdir/patch2 + > patches/patch3 + + $ quilt pop -qaR + > Removing patch patches/patch3 + > Removing patch patches/subdir/patch2 + > Removing patch patches/patch1 + > No patches applied + + $ cat foo bar void + > foo + > bar + > void + + $ echo subdir2/combined2 > patches/series + + $ quilt expand subdir2/combined2 + > Applying patch patches/patch1 + > Applying patch patches/subdir/patch2 + > Applying patch patches/patch3 + + $ quilt series + > patches/patch1 + > patches/subdir/patch2 + > patches/patch3 + + $ cd .. + $ rm -rf d
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor