#!/bin/bash
#
# p_rename: Renames a file both in the PIMPPA database and on disk.
#
# Script submitted by A.E.
#
# Bugs: will behave badly when several files with the same 
#       name exist in the database.
#
usage ()
{
  echo usage: $0 oldname newname >&2
  exit 1
}

undo_database_rename ()
{
mysql --batch --skip-column-names --user pimppa --database pimppa\
 --execute "update p_files set file_name = \"$OLDNAME\"\
 where file_name = \"$NEWNAME\";"
}

if test $# -ne 2
then
  usage
fi

OLDNAME=$1
NEWNAME=$2

if ! test -f $OLDNAME
then
  echo $0: $OLDNAME not found, aborting >&2
  exit 2
fi

if ! test -w $OLDNAME
then
  echo $0: $OLDNAME is unwriteable, aborting >&2
  exit 3
fi

FILE_ID=`mysql --batch --skip-column-names --user pimppa --database pimppa\
 --execute "select file_id from p_files where file_name = \"$OLDNAME\"\
 and file_backup = 0;"`

if ! test $?
then
  echo $0: MySQL error while looking up file name, check server, aborting >&2
  exit 4
fi

if test "${FILE_ID}x" = "x"
then
  echo $0: $OLDNAME not found in PIMPPA database, aborting >&2
  exit 5
fi

mysql --batch --skip-column-names --user pimppa --database pimppa\
 --execute "update p_files set file_name = \"$NEWNAME\"\
 where file_name = \"$OLDNAME\";"

if ! test $?
then
  echo $0: MySQL error while attempting rename in database, aborting >&2
  exit 6
fi

if ! mv $OLDNAME $NEWNAME
then
  echo $0: Rename failed, undoing database rename, aborting >&2
  undo_database_rename
  exit 7
fi

exit 0
