Btw you can add:
Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx>
To this
> On May 15, 2015, at 1:01 PM, Eric Sandeen <sandeen@xxxxxxxxxx> wrote:
>
> I'm terrible at bash, so don't laugh. But this more or less works for me ...
>
> This script takes either a patch name or a commit ID in the current
> tree, and massages that change into a libxfs patch for the other tree;
> i.e. it applies a kernel libxfs patch to xfsprogs, or vice versa.
> It'll create a guilt patch if it looks like a guilt dir, or just smack
> it in with "patch" if not.
>
> It can surely be improved, but it's a start.
>
> Example below, and script at the end. Requires filterdiff.
>
> [root@bp-05 xfsprogs]# git log
> commit 9681b791929795cd7dc6c7a79c3a69354f34e0b0
> ...
> [root@bp-05 xfsprogs]# libxfs-apply /mnt/test2/git/linux-xfs/
> 9681b791929795cd7dc6c7a79c3a69354f34e0b0
> Filtered patch for /mnt/test2/git/linux-xfs/ contains:
> a/fs/xfs/libxfs/xfs_alloc.c
> a/fs/xfs/libxfs/xfs_alloc_btree.c
> a/fs/xfs/libxfs/xfs_attr_leaf.c
> a/fs/xfs/libxfs/xfs_attr_remote.c
> a/fs/xfs/libxfs/xfs_bmap_btree.c
> a/fs/xfs/libxfs/xfs_btree.c
> a/fs/xfs/libxfs/xfs_da_btree.c
> a/fs/xfs/libxfs/xfs_dir2_block.c
> a/fs/xfs/libxfs/xfs_dir2_data.c
> a/fs/xfs/libxfs/xfs_dir2_leaf.c
> a/fs/xfs/libxfs/xfs_dir2_node.c
> a/fs/xfs/libxfs/xfs_dquot_buf.c
> a/fs/xfs/libxfs/xfs_format.h
> a/fs/xfs/libxfs/xfs_ialloc.c
> a/fs/xfs/libxfs/xfs_ialloc_btree.c
> a/fs/xfs/libxfs/xfs_inode_buf.c
> a/fs/xfs/libxfs/xfs_sb.c
> a/fs/xfs/libxfs/xfs_symlink_remote.c
> /mnt/test2/git/linux-xfs/ looks like a guilt directory.
> Top patch is: percpu-2
> Create new Guilt patch? (Enter patch name or return to skip) new-uuid
> Applying patch..new-uuid
> Patch applied.
> Patch was applied in /mnt/test2/git/linux-xfs/; check for rejects, guilt push
> -f, etc
> [root@bp-05 xfsprogs]#
>
> ==========
>
> #!/bin/bash
>
> # 2 args:
> # libxfs-apply <repo> <commit ID or patchfile>
>
> usage()
> {
> echo "libxfs-apply repodir [patchfile|commitid]"
> exit
> }
>
> cleanup()
> {
> rm -f $PATCH $LIBXFS_FILES $NEWPATCH
> }
>
> fail()
> {
> cleanup
> cd $ORIG_DIR
> exit
> }
>
> if [ "$#" -eq 2 -a -d "$1" -a -f "$2" ]; then
> REPO=$1
> PATCH=$2
> elif [ "$#" -eq 2 -a -d "$1" ]; then
> REPO=$1
> PATCH=`mktemp`
> git show $2 > $PATCH || usage
> else
> usage
> fi
>
>
> ORIG_DIR=`pwd`
> LIBXFS_FILES=`mktemp`
> NEWPATCH=`mktemp`
>
> cd $REPO
>
> # Are we using guilt? This works even if no patch is applied.
> guilt top &> /dev/null
> if [ $? -eq 0 ]; then
> GUILT=1
> else
> GUILT=0
> fi
>
> # Filter the patch into the right format & files for the other tree
>
> if [ -d "fs/xfs/libxfs" ]; then # We are applying a progs patch to the
> kernel tree
> lsdiff $PATCH | grep -q "a/libxfs/"
> if [ $? -ne 0 ]; then
> echo "Doesn't look like an xfsprogs patch with libxfs changes"
> fail
> fi
>
> # The files we will try to apply to
> ls -1 fs/xfs/libxfs/*.[ch] | sed -e "s%.*/\(.*\)%*\1%" > $LIBXFS_FILES
>
> # Create the new patch
> filterdiff \
> -I $LIBXFS_FILES \
> --strip=1 \
> --addoldprefix=a/fs/xfs/ \
> --addnewprefix=b/fs/xfs/ \
> $PATCH > $NEWPATCH
>
> elif [ -d "libxfs" -a -d "libxlog" ]; then # We are applying a kernel
> patch to the xfsprogs tree
> lsdiff $PATCH | grep -q "a/fs/xfs/libxfs/"
> if [ $? -ne 0 ]; then
> echo "Doesn't look like a kernel patch with libxfs changes"
> fail
> fi
>
> # The files we will try to apply to
> ls -1 libxfs/*.[ch] | sed -e "s%.*/\(.*\)%*\1%" > $LIBXFS_FILES
>
> # Create the new patch
> filterdiff \
> -I $LIBXFS_FILES \
> --strip=3 \
> --addoldprefix=a/ \
> --addnewprefix=b/ \
> $PATCH > $NEWPATCH
> else
> echo "Sorry, I don't recognize repo $REPO"
> fail
> fi
>
> echo "Filtered patch for $REPO contains:"
> lsdiff $NEWPATCH
>
>
> # Ok, now apply with guilt or patch; either may fail and require a force
> # and/or a manual reject fixup
> if [ $GUILT -eq 1 ]; then
> echo "$REPO looks like a guilt directory."
> PATCHES=`guilt applied | wc -l`
> if [ $PATCHES -gt 0 ]; then
> echo -n "Top patch is: "
> guilt top
> fi
> read -r -p "Create new Guilt patch? (Enter patch name or return to skip) "
> response
> [ -z "$response" ] && guilt refresh; guilt import -P $response $NEWPATCH;
> guilt push
> else
> echo "Applying with patch utility:"
> patch -p1 < $NEWPATCH
> fi
>
> echo "Patch was applied in $REPO; check for rejects, guilt push -f, etc"
>
> cleanup
>
> _______________________________________________
> xfs mailing list
> xfs@xxxxxxxxxxx
> http://oss.sgi.com/mailman/listinfo/xfs
>
|