From 8b539d0e01d319d8578474aa01f63a05dec11ce4 Mon Sep 17 00:00:00 2001 From: Neil Brown Date: Mon, 22 May 2006 09:18:15 +1000 Subject: [PATCH] Various enhancements to 'p' --- p | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 62 insertions(+), 4 deletions(-) diff --git a/p b/p index 48ee550..b6b544f 100755 --- a/p +++ b/p @@ -146,7 +146,7 @@ all_files() diff_one() { - if cmp -s "$1~current~" "$1" + if cmp -s "$1~current~" "$1" || [ ! -f "$1" -a ! -f "$1~current~" ] then : else echo @@ -168,10 +168,12 @@ diff_one_orig() commit_one() { - rm -f "$1~current~" + rm -f "$1~current~" + if [ -f "$1" ] ; then mv "$1" "$1~current~" cp -p "$1~current~" $1 chmod u+w $1 + fi } discard_one() @@ -623,6 +625,33 @@ case $cmd in while [ -s "$pfile" ] && p apply last && p commit ; do : ; done ;; + decommit ) + make_diff + get_meta + if [ -s .patches/patch ] + then + echo >&2 Patch $name already open - please commit ; exit 1; + fi + if [ $# -eq 0 ] + then + echo "Applied patches are:" + ls .patches/applied + exit 0 + fi + if [ $# -ne 1 ] + then echo >&2 "Usage: p decommit patchname"; exit 1 + fi + case $1 in + last ) pfile=`ls -d .patches/applied/[0-9]* | tail -1` ; echo last is "$pfile";; + */* ) pfile=$1 ;; + * ) pfile=`echo .patches/applied/*$1*` + esac + if [ ! -f "$pfile" ] + then echo >&2 "Cannot find unique patch '$1' - found: $pfile"; exit 1 + fi + while [ -s "$pfile" ] && + p open last && p discard ; do : ; done + ;; snapshot ) all_files snap_one ;; @@ -653,6 +682,12 @@ case $cmd in cd .patches/SOURCE && bk pull ;; update ) + make_diff + get_meta + if [ -s .patches/patch ] + then + echo >&2 Patch $name already open - please commit; exit 1; + fi p openall && p clean && (cd .patches/SOURCE ; bk export -tpatch -rLATEST, ) > .patches/imported-patch && patch --dry-run -f -p1 < .patches/imported-patch && @@ -678,9 +713,32 @@ case $cmd in echo "Your address and other headers must be in .patches/owner" exit 1; fi + messid="<`date +'%Y%m%d%H%M%S'`.$$.patches@`uname -n`>" cnt=$(ls .patches/applied/???${1}* | wc -l) cnt=$(echo $cnt) # discard spaces this=1 + { + cat .patches/owner + echo "To: `cat .patches/maintainer`" + if [ -s .patches/cc ] ; then + while read word prefix addr + do if [ " $word" = " $1" ] ; then + echo "Cc: $addr" + sprefix="$prefix - " + fi + done < .patches/cc + fi + if [ $cnt = 1 ] + then + echo "Subject: [PATCH] $sprefix Intro" + else + echo "Subject: [PATCH] ${sprefix}0 of $cnt - Introduction" + fi + echo "Message-ID: $messid" + echo + echo PUT COMMENTS HERE + } > .patches/mail/000Intro + for patch in .patches/applied/???${1}* do { @@ -702,9 +760,9 @@ case $cmd in else echo "Subject: [PATCH] $sprefix$this of $cnt - $head" fi + echo "References: $messid" echo - echo '### Comments for ChangeSet' - sed -e '1,/^[^S]/d' $patch + sed -e '1,3d' $patch } > .patches/mail/${patch#.patches/applied/} this=$(expr $this + 1) done -- 2.39.5