From ce43867f2ddd14e83475c4700ba0c2c9ac670d6c Mon Sep 17 00:00:00 2001 From: jgish Date: Tue, 26 Mar 2013 13:41:36 -0400 Subject: 8009824: webrev.ksh generated jdk.patch files do not handle renames, copies, and shouldn't be applied Summary: use hg export --git to produce proper patch file Reviewed-by: mduigou --- make/scripts/webrev.ksh | 115 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 79 insertions(+), 36 deletions(-) (limited to 'make') diff --git a/make/scripts/webrev.ksh b/make/scripts/webrev.ksh index cfb14f3..c95bce7 100644 --- a/make/scripts/webrev.ksh +++ b/make/scripts/webrev.ksh @@ -1436,14 +1436,15 @@ function flist_from_mercurial_forest { rm -f $FLIST if [ -z "$Nflag" ]; then - print " File list from hg foutgoing $PWS ..." + print " File list from hg foutgoing $PWS ..." outgoing_from_mercurial_forest HG_LIST_FROM_COMMIT=1 fi if [ ! -f $FLIST ]; then # hg commit hasn't been run see what is lying around - print "\n No outgoing, perhaps you haven't commited." - print " File list from hg fstatus -mard ...\c" + print "\n No outgoing, perhaps you haven't commited." + NO_OUTGOING= + print " File list from hg fstatus -mard ...\c" FSTAT_OPT= fstatus HG_LIST_FROM_COMMIT=0 @@ -1466,7 +1467,7 @@ function treestatus done >> $FLIST # Then all the added files - # But some of these could have been "moved" or renamed ones + # But some of these could have been "moved" or renamed ones or copied ones # so let's make sure we get the proper info # hg status -aC will produce something like: # A subdir/File3 @@ -1474,8 +1475,11 @@ function treestatus # File4 # A subdir/File5 # The first and last are simple addition while the middle one - # is a move/rename - + # is a move/rename or a copy. We can't distinguish from a rename vs a copy + # without also getting the status of removed files. The middle case above + # is a rename if File4 is also shown a being removed. If File4 is not a + # removed file, then the middle case is a copy from File4 to subdir/File4 + # FIXME - we're not distinguishing copy from rename $HGCMD -aC | $FILTER | while read LINE; do ldone="" while [ -z "$ldone" ]; do @@ -1625,6 +1629,7 @@ function flist_from_mercurial else # hg commit hasn't been run see what is lying around print "\n No outgoing, perhaps you haven't commited." + NO_OUTGOING= fi # First let's list all the modified or deleted files @@ -1638,8 +1643,12 @@ function flist_from_mercurial # A subdir/File4 # File4 # A subdir/File5 - # The first and last are simple addition while the middle one - # is a move/rename + # The first and last are simple addition while the middle one + # is a move/rename or a copy. We can't distinguish from a rename vs a copy + # without also getting the status of removed files. The middle case above + # is a rename if File4 is also shown a being removed. If File4 is not a + # removed file, then the middle case is a copy from File4 to subdir/File4 + # FIXME - we're not distinguishing copy from rename hg status $STATUS_REV -aC | $FILTER >$FLIST.temp while read LINE; do @@ -1905,7 +1914,7 @@ function build_old_new_mercurial fi fi else - # It's a rename (or a move), so let's make sure we move + # It's a rename (or a move), or a copy, so let's make sure we move # to the right directory first, then restore it once done current_dir=`pwd` cd $CWS/$PDIR @@ -2774,34 +2783,38 @@ do cleanse_rmfile="sed 's/^\(@@ [0-9+,-]*\) [0-9+,-]* @@$/\1 +0,0 @@/'" cleanse_newfile="sed 's/^@@ [0-9+,-]* \([0-9+,-]* @@\)$/@@ -0,0 \1/'" - rm -f $WDIR/$DIR/$F.patch - if [[ -z $rename ]]; then - if [ ! -f $ofile ]; then - diff -u /dev/null $nfile | sh -c "$cleanse_newfile" \ - > $WDIR/$DIR/$F.patch - elif [ ! -f $nfile ]; then - diff -u $ofile /dev/null | sh -c "$cleanse_rmfile" \ - > $WDIR/$DIR/$F.patch - else - diff -u $ofile $nfile > $WDIR/$DIR/$F.patch - fi - else - diff -u $ofile /dev/null | sh -c "$cleanse_rmfile" \ - > $WDIR/$DIR/$F.patch - - diff -u /dev/null $nfile | sh -c "$cleanse_newfile" \ - >> $WDIR/$DIR/$F.patch - - fi + if [[ -v NO_OUTGOING ]]; + then + # Only need to generate a patch file here if there are no commits in outgoing + rm -f $WDIR/$DIR/$F.patch + if [[ -z $rename ]]; then + if [ ! -f $ofile ]; then + diff -u /dev/null $nfile | sh -c "$cleanse_newfile" \ + > $WDIR/$DIR/$F.patch + elif [ ! -f $nfile ]; then + diff -u $ofile /dev/null | sh -c "$cleanse_rmfile" \ + > $WDIR/$DIR/$F.patch + else + diff -u $ofile $nfile > $WDIR/$DIR/$F.patch + fi + else + diff -u $ofile /dev/null | sh -c "$cleanse_rmfile" \ + > $WDIR/$DIR/$F.patch + + diff -u /dev/null $nfile | sh -c "$cleanse_newfile" \ + >> $WDIR/$DIR/$F.patch + + fi - # - # Tack the patch we just made onto the accumulated patch for the - # whole wad. - # - cat $WDIR/$DIR/$F.patch >> $WDIR/$WNAME.patch + # + # Tack the patch we just made onto the accumulated patch for the + # whole wad. + # + cat $WDIR/$DIR/$F.patch >> $WDIR/$WNAME.patch + fi - print " patch\c" + print " patch\c" if [[ -f $ofile && -f $nfile && -z $mv_but_nodiff ]]; then @@ -2894,6 +2907,32 @@ do print done < $FLIST +# Create the new style mercurial patch here using hg export -r [all-revs] -g -o $CHANGESETPATH +if [[ $SCM_MODE == "mercurial" ]]; then + if [[ !(-v NO_OUTGOING) ]]; then + EXPORTCHANGESET="$WNAME.changeset" + CHANGESETPATH=${WDIR}/${EXPORTCHANGESET} + rm -f $CHANGESETPATH + touch $CHANGESETPATH + if [[ -n $ALL_CREV ]]; then + rev_opt= + for rev in $ALL_CREV; do + rev_opt="$rev_opt --rev $rev" + done + elif [[ -n $FIRST_CREV ]]; then + rev_opt="--rev $FIRST_CREV" + fi + + if [[ -n $rev_opt ]]; then + (cd $CWS;hg export -g $rev_opt -o $CHANGESETPATH) + # echo "Created new-patch: $CHANGESETPATH" 1>&2 + # Use it in place of the jdk.patch created above + rm -f $WDIR/$WNAME.patch + fi + set +x + fi +fi + frame_nav_js > $WDIR/ancnav.js frame_navigation > $WDIR/ancnav.html @@ -2989,9 +3028,13 @@ printCI $TOTL $TINS $TDEL $TMOD $TUNC print "" if [[ -f $WDIR/$WNAME.patch ]]; then - print "Patch of changes:" - print "$WNAME.patch" + print "Patch of changes:" + print "$WNAME.patch" +elif [[ -f $CHANGESETPATH ]]; then + print "Changeset:" + print "$EXPORTCHANGESET" fi + if [[ -f $WDIR/$WNAME.pdf ]]; then print "Printable review:" print "$WNAME.pdf" -- cgit v1.2.3