1#!/bin/sh 2 3# Import bmake 4 5ECHO= 6GIT=${GIT:-git} 7PAGER=${PAGER:-${LESS:-${MORE:-more}}} 8 9# For consistency... 10Error() { 11 echo ERROR: ${1+"$@"} >&2 12 exit 1 13} 14 15Cd() { 16 [ $# -eq 1 ] || Error "Cd() takes a single parameter." 17 cd $1 || Error "cannot \"cd $1\" from $PWD" 18} 19 20# Call this function and then follow it by any specific import script additions 21option_parsing() { 22 local _shift=$# 23 # Parse command line options 24 while : 25 do 26 case "$1" in 27 *=*) eval "$1"; shift;; 28 --) shift; break;; 29 -a) TARBALL=$2; shift 2;; 30 -d) RM=echo; shift;; 31 -n) ECHO=echo; shift;; 32 -P) PR=$2; shift 2;; 33 -r) REVIEWER=$2; shift 2;; 34 -u) url=$2; shift 2;; 35 -h) echo "Usage:"; 36 echo " "$0 '[-ahnPr] [TARBALL=] [PR=] [REVIEWER=]' 37 echo " "$0 '-a <filename> # (a)rchive' 38 echo " "$0 '-h # print usage' 39 echo " "$0 '-n # do not import, check only.' 40 echo " "$0 '-P <PR Number> # Use PR' 41 echo " "$0 '-r <reviewer(s) list> # (r)eviewed by' 42 echo " "$0 'PR=<PR Number>' 43 echo " "$0 'REVIEWER=<reviewer(s) list>' 44 exit 1;; 45 *) break;; 46 esac 47 done 48 return $(($_shift - $#)) 49} 50 51### 52 53option_parsing "$@" 54shift $? 55 56TF=/tmp/.$USER.$$ 57Cd `dirname $0` 58test -s ${TARBALL:-/dev/null} || Error need TARBALL 59here=`pwd` 60SB=${SB:-`dirname $here`} 61# thing should match what the TARBALL contains 62thing=`basename $here` 63 64case "$thing" in 65bmake) (cd .. && tar zxf $TARBALL);; 66*) Error "we should be in bmake";; 67esac 68 69VERSION=`grep '^_MAKE_VERSION' VERSION | sed 's,.*=[[:space:]]*,,'` 70 71rm -f *~ 72mkdir -p $SB/tmp 73 74# new files are handled automatically 75# but we need to rm if needed 76# FILES are kept sorted so we can determine what was added and deleted 77# but we need to take care dealing with re-ordering 78(${GIT} diff FILES | sed -n '/^[+-][^+-]/p'; \ 79 ${GIT} diff mk/FILES | sed -n '/^[+-][^+-]/s,.,&mk/,p' ) > $TF.diffs 80grep '^+' $TF.diffs | sed 's,^.,,' | sort > $TF.adds 81grep '^-' $TF.diffs | sed 's,^.,,' | sort > $TF.rms 82comm -13 $TF.adds $TF.rms > $TF.rm 83 84post=$SB/tmp/bmake-post.sh 85 86# this is similar to what generates the mail to bmake-announce 87gen_import_F() { 88 echo Import bmake-$VERSION 89 echo 90 91 if [ -s $post ]; then 92 last=`sed -n '/ tag/s,.*/,bmake-,p' $post` 93 else 94 last="last import" 95 fi 96 echo Intersting/relevant changes since $last; echo 97 for C in ChangeLog */ChangeLog 98 do 99 $GIT diff --staged $C | 100 sed -n '/^@@/d;/^\+\+\+/d;/^\+/s,^.,,p' > $TF.C 101 test -s $TF.C || continue 102 echo 103 echo $C since $last 104 echo 105 cat $TF.C 106 done 107} 108 109if [ -z "$ECHO" ]; then 110 test -s $TF.rm && xargs rm -f < $TF.rm 111 $GIT add -A 112 gen_import_F > $SB/tmp/bmake-import.F 113 $GIT diff --staged > $SB/tmp/bmake-import.diff 114 $PAGER $SB/tmp/bmake-import.F $SB/tmp/bmake-import.diff 115 { echo "$GIT tag -a -m \"Tag bmake/$VERSION\" vendor/NetBSD/bmake/$VERSION" 116 echo "echo \"When ready do: $GIT push --follow-tags\"" 117 } > $post 118 echo "Edit $SB/tmp/bmake-import.F as needed, then:" 119 echo "$GIT commit -F $SB/tmp/bmake-import.F" 120 echo "After you commit, run $post" 121else 122 comm -23 $TF.adds $TF.rms > $TF.add 123 test -s $TF.rm && { echo Removing:; cat $TF.rm; } 124 test -s $TF.add && { echo Adding:; cat $TF.add; } 125 $GIT diff 126fi 127${RM:-rm} -f $TF.* 128