WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [IA64] Include automated sparse merge script

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [IA64] Include automated sparse merge script
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 23 May 2006 12:44:43 +0000
Delivery-date: Tue, 23 May 2006 05:51:30 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID 99f880fea7e1c0a8de8205897d635c4a80776696
# Parent  303406dd9e3b8c6ca280969bdca898252ef6da25
[IA64] Include automated sparse merge script

This script automates merging the sparse tree to new upstream
kernel revisions.  When possible the files are automatically
patched to the new version, if that fails, the xen and upstream
patches are tried in reverse order, if that fails, the method
producing the smallest reject is left for manual merging.

Run as:

# LINUXPATH=$HOME/linux-2.6 sparse-merge

Where LINUXPATH is a local mercurial tree of the upstream kernel
(available from http://www.kernel.org/hg/linux-2.6).  NEWTAG and
OLDTAG may also be specified if the autodetection does not work.
By default, NEWTAG will be the latest upstream version.  If NEWTAG
or OLDTAG is an extra-version (ex. 2.6.16.13), ketchup will be
used to update the mercurial tree and add the appropriate tag.

Signed-off-by: Alex Williamson <alex.williamson@xxxxxx>
Signed-off-by: Aron Griffis <aron@xxxxxx>
---
 xen/arch/ia64/tools/sparse-merge |  137 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 137 insertions(+)

diff -r 303406dd9e3b -r 99f880fea7e1 xen/arch/ia64/tools/sparse-merge
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/xen/arch/ia64/tools/sparse-merge  Tue May 16 12:54:26 2006 -0600
@@ -0,0 +1,137 @@
+#!/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}')}
+
+SPARSEDIR=linux-2.6-xen-sparse
+
+if [ ! -d $SPARSEDIR ]; then
+       echo "Can't find $SPARSEDIR directory."
+       exit
+fi
+
+WD=$PWD
+# We want the linux upsream tree to be at the OLDTAG to get the OLDTAG-Xen 
diff.
+# Save current revision to restore when done
+cd $LINUXPATH
+OLDCSET=$(hg parents | awk '/^changeset:/{print($2)}' | cut -f 1 -d :)
+for t in $OLDTAG $NEWTAG; do
+    if ! hg tags | cut -f1 -d' ' | grep -Fx $t; then
+       echo "Tag $t not found, ketching up"
+       hg up -C ${t%.*} || exit 1
+       ketchup ${t#v} || exit 1
+       hg addremove
+       hg ci -m $t
+       hg tag -l $t
+    fi
+done
+hg up -C $OLDTAG || exit 1
+cd $WD
+for i in $(hg manifest | awk '{print($3)}' | grep $SPARSEDIR | grep ia64); 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)
+
+       ### FIXME ###
+       hg revert $FILENAME
+
+       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 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)"
+       fi
+done
+cd $LINUXPATH
+hg up $OLDCSET
+cd $WD

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [IA64] Include automated sparse merge script, Xen patchbot-unstable <=