[dev] update_horde.sh
Marcus I. Ryan
marcus@riboflavin.net
Fri, 26 Apr 2002 15:33:54 -0500
This message is in MIME format.
---------------------- multipart/mixed attachment
Sorry...old habit. cd === chdir, at least in /bin/sh on FreeBSD. My
guess is if you are getting a protocol error, there is a problem with
your CVS file somehow. I believe the script assumes you have already
done the CVS login.
Not sure what to tell you other than that, except I am not, in general,
a shell programmer, and it has only been tested, as far as I'm aware, on
my machine, and yours, so if you have problems, you're pretty much on
your own :} *shrug*
Quoting Akira Kurogane <akira@kurogane.net>:
> 引用中 "Marcus I. Ryan" <marcus@riboflavin.net>:
>
> Hello Marcus,
> I've been eager to use this script, but in my linux distribution
> "chdir" is
> not a command line prompt (well, not from either bash or ksh), so I'm
> hitting
> errors. I tried changing it to "cd" but another error popped up
> ("Protocol
> error: data uncounted for" or something very close to that) so I
> dropped that.
> Could you possibly tell me if cd is a perfectly good substitute for
> chdir or
> where I should get chdir from?
>
> I do appreciate the time you've taken to help out the horde
> developers, by the way.
>
> Yours faithfully,
>
> Akira
>
> > #!/bin/sh
> >
> > # This is the script I use for updating HORDE. It does a diff
> between
> > # the active config files and the .dist files, updates horde, then
>
> > # recopies the .dist files to make them active and tries to repatch
> them.
> > # If the patch fails on any given file it should open your $EDITOR
> with
> > # the .rej file and the active config file.
> > #
> > # It does all of this is a temporary directory, and keeps backup
> copies
> > # of the existing horde distribution before overwriting. Check all
> the
> > # settings at the top of the script for examples of defining a
> release
> > # set to fetch, where to store files, how many backups to keep,
> etc.
> > # NOTE: NUM_SLASHES is used to applying the patches. It should
> match the
> > # number of directories in WEBDIR + 1 (so /usr/local/www =>
> > # NUM_SLASHES=4)
> >
> > trim () {
> > echo $@
> > }
> >
> > ### MISC. OPTIONS ###
> > NUM_SLASHES=4
> > NUM_BACKUPS=5
> >
> > ### DIRECTORIES ###
> > WEBDIR=/usr/local/www
> > BACKUPDIR=/usr/local/src
> > TMPDIR=/usr/local/src
> >
> > ### RELEASES ###
> > RELEASES="release head"
> >
> > # For each release, we need _dir and _ver settings
> >
> > #This is the "array" of applications and versions to get
> > release_dir=horde
> > release_ver="
> > horde-RELENG_2
> > imp-RELENG_3
> > turba-RELENG_1
> > gollem-HEAD
> > kronolith-RELENG_1
> > jonah-HEAD
> > troll-HEAD
> > nag-RELENG_1
> > nic-HEAD
> > "
> > release_ver=`trim ${release_ver}`
> >
> > head_dir=horde.head
> > head_ver="
> > horde-head
> > imp-HEAD
> > turba-HEAD
> > gollem-HEAD
> > kronolith-HEAD
> > jonah-HEAD
> > troll-HEAD
> > nag-HEAD
> > nic-HEAD
> > "
> > head_ver=`trim ${head_ver}`
> >
> > APPVER=$head_ver
> > HORDEDIR=$head_dir
> >
> > # check to see if any command line args are specified
> > for arg in $*
> > do
> > name=${arg%%=*}
> > name=${name##--}
> > value=${arg##*=}
> > if [ "$name" = "release" ]; then
> > APPVER=`eval echo '$'$value'_ver'`
> > HORDEDIR=`eval echo '$'$value'_dir'`
> > if [ "$APPVER" = "" -o "$HORDEDIR" = "" ]; then
> > echo "ERROR: No settings for release $value"
> > fi
> > continue
> > fi
> > echo "Unknown option $arg ('$name' = '$value')"
> > exit 1
> > done
> >
> > echo "Verifying distribution list"
> > if [ ! "${APPVER%%[- ]*}" = "horde" ]; then
> > echo " horde MUST be the first item in the APPVER list!"
> > exit 1
> > fi
> >
> > echo "Determining temporary directory..."
> > EXISTS=`ls -d ${TMPDIR}/${HORDEDIR}.TMP.[0-9]* | head -1`
> > TMPDIR="${TMPDIR}/${HORDEDIR}.TMP.$$"
> >
> > if [ ! -z ${EXISTS} ]; then
> > echo " Found an existing (aborted?) update of horde
> (${EXISTS})."
> > read -p " Should I use it? [Yes]" USE_EXISTING
> > case ${USE_EXISTING} in
> > [Nn]|[Nn][Oo])
> > read -p " Should I delete ${EXISTS}? [Yes]" DELETE_EXISTING
> > case ${DELETE_EXISTING} in
> > [Nn]|[Nn][Oo])
> > echo " Not deleting ${EXISTS}"
> > ;;
> > *)
> > echo " Deleting ${EXISTS}"
> > rm -rf ${EXISTS}
> > ;;
> > esac
> > ;;
> > *)
> > TMPDIR=${EXISTS}
> > ;;
> > esac
> > unset USE_EXISTING
> > fi
> > if [ -e ${TMPDIR} ]; then
> > echo " Using ${TMPDIR}"
> > else
> > echo " Creating new directory ${TMPDIR}"
> > mkdir ${TMPDIR}
> > if [ ! -e ${TMPDIR} ]; then
> > echo "ERROR: Couldn't create ${TMPDIR}"
> > exit 1
> > fi
> > fi
> >
> > echo "Creating config patch file from existing horde"
> > if [ -e ${TMPDIR}/update.patch ]; then
> > read -p " This directory includes a patch. Use it? [Yes]"
> USE_EXISTING
> > case ${USE_EXISTING} in
> > [Nn]|[Nn][Oo])
> > echo " Clearing existing update.patch"
> > rm -f ${TMPDIR}/update.patch || exit 1
> > ;;
> > esac
> > unset USE_EXISTING
> > fi
> > if [ ! -e ${TMPDIR}/update.patch ]; then
> > if [ ! -e ${WEBDIR}/${HORDEDIR} ]; then
> > echo " No existing horde distribution found. Can't create
> patch."
> > else
> > read -p " Do you want to create a patch from the existing
> install?
> > [Yes]" MAKE_PATCH
> > case ${MAKE_PATCH} in
> > [Nn]|[Nn][Oo])
> > echo " Not creating a patch"
> > ;;
> > *)
> > echo " Creating patch...this could take a bit..."
> > find ${WEBDIR}/${HORDEDIR} -type f -name \*.dist -print \
> > | perl -ne 's/\.dist[\r\n]*//; print "$_.dist\n$_\n";' \
> > | xargs -n 2 diff -u > ${TMPDIR}/update.patch
> > ;;
> > esac
> > unset MAKE_PATCH
> > fi
>
> > fi
> >
> > if [ -e "${WEBDIR}/${HORDEDIR}" ]; then
> > read -p "Do you want to fetch new (N) or update (U)? [U] "
> FETCH_NEW
> > else
> > FETCH_NEW=new
> > fi
> >
> > case ${FETCH_NEW} in
> > [Nn]|[Nn][Ee][Ww])
> > for APP in ${APPVER}
> > {
> > app=${APP%%-*}
> > rel=${APP##*-}
> > if [ ${app} = ${APP} ]; then
> > echo " No release specified...assuming HEAD"
> > rel=HEAD
> > fi
> >
> > case ${app} in
> > horde)
> > APPDIR=${TMPDIR}
> > ;;
> > *)
> > APPDIR=${TMPDIR}/${HORDEDIR}
> > ;;
> > esac
> >
> > if [ -e ${APPDIR}/${app} ]; then
> > case ${REGET} in
> > [Aa]|[Aa][Ll][Ll])
> > echo " Removing existing ${APPDIR}/${app}...";
> > rm -rf ${APPDIR}/${app}
> > echo " Retrieving ${app} $rel..."
> > chdir ${APPDIR}
> > cvs -Q -z3 -d
> :pserver:cvsread@anoncvs.horde.org:/repository co \
> > -r $rel ${app}
> > ;;
> > [Nn][Oo][Nn][Ee])
> > REGET="NONE"
> > echo " Using existing ${APPDIR}/${app}"
> > ;;
> > *)
> > echo " ${app} exists. Should I get ${app} anyway?"
> > if [ "${app}" = "horde" ]; then
> > echo " NOTE: regetting horde does not clear out any
> > existing files"
> > fi
> > read -p " [Y]es/[N]o/[A]ll/None (default None): "
> REGET
> > case ${REGET} in
> > [Yy]|[Yy][Ee][Ss]|[Aa]|[Aa][Ll][Ll])
> > echo " Removing existing ${APPDIR}/${app}...";
> > rm -rf ${APPDIR}/${app}
> > echo " Retrieving ${app} $rel..."
> > chdir ${APPDIR}
> > cvs -Q -z3 -d
> :pserver:cvsread@anoncvs.horde.org:/repository
> > co \
> > -r $rel ${app}
> > ;;
> > [Nn]|[Nn][Oo])
> > echo " Using existing ${APPDIR}/${app}"
> > ;;
> > *)
> > echo " Using existing ${APPDIR}/${app}"
> > REGET=NONE
> > ;;
> > esac
> > ;;
> > esac
> > else
> > echo " Retrieving ${app} $rel..."
> > chdir ${APPDIR}
> > cvs -Q -z3 -d
> :pserver:cvsread@anoncvs.horde.org:/repository co \
> > -r $rel ${app}
> > fi
> > if [ "$app" = "horde" ]; then
> > mv ${TMPDIR}/horde ${TMPDIR}/${HORDEDIR}
> > fi
> > }
> > ;;
> > *)
> > mkdir ${TMPDIR}/${HORDEDIR}
> > cp -Rpf ${WEBDIR}/${HORDEDIR}/* ${TMPDIR}/${HORDEDIR}
> > cd ${TMPDIR}/${HORDEDIR}
> > cvs update -PdC
> > ;;
> > esac
> >
> > echo "Putting default config files in place..."
> > if [ -e ${TMPDIR}/${HORDEDIR}/config/horde.php ]; then
> > echo " I have found some configuration files already in
> place."
> > echo " NOTE: If some have been copied and others not, horde will
> be
> > broken."
> > read -p " Should I copy .dist files anyway? [No] "
> USE_EXISTING
> > #The phrasing of the question means USE_EXISTING from the read
> is
> > backwards
> > # but it seems better to confuse the programmer than the
> user...
> > case ${USE_EXISTING} in
> > [Yy]|[Yy][Ee][Ss])
> > USE_EXISTING=NO
> > ;;
> > *)
> > USE_EXISTING=YES
> > ;;
> > esac
> > fi
> > if [ "${USE_EXISTING:=NO}" = "NO" ]; then
> > echo " Copying *.dist files..."
> > find ${TMPDIR}/${HORDEDIR} -type f -name \*.dist -print \
> > | perl -ne 'print "$_"; s/\.dist//; print "$_"' \
> > | xargs -n 2 cp
> > fi
> >
> > echo "Applying patch..."
> > echo " Clearing out any old reject files..."
> > find ${TMPDIR} -name \*.rej -type f -exec rm {} \; -print
> >
> > if [ ! -e ${TMPDIR}/update.patch ]; then
> > echo " I can't seem to find the patch file
> ${TMPDIR}/update.patch!"
> > read -p " Do you want me to load all config files in $EDITOR?
> [No]" EDIT
> > case ${EDIT} in
> > [Yy]|[Yy][Ee][Ss])
> > find ${TMPDIR}/${HORDEDIR} -type f -name \*.dist \
> > | perl -ne 's/\.dist[\r\n]*//; print "$_\n";' \
> > | xargs -n 2 echo $EDITOR > ${TMPDIR}/edit.sh
> > sh ${TMPDIR}/edit.sh
> > rm ${TMPDIR}/edit.sh
> > ;;
> > *)
> > echo " WARNING: You need to change the config files later!"
> > ;;
> > esac
> > else
> > if [ "${USE_EXISTING}" = "YES" ]; then
> > echo " We kept the modified configuration files."
> > read -p " Should we still apply the patch? [No] " PATCH
> > case ${PATCH} in
> > [Yy]|[Yy][Ee][Ss])
> > PATCH=YES
> > ;;
> > *)
> > PATCH=NO
> > ;;
> > esac
> > fi
> >
> > if [ "${PATCH:=YES}" = "YES" ]; then
> > echo " running patch"
> > chdir ${TMPDIR}
> > if [ `patch -f -p${NUM_SLASHES} -s < ${TMPDIR}/update.patch` ];
> then
> > echo " Patch applied successfully"
> > else
> > find ${TMPDIR}/${HORDEDIR} -type f -name \*.rej \
> > | perl -ne 's/\.rej[\r\n]*//; print "$_.rej\n$_\n"; ' \
> > | xargs -n 2 echo $EDITOR > ${TMPDIR}/edit.sh
> > sh ${TMPDIR}/edit.sh
> > rm ${TMPDIR}/edit.sh
> > fi
> > fi
> > fi
> >
> > read -p "Are you ready to put the new CVS into production? [Yes]"
> PROD
> > case ${PROD} in
> > [Nn]|[Nn][Oo])
> > echo "${TMPDIR} has not been put in production."
> > ;;
> > *)
> > if [ -e ${WEBDIR}/${HORDEDIR} ]; then
> > i=1
> > while [ ${i} != ${NUM_BACKUPS} ]
> > do
> > if [ ! -e ${BACKUPDIR}/${HORDEDIR}.${i} ]; then
> > break;
> > fi
> > i=$((${i}+1))
> > done
> >
> > if [ ${i} = ${NUM_BACKUPS} ] && [ -e
> ${BACKUPDIR}/${HORDEDIR}.${i}
> > ]; then
> > echo " Removing oldest backup directory
> > (${BACKUPDIR}/${HORDEDIR}.${i})"
> > rm -rf ${BACKUPDIR}/${HORDEDIR}.${i} || exit 1
> > fi
> >
> > while [ ${i} != 1 ]
> > do
> > echo " Moving ${BACKUPDIR}/${HORDEDIR}.$((${i}-1)) to
> > ${BACKUPDIR}/${HORDEDIR}.${i}"
> > mv ${BACKUPDIR}/${HORDEDIR}.$((${i}-1))
> > ${BACKUPDIR}/${HORDEDIR}.${i} || exit 1
> > i=$((${i}-1))
> > done
> >
> > echo " Moving ${WEBDIR}/${HORDEDIR} to
> ${BACKUPDIR}/${HORDEDIR}.1"
> > mv ${WEBDIR}/${HORDEDIR} ${BACKUPDIR}/${HORDEDIR}.1 || exit 1
> >
> > echo " Moving ${TMPDIR}/${HORDEDIR} ${WEBDIR}/${HORDEDIR}"
> > mv ${TMPDIR}/${HORDEDIR} ${WEBDIR}/${HORDEDIR} || exit 1
> >
> > echo " Removing ${TMPDIR}"
> > rm -rf ${TMPDIR}
> >
> > echo "New CVS horde is now in production!"
> > else
> > echo "${WEBDIR}/${HORDEDIR} does not exist. Copying
> > ${TMPDIR}/${HORDEDIR} to ${WEBDIR}/${HORDEDIR}"
> > cp ${TMPDIR}/${HORDEDIR} ${WEBDIR}/${HORDEDIR}
> > fi
> > ;;
> > esac
> >
> >
> > --
> > Marcus I. Ryan, marcus@riboflavin.net
> >
> -----------------------------------------------------------------------
> > "Love is a snowmobile racing across the tundra and then suddenly
> it
> > flips over, pinning you underneath. At night, the ice weasels
> come."
> > -- Matt Groening
> >
> -----------------------------------------------------------------------
> >
> > --
> > Horde Developers mailing list: http://horde.org/
> > Frequently Asked Questions: http://horde.org/faq/
> > To unsubscribe, mail: dev-unsubscribe@lists.horde.org
> >
>
>
>
>
> -------------------------------------------------
> >From Kurogane.net
>
> --
> Horde developers mailing list
> Frequently Asked Questions: http://horde.org/faq/
> To unsubscribe, mail: dev-unsubscribe@lists.horde.org
>
--
Marcus I. Ryan, marcus@riboflavin.net
-----------------------------------------------------------------------
"Love is a snowmobile racing across the tundra and then suddenly it
flips over, pinning you underneath. At night, the ice weasels come."
-- Matt Groening
-----------------------------------------------------------------------
---------------------- multipart/mixed attachment
A non-text attachment was scrubbed...
Name: PGP Public Key
Type: application/pgp-keys
Size: 995 bytes
Desc: not available
Url : http://lists.horde.org/archives/dev/attachments/eef21c9d/PGPPublicKey.bin
---------------------- multipart/mixed attachment--