[Refdb-cvs] CVS: refdb/scripts refdb-backup,1.3.2.3,1.3.2.4 refdb-restore,1.3.2.3,1.3.2.4
Status: Beta
Brought to you by:
mhoenicka
From: David N. <dav...@us...> - 2005-02-03 11:45:31
|
Update of /cvsroot/refdb/refdb/scripts In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9240 Modified Files: Tag: Release_0_9_5_stable refdb-backup refdb-restore Log Message: Portability-related changes (string-chopping, mktemp); removed use of system bell; added '-s' (silent) option to 'refdb-backup'. Index: refdb-backup =================================================================== RCS file: /cvsroot/refdb/refdb/scripts/refdb-backup,v retrieving revision 1.3.2.3 retrieving revision 1.3.2.4 diff -u -U2 -r1.3.2.3 -r1.3.2.4 --- refdb-backup 31 Jan 2005 15:36:58 -0000 1.3.2.3 +++ refdb-backup 3 Feb 2005 11:45:20 -0000 1.3.2.4 @@ -21,43 +21,66 @@ refdba="refdba" # refdba command refdbc="refdbc" # refdbc command -parameters="[-u USER] [-w PWD] [-f FORMAT] [-d DIR]" # cmd-line options +parameters="[-u USER] [-w PWD] [-f FORMAT] [-d DIR] [-s]" # cmd-line args +feedback="true" # whether user receives screen feedback # PROCEDURES +# Give user feedback +# params: 1 - message +# 2 - indent (number of indents|tabs) +# 3 - copy to log? ( 0 = true, 1 = false ) +# 4 - terminate with newline? ( 0 = true, 1 = false ) +# return: nil +feedback () { + # decide on use of newline flag + if [ $4 -ne 0 ] ; then use_newline="-n" ; else use_newline="" ; fi + # add indents as required + msg=$1 + loop=1 + while [ 1 ] ; do + [ ${loop} -gt $2 ] && break + [ ${feedback} ] && echo -n " " + loop=$(( ${loop} + 1 )) + done + # screen feedback + [ ${feedback} ] && echo ${use_newline} ${msg} + # log feedback + [ $3 -eq 0 ] && echo ${use_newline} ${msg} >> ${logfile} +} # Report success of operation +# params: 1 - message +# 2 - copy to log? ("log" = yes, "" = no ) +# return: nil report () { if [ $1 -eq 0 ] ; then - if [ "$2" = "log" ] ; then - echo "OK." | tee -a ${logfile} - else - echo "OK." - fi + [ "$2" = "log" ] && echo "OK." >> ${logfile} + feedback " OK." 0 1 0 else - if [ "$2" = "log" ] ; then - echo "Failed." | tee -a ${logfile} - else - echo "Failed." - fi + [ "$2" = "log" ] && echo "Failed." >> ${logfile} + feedback " Failed." 0 1 0 fi } # Report failure and abort +# params: 1 - message +# 2 - success flag ( "succeeded" = yes | "*" = no ) +# return: nil endScript () { + # attempt to change back to initial directory cd ${start_dir} || \ - "Error: Unable to cd to initial directory '${start_dir}'." - echo ; echo "$1" - echo ; echo "refdb backup $2." - echo "`basename $0` is finished." - if [ "$2" = "succeeded" ] ; then - # Single tone indicates success - echo -ne "\a" - exit 0 - else - # Double tone indicates failure - echo -ne "\a" ; sleep 1s ; echo -ne "\a" - exit 1 - fi + feedback "Error: Unable to cd to start dir '${start_dir}'." 0 1 0 + # attempt to delete temporary files + err_msg="Error: Unable to delete temporary directory '${tempdir}'." + [ -d ${tempdir} ] && rm -fr ${tempdir} || feedback ${err_msg} 0 1 0 + # provide feedback regarding success of backup + feedback " " 0 1 0 ; feedback "$1" 0 1 0 + feedback " " 0 1 0 ; feedback "refdb backup $2." 0 1 0 + feedback "`basename $0` is finished." 0 1 0 + # provide exit status to shell + if [ "$2" = "succeeded" ] ; then exit 0 ; else exit 1 ; fi } # Show usage +# params: nil +# return: nil displayUsage () { echo "`basename $0`: Backs up RefDB data." @@ -74,4 +97,5 @@ echo " -d DIR = directory to place backup file" echo " default is current directory" + echo " -s = silent, i.e., no screen feedback" echo "Note: RefDB clients can be configured for automatic access." echo " If this is so, username and password are not required." @@ -86,5 +110,5 @@ # Read the command line options -while getopts ":hf:d:u:w:" opt ; do +while getopts ":hf:d:u:w:s" opt ; do case ${opt} in h ) displayUsage && exit 0;; @@ -95,4 +119,5 @@ w ) refdba="${refdba} -w \"${OPTARG}\"" refdbc="${refdbc} -w \"${OPTARG}\"";; + s ) feedback="";; \? ) echo "Error: Invalid flag '${OPTARG}' detected" echo "Usage: `basename $0` ${parameters}" @@ -122,5 +147,5 @@ [ `echo ${backup_dir} | grep "\/$"` ] && backup_dir=${backup_dir%%/} # convert relative to absolute dirpath -[ "${backup_dir:0:1}" != "/" ] && \ +[ `echo ${backup_dir} | grep -v "^\/"` ] && \ backup_dir="${start_dir}/${backup_dir}" # now can test @@ -137,7 +162,8 @@ # Will use temporary directory for working # - ensure deletion on exit and change to working directory -tempdir=`mktemp -dq` \ +tempdir_base="`basename $0`.XXXXXX" +tempdir=`mktemp -dq ${tempdir_base}` \ || endScript "Error: Unable to create temporary directory." "failed" -trap "rm -fr ${tempdir}" 0 1 2 3 5 15 # no need to worry about deleting later +trap "rm -fr ${tempdir}" 0 1 2 3 5 15 # delete on exit cd ${tempdir} || \ endScript "Error: Unable to cd to temporary directory '${tempdir}'." \ @@ -145,22 +171,23 @@ # Informational message -echo "`basename $0` is running..." ; echo +feedback "`basename $0` is running..." 0 1 0 ; feedback " " 0 1 0 # Record date/time of backup echo "RefDB backup performed by '`basename $0`'." > ${logfile} echo "Performed: `date '+%Y-%m-%d, %H:%M:%S'`." >> ${logfile} -echo "Storage format: ${format}." | tee -a ${logfile} ; echo +feedback "Storage format: ${format}." 0 0 0 +feedback " " 0 1 0 echo "--------------------------------------------------------" >> ${logfile} # Cycle through databases in turn and backup references and notes for db in `${refdba} -C listdb | cut -d ' ' -f 1` ; do - echo "Processing database: ${db}" | tee -a ${logfile} + feedback "Processing database: ${db}" 0 0 0 dirname="db_${db}" - echo -n " Creating subdirectory '${dirname}' ... " | tee -a ${logfile} + feedback "Creating subdirectory '${dirname}' ..." 1 0 1 mkdir ${dirname} &> /dev/null report $? log # dump references reffile="${dirname}/${references_backup}.${extension}" - echo -n " Backing up references ... " | tee -a ${logfile} + feedback "Backing up references ..." 1 0 1 ${refdbc} -C getref -d ${db} -t ${format} -o ${reffile} ":ID:>0" \ &> /dev/null @@ -168,5 +195,5 @@ # dump notes notefile="${dirname}/${notes_backup}" - echo -n " Backing up notes ... " | tee -a ${logfile} + feedback "Backing up notes ..." 1 0 1 ${refdbc} -C getnote -d ${db} -t xnote -o ${notefile} ":NID:>0" \ &> /dev/null @@ -175,11 +202,10 @@ # Cycle through styles in turn and back them up -echo "Processing styles" | tee -a ${logfile} -echo -n " Creating styles directory '${styles_directory}' ... " \ - | tee -a ${logfile} +feedback "Processing styles" 0 0 0 +feedback "Creating styles directory '${styles_directory}' ..." 1 0 1 mkdir ${styles_directory} &> /dev/null report $? log for style in `${refdba} -C liststyle` ; do - echo -n " Backing up style: ${style} ... " | tee -a ${logfile} + feedback "Backing up style: ${style} ..." 1 0 1 # remove terminal period from file name if present if [ `echo ${style} | grep "\.$" | wc -l` -eq 1 ] ; then @@ -195,9 +221,9 @@ # Now done echo "--------------------------------------------------------" >> ${logfile} -echo "Written log file: ${logfile}." +feedback "Written log file: '${logfile}' (located in archive)." 0 1 0 # Create archive -echo "Create archive" -echo -n " Writing archive ... " +feedback "Create archive" 0 1 0 +feedback "Writing archive ..." 1 1 1 tar -czf ${archive} * exit_status=$? && report ${exit_status} @@ -206,5 +232,5 @@ # Move archive to backup directory -echo -n " Copying archive to target directory... " +feedback "Copying archive to target directory..." 1 1 1 mv -f ${archive} ${backup_dir} &> /dev/null exit_status=$? && report ${exit_status} @@ -215,4 +241,4 @@ # Finished [ "${backup_dir}" != "${start_dir}" ] && archive="${backup_dir}/${archive}" -echo ; echo "Backup archive: '${archive}'." +feedback " " 0 1 0 ; feedback "Backup archive: '${archive}'." 0 1 0 endScript "Backup finished." "succeeded" Index: refdb-restore =================================================================== RCS file: /cvsroot/refdb/refdb/scripts/refdb-restore,v retrieving revision 1.3.2.3 retrieving revision 1.3.2.4 diff -u -U2 -r1.3.2.3 -r1.3.2.4 --- refdb-restore 31 Jan 2005 15:36:58 -0000 1.3.2.3 +++ refdb-restore 3 Feb 2005 11:45:20 -0000 1.3.2.4 @@ -28,9 +28,5 @@ # return: nil report () { - if [ $1 -eq 0 ] ; then - echo "OK." | tee -a ${logfile} - else - echo "Failed." | tee -a ${logfile} - fi + if [ $1 -eq 0 ] ; then echo "OK." ; else echo "Failed." ; fi } # Report failure and abort @@ -42,13 +38,5 @@ echo ; echo "refdb restore $2." echo "`basename $0` is finished." - if [ "$2" = "succeeded" ] ; then - # Single tone indicates success - echo -ne "\a" - exit 0 - else - # Double tone indicates failure - echo -ne "\a" ; sleep 1s ; echo -ne "\a" - exit 1 - fi + if [ "$2" = "succeeded" ] ; then exit 0 ; else exit 1 ; fi } # Show usage @@ -128,5 +116,5 @@ # - run tests on archive # - first, convert relative to absolute filepath -[ "${archive:0:1}" != "/" ] && archive="${start_dir}/${archive}" +[ `echo ${archive} | grep -v "^\/"` ] && archive="${start_dir}/${archive}" # - must exist and be readable [ -r ${archive} ] || \ @@ -145,10 +133,13 @@ # Will use temporary directory for working # - ensure deletion on exit and change to working directory -tempdir=`mktemp -dq` \ +tempdir_base="`basename $0`.XXXXXX" +tempdir=`mktemp -dq ${tempdir_base}` \ || endScript "Error: Unable to create temporary directory." "failed" -trap "rm -fr ${tempdir}" 0 1 2 3 5 15 # no need to worry about deleting later +[ `echo ${tempdir} | grep -v "^\/"` ] && tempdir="${start_dir}/${tempdir}" +trap "rm -fr ${tempdir}" 0 1 2 3 5 15 # delete on exit cd ${tempdir} || \ endScript "Error: Unable to cd to temporary directory '${tempdir}'." \ "failed" +echo "Temporary directory: >>${tempdir}<<" # Informational message |