From 07bc90a71759dd653adf4df5b5c3f6bdabceb04a Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Thu, 23 Feb 2012 07:51:50 -0600 Subject: Add initial git support to merge-helper scripts --- merge-helpers/ChangeLog | 184 ++++++++++++++++++++++++++++++++++++++++++ merge-helpers/commit | 43 ++++++++-- merge-helpers/mkChangeLogList | 18 ++++- 3 files changed, 236 insertions(+), 9 deletions(-) (limited to 'merge-helpers') diff --git a/merge-helpers/ChangeLog b/merge-helpers/ChangeLog index 9ba8d76..307d47b 100644 --- a/merge-helpers/ChangeLog +++ b/merge-helpers/ChangeLog @@ -1,3 +1,187 @@ +#! /bin/sh +# +# Use git from the current directory and put the file names +# in suitable format for use in a ChangeLog. +# +# TODO: Initial conversion from cvs +# +# $Id: mkChangeLogList,v 1.6 2011/01/04 19:53:53 joel Exp $ +# + +mklog_() +{ + cat >XXX + if test `cat XXX | wc -l` -ne 0 ; then + (cat XXX | cut -d':' -f2 | \ + sed -e '$!s/$/,/' -e '$s/$/:/' ; \ + test $? -ne 0 || echo "$*" )| \ + xargs -s80 | sed -e '1s/^/ \* /' -e '2,$s/^/ /' + fi + rm -f XXX +} + +progname=${0##*/} +usage() +{ + echo "$progname [-ln] [-u user] [-U user_information] [-m message] [-M msgfile]" + exit 1 +} + +print_name="no" +user=$LOGNAME +git_local_arg="" +basedir=. +while getopts d:lnM:m:p:c:u:U: OPT +do + case "$OPT" in + d) basedir=$OPTARG ;; + l) git_local_arg="-l" ;; + n) print_name="yes" ;; + p) prnum=$OPTARG ;; + c) coverity_num=$OPTARG ;; + m) message=$OPTARG ;; + M) message=`cat $OPTARG` ;; + u) user=$OPTARG ; print_name="yes" ;; + U) user_name=$OPTARG ; print_name="yes" ;; + *) usage ;; + esac +done + +let $((shiftcount = $OPTIND - 1)) +shift #shiftcount + +args=$* + +dirarg="${basedir}" + +# Determine VCS in use +isgit() +{ + depth=0 + dir=.git + while [ $depth -lt 10 ] + do + if [ -d ${dir} ] ; then + return 1 + fi + dir=../${dir} + depth=`expr ${depth} + 1` + done + return 0 +} + +isgit +if [ $? -eq 1 ] ; then + VCS=git +elif [ -d CVS ] ; then + VCS=cvs +else + echo "This does not look like a checkout from a VCS I understand." + exit 1 +fi + +if [ ! -r ChangeLog ] ; then + ( echo "There is no ChangeLog in this directory." ; + echo "Where are you putting the entry?" )>/dev/stderr + exit 1 +fi + +case ${VCS} in + cvs) + # done parsing arguments, now work + if [ "X${CVSROOT}" = "X" ] ; then + CVS=cvs + else + CVS="cvs -d ${CVSROOT}" + fi + CVS="${CVS}" + + files_modded=`${CVS} diff ${dirarg} 2>&1 | grep ^Index | wc -l` + files_added=`${CVS} diff ${dirarg} 2>&1 | grep "is a new entry, no " | wc -l` + files_deleted=`${CVS} diff ${dirarg} 2>&1 | grep " was removed, no " | wc -l` + ;; + git) + files_modded=`git status ${dirarg} 2>&1 | grep "modified: " | wc -l` + files_added=`git status ${dirarg} 2>&1 | grep "new file: " | wc -l` + files_deleted=0 + #files_deleted=`${CVS} diff ${dirarg} 2>&1 | grep " was removed, no " | wc -l` + ;; + *) + echo "${VCS} to be implemented" + exit 1 + ;; +esac + +files_changed=`expr ${files_modded} + ${files_added} + ${files_deleted}` +if test ${files_changed} -eq 0 ; then + exit 0 +fi + +if test ${print_name} = "yes" ; then + if test "X${user_name}" = "X" ; then + if test "X${user}" = "X" ; then + echo "User not specified (LOGNAME not set or no -u option)" + usage + fi + + user_name=`grep ^${user} /etc/passwd | cut -d':' -f5 | cut -d',' -f1` + if test "X${user_name}" = "X" ; then + echo "User information not set" + usage + fi + fi + + date=`date +%Y-%m-%d` + echo "${date} ${user_name}" + echo +fi + +if test "X${prnum}" != "X" ; then + echo " PR ${prnum}" +fi +if test "X${coverity_num}" != "X" ; then + echo " Coverity Id ${coverity_num}" +fi + +case ${VCS} in + cvs) + # Generate list of modified files + ${CVS} diff ${dirarg} 2>/dev/null | grep ^Index | mklog_ ${message} + + # Generate list of deleted files + test ${files_added} -gt 1 && plural=s + ${CVS} diff ${dirarg} 2>&1 | grep "is a new entry, no comparison" | \ + sed -e 's/^.*: //' -e 's/ is a .*$//' | mklog_ "New file${plural}." + + # Generate list of removed files + ${CVS} diff ${dirarg} 2>&1 | grep "was removed, no comparison" | \ + sed -e 's/^.*: //' -e 's/ was removed, no comparison.*$//' | \ + mklog_ Removed. + ;; + git) + # Generate list of modified files + git status 2>&1 | grep "modified: " | mklog_ ${message} + + # Generate list of deleted files + test ${files_added} -gt 1 && plural=s + git status 2>&1 | grep "new file: " | \ + sed -e 's/^.*: //' -e 's/ is a .*$//' | mklog_ "New file${plural}." + + # Generate list of removed files + #${CVS} diff ${dirarg} 2>&1 | grep "was removed, no comparison" | \ + # sed -e 's/^.*: //' -e 's/ was removed, no comparison.*$//' | \ + # mklog_ Removed. + ;; + *) + echo "${VCS} to be implemented" + exit 1 + ;; +esac + +echo + +# rm -f XXX +exit 0 2011-08-31 Joel Sherrill * check_submission: Check for tabs in source files. diff --git a/merge-helpers/commit b/merge-helpers/commit index 8d32ebc..1f9b473 100755 --- a/merge-helpers/commit +++ b/merge-helpers/commit @@ -26,7 +26,23 @@ usage() } # Determine VCS in use -if [ -d .git ] ; then +isgit() +{ + depth=0 + dir=.git + while [ $depth -lt 10 ] + do + if [ -d ${dir} ] ; then + return 1 + fi + dir=../${dir} + depth=`expr ${depth} + 1` + done + return 0 +} + +isgit +if [ $? -eq 1 ] ; then VCS=git elif [ -d CVS ] ; then VCS=cvs @@ -104,7 +120,7 @@ if test "X${userInfo}" = "X" ; then fi fi -commit() +commit_helper() { if [ $? -ne 0 ] ; then return @@ -120,7 +136,8 @@ commit() ;; git) echo "git commit -F ${changefile}" - git commit -a -F ${changefile} + git add ${changefile} + git commit -F ${changefile} ;; *) echo "${VCS} to be implemented" ; exit 1 ;; esac @@ -141,10 +158,20 @@ for ddir in ${subdirs} ; do test "${ddir}" = "autom4te.cache" && continue test "${ddir}" = "install" && continue if [ -d "${ddir}" ]; then - if [ ! -d "${ddir}/${VCSDIR}" ] ; then - echo "WARNING - ${ddir} is not in .git" - continue - fi + case ${VCS} in + cvs) + if [ ! -d "${ddir}/${VCSDIR}" ] ; then + echo "WARNING - ${ddir} is not in .git" + continue + fi + ;; + git) + ;; + *) + echo "${VCS} to be implemented" + exit 1 + ;; + esac test -f "${ddir}/ChangeLog" || continue cd "$ddir" >/dev/null mkChangeLogList ${mkchoptions} ${userArg} "${userInfo}" \ @@ -157,7 +184,7 @@ for ddir in ${subdirs} ; do response="n" read -p "Commit changes? [y/n/e(edit)]: " response case ${response} in - y) commit; break ;; + y) commit_helper; break ;; n) break ;; e) ${editor} ${changefile} ;; *) echo "*** enter y,n, or e ***" ;; diff --git a/merge-helpers/mkChangeLogList b/merge-helpers/mkChangeLogList index 5d9fe9c..007297b 100755 --- a/merge-helpers/mkChangeLogList +++ b/merge-helpers/mkChangeLogList @@ -55,7 +55,23 @@ args=$* dirarg="${basedir}" # Determine VCS in use -if [ -d .git ] ; then +isgit() +{ + depth=0 + dir=.git + while [ $depth -lt 10 ] + do + if [ -d ${dir} ] ; then + return 1 + fi + dir=../${dir} + depth=`expr ${depth} + 1` + done + return 0 +} + +isgit +if [ $? -eq 1 ] ; then VCS=git elif [ -d CVS ] ; then VCS=cvs -- cgit v1.2.3