?? refresh.in
字號(hào):
#! @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 functionsif [ "$(type -t patch_file_name)" != function ]then if ! [ -r $QUILT_DIR/scripts/patchfns ] then echo "Cannot read library $QUILT_DIR/scripts/patchfns" >&2 exit 1 fi . $QUILT_DIR/scripts/patchfnsfiusage(){ printf $"Usage: quilt refresh [-p n|-p ab] [-u|-U num|-c|-C num] [-f] [--no-timestamps] [--no-index] [--diffstat] [--sort] [--backup] [--strip-trailing-whitespace] [patch]\n" if [ x$1 = x-h ] then printf $"Refreshes the specified patch, or the topmost patch by default.Documentation that comes before the actual patch in the patch file isretained.It is possible to refresh patches that are not on top. If any patcheson top of the patch to refresh modify the same files, the script abortsby default. Patches can still be refreshed with -f. In that case thisscript will print a warning for each shadowed file, changes by morerecent patches will be ignored, and only changes in files that have notbeen modified by any more recent patches will end up in the specifiedpatch.-p n Create a -p n style patch (-p0 or -p1 supported).-p ab Create a -p1 style patch, but use a/file and b/file as the original and new filenames instead of the default dir.orig/file and dir/file names.-u, -U num, -c, -C num Create a unified diff (-u, -U) with num lines of context. Create a context diff (-c, -C) with num lines of context. The number of context lines defaults to 3.--no-timestamps Do not include file timestamps in patch headers.--no-index Do not output Index: lines.--diffstat Add a diffstat section to the patch header, or replace the existing diffstat section.-f Enforce refreshing of a patch that is not on top.--backup Create a backup copy of the old version of a patch as patch~.--sort Sort files by their name instead of preserving the original order.--strip-trailing-whitespace Strip trailing whitespace at the end of lines." exit 0 else exit 1 fi}die(){ local status=$1 [ -n "$tmp_patch" ] && rm -f $tmp_patch [ -n "$tmp_header" ] && rm -f $tmp_header [ -n "$tmp_result" ] && rm -f $tmp_result exit $status}options=`getopt -o p:uU:cC:fh --long no-timestamps,diffstat,backup,sort \ --long no-index \ --long strip-trailing-whitespace -- "$@"`if [ $? -ne 0 ]then usagefieval set -- "$options"opt_format=-uwhile truedo case "$1" in -p) opt_strip_level=$2 shift 2 ;; -f) opt_force=1 shift ;; -u|-c) opt_format=$1 shift ;; -U|-C) opt_format="$1 $2" shift 2 ;; -h) usage -h ;; --no-timestamps) QUILT_NO_DIFF_TIMESTAMPS=1 shift ;; --no-index) QUILT_NO_DIFF_INDEX=1 shift ;; --diffstat) opt_diffstat=1 shift ;; --backup) QUILT_BACKUP=1 shift ;; --sort) opt_sort=1 shift ;; --strip-trailing-whitespace) opt_strip_whitespace=1 shift ;; --) shift break ;; esacdoneif [ $# -gt 1 ]then usagefiQUILT_DIFF_OPTS="$QUILT_DIFF_OPTS $opt_format"patch=$(find_applied_patch "$1") || exit 1if [ -z "$opt_strip_level" ]then opt_strip_level=$(patch_strip_level $patch)ficase "$opt_strip_level" in0 | 1) num_strip_level=$opt_strip_level ;;ab) num_strip_level=1 ;;*) printf $"Cannot refresh patches with -p%s, please specify -p0 or -p1 instead\n" "$opt_strip_level\n" >&2 exit 1 ;;esactrap "die 1" SIGTERMtmp_patch=$(gen_tempfile)if [ -z "$opt_sort" ]then files=( $(files_in_patch_ordered $patch) )else files=( $(files_in_patch $patch | sort) )fifor file in "${files[@]}"do old_file=$(backup_file_name $patch $file) next_patch=$(next_patch_for_file $patch $file) if [ -z "$next_patch" ] then new_file=$file else new_file=$(backup_file_name $next_patch $file) files_were_shadowed=1 fi if ! diff_file $file $old_file $new_file >> $tmp_patch then printf $"Diff failed, aborting\n" >&2 die 1 fi if [ -n "$files_were_shadowed" -a -z "$opt_force" ] then printf $"More recent patches modify files in patch %s. Enforce refresh with -f.\n" "$(print_patch $patch)" >&2 die 1 fi if [ -n "$files_were_shadowed" -a -n "$opt_strip_whitespace" ] then printf $"Cannot use --strip-trailing-whitespace on a patch that has shadowed files.\n" >&2 fidoneif ! [ -s $tmp_patch ]then printf $"Nothing in patch %s\n" "$(print_patch $patch)" >&2 die 1fi# Check for trailing whitespaceif [ -z "$opt_strip_whitespace" ]then $QUILT_DIR/scripts/remove-trailing-ws -n -p$num_strip_level \ < $tmp_patchelse tmp_patch2=$(gen_tempfile) if $QUILT_DIR/scripts/remove-trailing-ws -p$num_strip_level \ < $tmp_patch > $tmp_patch2 then rm -f $tmp_patch tmp_patch=$tmp_patch2 fifi# FIXME: no stripping of non-topmost patch !!!patch_file=$(patch_file_name $patch)trap "" SIGINTif ! tmp_header=$(gen_tempfile)then die 1fimkdir -p $(dirname $patch_file)if ! cat_file $patch_file | patch_header > $tmp_headerthen die 1fitmp_result=$(gen_tempfile) || die 1if [ -n "$opt_diffstat" ]then diffstat="$(diffstat $QUILT_DIFFSTAT_OPTS \ -p$num_strip_level $tmp_patch)" || die 1 awk ' function print_diffstat(arr, i) { split(diffstat, arr, "\n") for (i=1; i in arr; i++) print prefix arr[i] } { prefix="" if (index($0, "#") == 1) prefix="#" } /^#? .* \| *[1-9][0-9]* / { eat = eat $0 "\n" next } /^#? .* files? changed(, .* insertions?\(\+\))?(, .* deletions?\(-\))?/ \ { print_diffstat() diffstat = "" ; eat = "" next } { print eat $0 eat = "" } END { printf "%s", eat if (diffstat != "") { print "---" print_diffstat() print prefix } } ' diffstat="$diffstat" \ $tmp_header > $tmp_resultelse cat $tmp_header > $tmp_resultficat $tmp_patch >> $tmp_resultif [ -e $patch_file ] && \ diff -q $patch_file $tmp_result > /dev/nullthen printf $"Patch %s is unchanged\n" "$(print_patch $patch)"elif ( [ -z "$QUILT_BACKUP" -o ! -e $patch_file ] || \ mv $patch_file $patch_file~ ) && \ cat_to_new_file $patch_file < $tmp_resultthen touch $QUILT_PC/$patch/.timestamp printf $"Refreshed patch %s\n" "$(print_patch $patch)"else die 1firm -f $QUILT_PC/$patch~refreshif ! change_db_strip_level -p$num_strip_level $patchthen die 1fidie 0### Local Variables:### mode: shell-script### End:# vim:filetype=sh
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -