|  | #!/bin/bash -f | 
|  |  | 
|  | # | 
|  | # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. | 
|  | # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 
|  | # | 
|  | # This code is free software; you can redistribute it and/or modify it | 
|  | # under the terms of the GNU General Public License version 2 only, as | 
|  | # published by the Free Software Foundation. | 
|  | # | 
|  | # This code is distributed in the hope that it will be useful, but WITHOUT | 
|  | # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 
|  | # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License | 
|  | # version 2 for more details (a copy is included in the LICENSE file that | 
|  | # accompanied this code). | 
|  | # | 
|  | # You should have received a copy of the GNU General Public License version | 
|  | # 2 along with this work; if not, write to the Free Software Foundation, | 
|  | # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | 
|  | # | 
|  | # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | 
|  | # or visit www.oracle.com if you need additional information or have any | 
|  | # questions. | 
|  | # | 
|  |  | 
|  | # Script to update the Copyright YEAR range in Mercurial sources. | 
|  | #  (Originally from xdono, Thanks!) | 
|  |  | 
|  | if [ "`uname -s`" = "SunOS" ] ; then | 
|  | awk=nawk | 
|  | else | 
|  | awk=awk | 
|  | fi | 
|  |  | 
|  | # Stop on any error | 
|  | set -e | 
|  |  | 
|  | # Temp area | 
|  | tmp=/tmp/`basename $0`.${USER}.$$ | 
|  | rm -f -r ${tmp} | 
|  | mkdir -p ${tmp} | 
|  | total=0 | 
|  |  | 
|  | # This year or supplied year | 
|  | if [ "$1" != "" ] ; then | 
|  | year="$1" | 
|  | else | 
|  | year=`date +%Y` | 
|  | fi | 
|  |  | 
|  | # Return true if it makes sense to edit this file | 
|  | saneFileToCheck() | 
|  | { | 
|  | if [ "$1" != "" -a -f $1 ] ; then | 
|  | isText=`file "$1" | egrep -i '(text|source)' | cat` | 
|  | hasCopyright=`grep 'Copyright' "$1" | cat` | 
|  | lastLineCount=`tail -1 "$1" | wc -l` | 
|  | if [ "${isText}" != ""  \ | 
|  | -a "${hasCopyright}" != "" \ | 
|  | -a ${lastLineCount} -eq 1 ] ; then | 
|  | echo "true" | 
|  | else | 
|  | echo "false" | 
|  | fi | 
|  | else | 
|  | echo "false" | 
|  | fi | 
|  | } | 
|  |  | 
|  | # Update the copyright year on a file | 
|  | updateFile() # file | 
|  | { | 
|  | changed="false" | 
|  | if [ `saneFileToCheck "$1"` = "true" ] ; then | 
|  | copyright="Copyright (c)" | 
|  | company="Oracle" | 
|  | rm -f $1.OLD | 
|  | mv $1 $1.OLD | 
|  | cat $1.OLD | \ | 
|  | sed -e "s@\(${copyright} [12][0-9][0-9][0-9],\) [12][0-9][0-9][0-9], ${company}@\1 ${year}, ${company}@" | \ | 
|  | sed -e "s@\(${copyright} [12][0-9][0-9][0-9],\) ${company}@\1 ${year}, ${company}@" | \ | 
|  | sed -e "s@${copyright} ${year}, ${year}, ${company}@${copyright} ${year}, ${company}@"  \ | 
|  | > $1 | 
|  | if ! diff -b -w $1.OLD $1 > /dev/null ; then \ | 
|  | changed="true" | 
|  | rm -f $1.OLD | 
|  | else | 
|  | rm -f $1 | 
|  | mv $1.OLD $1 | 
|  | fi | 
|  | fi | 
|  | echo "${changed}" | 
|  | } | 
|  |  | 
|  | # Update the copyright year on all files changed by this changeset | 
|  | updateChangesetFiles() # changeset | 
|  | { | 
|  | count=0 | 
|  | files=${tmp}/files.$1 | 
|  | rm -f ${files} | 
|  | hg log --rev $1 -v --template '{files}\n' | expand \ | 
|  | | ${awk} -F' ' '{for(i=1;i<=NF;i++)print $i}' \ | 
|  | > ${files} | 
|  | if [ -f "${files}" -a -s "${files}" ] ; then | 
|  | copyright="Copyright (c)" | 
|  | company="Oracle" | 
|  | fcount=`cat ${files}| wc -l` | 
|  | for i in `cat ${files}` ; do | 
|  | if [ `updateFile "${i}"` = "true" ] ; then | 
|  | count=`expr ${count} '+' 1` | 
|  | fi | 
|  | done | 
|  | if [ ${count} -gt 0 ] ; then | 
|  | printf "  UPDATED year on %d of %d files.\n" ${count} ${fcount} | 
|  | total=`expr ${total} '+' ${count}` | 
|  | else | 
|  | printf "  None of the %d files were changed.\n" ${fcount} | 
|  | fi | 
|  | else | 
|  | printf "  ERROR: No files changed in the changeset? Must be a mistake.\n" | 
|  | set -x | 
|  | ls -al ${files} | 
|  | hg log --rev $1 -v --template '{files}\n' | 
|  | hg log --rev $1 -v --template '{files}\n' | expand \ | 
|  | | ${awk} -F' ' '{for(i=1;i<=NF;i++)print $i}' | 
|  | set +x | 
|  | exit 1 | 
|  | fi | 
|  | rm -f ${files} | 
|  | } | 
|  |  | 
|  | # Check if repository is clean | 
|  | previous=`hg status|wc -l` | 
|  | if [ ${previous} -ne 0 ] ; then | 
|  | echo "WARNING: This repository contains previously edited working set files." | 
|  | echo "  hg status | wc -l = `hg status | wc -l`" | 
|  | fi | 
|  |  | 
|  | # Get all changesets this year | 
|  | all_changesets=${tmp}/all_changesets | 
|  | rm -f ${all_changesets} | 
|  | hg log --no-merges -v -d "${year}-01-01 to ${year}-12-31" --template '{node}\n' > ${all_changesets} | 
|  |  | 
|  | # Check changeset to see if it is Copyright only changes, filter changesets | 
|  | if [ -s ${all_changesets} ] ; then | 
|  | echo "Changesets made in ${year}: `cat ${all_changesets} | wc -l`" | 
|  | index=0 | 
|  | cat ${all_changesets} | while read changeset ; do | 
|  | index=`expr ${index} '+' 1` | 
|  | desc=${tmp}/desc.${changeset} | 
|  | rm -f ${desc} | 
|  | echo "------------------------------------------------" | 
|  | hg log --rev ${changeset} --template '{desc}\n' > ${desc} | 
|  | printf "%d: %s\n%s\n" ${index} "${changeset}" "`cat ${desc}|head -1`" | 
|  | if [ "${year}" = "2010" ] ; then | 
|  | if cat ${desc} | fgrep -i "Added tag" > /dev/null ; then | 
|  | printf "  EXCLUDED tag changeset.\n" | 
|  | elif cat ${desc} | fgrep -i rebrand > /dev/null ; then | 
|  | printf "  EXCLUDED rebrand changeset.\n" | 
|  | elif cat ${desc} | fgrep -i copyright > /dev/null ; then | 
|  | printf "  EXCLUDED copyright changeset.\n" | 
|  | else | 
|  | updateChangesetFiles ${changeset} | 
|  | fi | 
|  | else | 
|  | if cat ${desc} | fgrep -i "Added tag" > /dev/null ; then | 
|  | printf "  EXCLUDED tag changeset.\n" | 
|  | elif cat ${desc} | fgrep -i "copyright year" > /dev/null ; then | 
|  | printf "  EXCLUDED copyright year changeset.\n" | 
|  | else | 
|  | updateChangesetFiles ${changeset} | 
|  | fi | 
|  | fi | 
|  | rm -f ${desc} | 
|  | done | 
|  | fi | 
|  |  | 
|  | if [ ${total} -gt 0 ] ; then | 
|  | echo "---------------------------------------------" | 
|  | echo "Updated the copyright year on a total of ${total} files." | 
|  | if [ ${previous} -eq 0 ] ; then | 
|  | echo "This count should match the count of modified files in the repository: hg status -m" | 
|  | else | 
|  | echo "WARNING: This repository contained previously edited working set files." | 
|  | fi | 
|  | echo "  hg status -m | wc -l = `hg status -m | wc -l`" | 
|  | else | 
|  | echo "---------------------------------------------" | 
|  | echo "No files were changed" | 
|  | if [ ${previous} -ne 0 ] ; then | 
|  | echo "WARNING: This repository contained previously edited working set files." | 
|  | fi | 
|  | echo "  hg status -m | wc -l = `hg status -m | wc -l`" | 
|  | fi | 
|  |  | 
|  | # Cleanup | 
|  | rm -f -r ${tmp} | 
|  | exit 0 | 
|  |  |