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

📄 sparse-merge

📁 xen 3.2.2 源码
💻
字号:
#!/bin/bash# Generate a patch for each of the ia64 files in the linux-2.6-xen-sparse tree# Path to mercurial tree of upstream Linux# WARNING: This will do an 'hg up -C' on the upstream Linux tree, you#          will lose data if there's anything there you care about.: ${LINUXPATH:=/tmp/linux-2.6}# Tag of current base upstream image for Xen files: ${OLDTAG:=v$(awk '/^LINUX_VER/{print $NF}' buildconfigs/mk.linux-2.6-xen)}# Tag of new upstream base to go to: ${NEWTAG:=v$(wget -O- -o/dev/null http://kernel.org/kdist/finger_banner \    | awk '/latest stable/{print $NF}')}# Restrict merge to specific arch (set to . for all): ${ARCH:=ia64}SPARSEDIR=linux-2.6-xen-sparseWD=$PWDif [ ! -d $SPARSEDIR ]; then	echo "Can't find $SPARSEDIR directory."	exitfi# Check for modified files in the sparse tree before startingif hg st $SPARSEDIR | head | grep .; then    echo    echo "$SPARSEDIR contains modifications, please clean it up first"    exitfi# We want the linux upstream tree to be at the OLDTAG to get the OLDTAG-Xen diff.# Save current revision to restore when donecd $LINUXPATH || exit 1OLDCSET=$(hg parents | awk '/^changeset:/{print($2)}' | cut -f 1 -d :)for t in $OLDTAG $NEWTAG; do    [[ $t == *.* ]] || continue    if ! hg tags | cut -f1 -d' ' | grep -Fx $t; then	echo "Tag $t not found, ketching up"	if [[ $t == *-* ]]; then	    # rc/pre/git versions start at the previous stable release	    micro=${t%%-*}; micro=${micro##*.}	    stable=${t%%-*}; stable=${stable%.*}.$((micro-1))	    hg up -C $stable	else	    hg up -C ${t%.*} || exit 1	fi	ketchup ${t#v} || exit 1	hg addremove	hg ci -m $t	hg tag -l $t    fidonehg up -C $OLDTAG || exit 1cd $WDfor i in $(hg manifest | awk '{print($3)}' | grep $SPARSEDIR | grep "$ARCH"); do	cd $WD	FILENAME=$(basename $i)	DIRNAME=$(dirname $i)	DIFFPATH=$(echo $i | sed -e "s,^$SPARSEDIR,$LINUXPATH,")	if [ ! -d $DIRNAME ]; then		echo "Hmm, something bad happened parsing directory name: $i"		continue	fi	if [ ! -e $DIFFPATH ]; then		continue	fi	echo -n "$i ... "	cd $DIRNAME	XENDIR=$(pwd)	ORIGPATH=$(echo $i | sed -e "s/^$SPARSEDIR/./")	APATH=$(echo $i | sed -e "s/^$SPARSEDIR/a/")	BPATH=$(echo $i | sed -e "s/^$SPARSEDIR/b/")	cd $LINUXPATH	hg diff -r $OLDTAG -r $NEWTAG $ORIGPATH | \	    sed -e "s,^--- $APATH,--- $FILENAME," \	        -e "s,^+++ $BPATH,+++ $FILENAME," \	    > $XENDIR/$FILENAME-$OLDTAG-$NEWTAG.diff	cd $XENDIR	# Do we have a diff file?  Did anything change?	if [ ! -s $FILENAME-$OLDTAG-$NEWTAG.diff ]; then		echo "SUCCESS (Upstream unchanged)"		continue	fi	if ! patch -f -i $FILENAME-$OLDTAG-$NEWTAG.diff > /dev/null 2>&1; then		# It failed, how badly?		if [ ! -e ${FILENAME}.rej ]; then			echo "ERROR, Hmm, no .rej file, but diff failed, fix manually"			continue		fi		TONEWREJ=$(wc -l ${FILENAME}.rej | \		           awk '{print($1)}')		hg st $FILENAME | grep -q . && hg revert $FILENAME		rm -f ${FILENAME}.rej ${FILENAME}.orig		diff -uN $DIFFPATH $FILENAME | \		    sed -e "s,^--- $DIFFPATH,--- $FILENAME," \		    > $FILENAME-$OLDTAG-Xen.diff		if [ ! -e $FILENAME-$OLDTAG-Xen.diff ]; then			echo "ERROR, failed to create patch file"			continue		fi		if ! patch -R -i $FILENAME-$OLDTAG-Xen.diff > /dev/null 2>&1; then			echo "ERROR, reverting Xen changes failed"			hg revert $FILENAME			continue		fi		if ! patch -f -i $FILENAME-$OLDTAG-$NEWTAG.diff > /dev/null 2>&1; then			echo "ERROR, new upstream patch failed on reverted file"			hg revert $FILENAME			continue		fi		if ! patch -f -i $FILENAME-$OLDTAG-Xen.diff > /dev/null 2>&1; then			if [ ! -e ${FILENAME}.rej ]; then				echo "ERROR, Hmm, no .rej file, but diff failed, fix manually"				continue			fi			TOXENREJ=$(wc -l ${FILENAME}.rej | \			           awk '{print($1)}')			if  [ $TOXENREJ -gt $TONEWREJ ]; then				hg revert $FILENAME				rm -f ${FILENAME}.rej ${FILENAME}.orig				patch -f -i $FILENAME-$OLDTAG-$NEWTAG.diff > /dev/null 2>&1				echo "MANUAL MERGE REQUIRED (Upstream reject)"			else				echo "MANUAL MERGE REQUIRED (Xen reject)"			fi		else			rm -f ${FILENAME}.rej ${FILENAME}.orig			echo "SUCCESS (Re-applied Xen patch)"		fi	else			rm -f ${FILENAME}.rej ${FILENAME}.orig			echo "SUCCESS (Upstream applied)"	fidonefind $SPARSEDIR -name \*.diff -empty | xargs -r rm -fcd $LINUXPATHhg up -C $OLDCSET

⌨️ 快捷键说明

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