⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 push.in

📁 linux下各种patch的管理工具
💻 IN
字号:
#! @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/patchfnsfisetup_colorsusage(){	printf $"Usage: quilt push [-afqv] [--leave-rejects] [--interactive] [--color[=always|auto|never]] [num|patch]\n"	if [ x$1 = x-h ]	then		printf $"Apply patch(es) from the series file.  Without options, the next patchin the series file is applied.  When a number is specified, apply thespecified number of patches.  When a patch name is specified, applyall patches up to and including the specified patch.  Patch names mayinclude the patches/ prefix, which means that filename completion canbe used.-a	Apply all patches in the series file.-f	Force apply, even if the patch has rejects.-q	Quiet operation.-v	Verbose operation.--leave-rejects	Leave around the reject files patch produced, even if the patch	is not actually applied.--interactive	Allow the patch utility to ask how to deal with conflicts. If	this option is not given, the -f option will be passed to the	patch program.--color[=always|auto|never]	Use syntax coloring."		exit 0	else		exit 1	fi}interrupt(){	rollback_patch $1	printf $"Interrupted by user; patch %s was not applied.\n" \	       "$(print_patch $patch)" >&2	exit 1}colorize(){	if [ -n "$opt_color" ]; then		awk '		{ if (/FAILED|hunks? ignored|can'\''t find file|file .* already exists/)		    print "'$color_patch_fail'" $0 "'$color_clear'"		  else if (/is already applied$/)		    print "'$color_patch_applied'" $0 "'$color_clear'"		  else if (/^Hunk/) {		    sub(/^Hunk .* with fuzz [0-9]*/,			"'$color_patch_fuzz'&'$color_clear'")		    sub(/offset -?[0-9]* lines?/,			"'$color_patch_offs'&'$color_clear'")		    print		  } else		    print		}'	else		cat	fi}push_patch_args(){	local patch=$1	if [ -z "$opt_reverse" ]	then		patch_args "$patch"	else		set -- $(patch_args "$patch")		if [ "${*#-R}" != "$*" ]		then			echo "${*#-R}"		else			echo "$*" -R		fi	fi}apply_patch(){	local patch=$1 patch_file=$2	local output	[ -s $patch_file ] || return 0	if [ "${patch_file:(-3)}" = ".gz" ]	then		gzip -cd $patch_file \		| patch $QUILT_PATCH_OPTS $(push_patch_args $patch) \			--backup --prefix="$QUILT_PC/$patch/" \			$no_reject_files \			-E $silent $force_apply 2>&1	elif [ "${patch_file:(-4)}" = ".bz2" ]	then		bzip2 -cd $patch_file \		| patch $QUILT_PATCH_OPTS $(push_patch_args $patch) \			--backup --prefix="$QUILT_PC/$patch/" \			$no_reject_files \			-E $silent $force_apply 2>&1	else		patch $QUILT_PATCH_OPTS $(push_patch_args $patch) \		      --backup --prefix="$QUILT_PC/$patch/" \		      $no_reject_files \		      -E $silent $force_apply -i $patch_file 2>&1	fi}rollback_patch(){	local patch=$1	$QUILT_LIB/backup-files $silent_unless_verbose -r -B $QUILT_PC/$patch/ -}cleanup_patch_output() {	if [ -z "$opt_leave_rejects" ]	then		if [ -n "$opt_quiet" ]; then			# In this case, patch does not allow us to find out			# which file contains the rejects; it only tells us			# which reject file is used. We use a single temporary			# reject file, so this does not help us.			awk '			{ gsub(/ -- saving rejects to (file )?.*/, "") }			{ print }			'		else			awk '			/^patching file / { filename = substr($0, 15) }			{ gsub(/ -- saving rejects to (file )?.*/,			       " -- rejects in file " filename) }			{ print }			'		fi	else		cat	fi}add_patch(){	local patch=$1	local patch_file=$(patch_file_name $patch)	local file status tmp	printf $"Applying patch %s\n" "$(print_patch $patch)"	trap "interrupt $patch" SIGINT	no_reject_files=	if [ -z "$opt_leave_rejects" ]; then		tmp="$(gen_tempfile)"		no_reject_files="-r $tmp"	fi	apply_patch $patch "$patch_file"	status=$?	trap "" SIGINT	[ -n "$tmp" ] && rm -f $tmp	if [ $status -eq 0 -o -n "$opt_force" ]	then		add_to_db $patch		if [ $status -eq 0 ]		then			rm -f $QUILT_PC/$patch~refresh		else			touch $QUILT_PC/$patch~refresh		fi		if [ -e "$QUILT_PC/$patch" ]		then			touch $QUILT_PC/$patch/.timestamp		else			mkdir "$QUILT_PC/$patch"		fi		if ! [ -e $patch_file ]		then			printf $"Patch %s does not exist; applied empty patch\n" \			       "$(print_patch $patch)"		elif [ -z "$(shopt -s nullglob ; echo "$QUILT_PC/$patch/"*)" ]		then			printf $"Patch %s appears to be empty; applied\n" \			       "$(print_patch $patch)"		elif [ $status -ne 0 ]		then			printf $"Applied patch %s (forced; needs refresh)\n" \			       "$(print_patch $patch)"		fi	else		rollback_patch $patch		tmp="$(gen_tempfile)"		no_reject_files="-r $tmp"		opt_reverse=1		if apply_patch $patch "$patch_file" > /dev/null 2> /dev/null		then			printf $"Patch %s can be reverse-applied\n" \			       "$(print_patch "$patch")"		else			printf $"Patch %s does not apply (enforce with -f)\n" \			       "$(print_patch $patch)"		fi		rollback_patch $patch		rm -f $tmp		status=1	fi	trap - SIGINT	return $status}list_patches(){	local top=$(top_patch) n=0 patch	if [ -n "$top" ]	then		patches_after $top	else		cat_series	fi \	| if [ -n "$opt_all" ]	then		cat	else		while read patch		do			if [ -n "$number" ]			then				if [ $n -eq $number ]				then					break				fi				n=$[$n+1]			fi			echo "$patch"			if [ -z "$number" -a "$patch" = "$stop_at_patch" ]			then				break			fi		done	fi}options=`getopt -o fqvah --long leave-rejects,interactive,color:: -- "$@"`if [ $? -ne 0 ]then        usagefieval set -- "$options"while truedo        case "$1" in        -f)                opt_force=1		shift ;;        -q)                opt_quiet=1		shift ;;	-v)		opt_verbose=1		shift ;;	-a)		opt_all=1		shift ;;	-h)		usage -h ;;	--leave-rejects)		opt_leave_rejects=1		shift ;;	--interactive)		opt_interactive=1		shift ;;	--color)		case "$2" in		"" | always)			opt_color=1 ;;		auto | tty)			opt_color=			[ -t 1 ] && opt_color=1 ;;		never)			opt_color= ;;		*)			usage ;;		esac		shift 2 ;;        --)                shift		break ;;        esacdoneif [ $# -gt 1 -o \( -n "$opt_all" -a $# -ne 0 \) ]then        usagefiif [ $# -eq 1 ]then	if is_numeric $1	then		number=$1	else		stop_at_patch="$1"	fielse	[ -z "$opt_all" ] && number=1fistop_at_patch=$(find_unapplied_patch "$stop_at_patch") || exit 1[ -n "$opt_quiet" ] && silent=-s[ -z "$opt_verbose" ] && silent_unless_verbose=-s[ -z "$opt_interactive" ] && force_apply=-f[ -n "$opt_force" ] && opt_leave_rejects=1top=$(top_patch)if [ -n "$top" -a -e $QUILT_PC/$top~refresh ]then	printf $"The topmost patch %s needs to be refreshed first.\n" \	       "$(print_patch $top)"	exit 1fipatches=$(list_patches)create_dbfor patch in $patchesdo	if ! add_patch $patch	then		exit 1	fi	[ -n "$opt_quiet" ] || echodone \| cleanup_patch_output \| colorizeif [ ${PIPESTATUS[0]} -eq 0 ]; then	set -- $patches	printf $"Now at patch %s\n" "$(print_patch ${!#})"else	exit 1fi### Local Variables:### mode: shell-script### End:# vim:filetype=sh

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -