Script to help cycle skia-autogen
Review URL: https://codereview.appspot.com/6481066

git-svn-id: http://skia.googlecode.com/svn/trunk@5291 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/tools/roll_autogen.sh b/tools/roll_autogen.sh
new file mode 100755
index 0000000..2567a13
--- /dev/null
+++ b/tools/roll_autogen.sh
@@ -0,0 +1,64 @@
+#/bin/bash
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# roll_autogen.sh: Helper script for removing old revisions from an svn
+# repository.  Unfortunately, the only way to discard old revisions is to clone
+# the repository locally, use svnadmin to dump a range of commits from the local
+# copy, re-import them into a brand-new repository, "reset" the original repo,
+# and then import the commits from the new repository into the original.  This
+# script automates all of that except for resetting the original repository.
+
+REPO=${REPO:-"https://skia-autogen.googlecode.com"}
+REVS_TO_KEEP=${REVS_TO_KEEP:-50}
+REPO_SVN="${REPO}/svn"
+CLONE_DIR="local_clone_dir"
+LOCAL_CLONE="$(pwd)/${CLONE_DIR}"
+
+echo "Creating local repository in ${LOCAL_CLONE}"
+svnadmin create ${LOCAL_CLONE}
+pushd ${LOCAL_CLONE}/hooks > /dev/null
+echo "#!/bin/sh" > pre-revprop-change
+chmod 755 pre-revprop-change 
+popd > /dev/null
+
+# Determine the latest revision.  Note that any revisions committed while we
+# were syncing will be lost forever!
+END=`svn info ${REPO_SVN} | grep Revision | cut -c11-`
+START=$((END-REVS_TO_KEEP))
+DUMPFILE="skia-autogen_r${START}-${END}.dump"
+
+echo "Cloning ${REPO_SVN} into ${LOCAL_CLONE}..."
+svnsync init file://${LOCAL_CLONE} ${REPO_SVN}
+svnsync --non-interactive sync file://${LOCAL_CLONE}
+
+echo "Dumping revisions ${START} to ${END} to ${DUMPFILE}."
+svnadmin dump --revision ${START}:${END} ${LOCAL_CLONE} > ${DUMPFILE}
+
+echo "Removing temporary local clone."
+rm -rf ${LOCAL_CLONE}
+
+echo "Re-creating local clone from ${DUMPFILE}."
+svnadmin create ${LOCAL_CLONE}
+svnadmin load ${LOCAL_CLONE} < ${DUMPFILE}
+
+echo "Deleting ${DUMPFILE}"
+rm ${DUMPFILE}
+
+echo "Now you need to reset the remote repository. Typically, a link to do this"
+echo "can be found at (${REPO}/adminSource).
+echo "Please do so and press any key to continue."
+read -n 1 -s
+
+echo "Syncing ${LOCAL_CLONE} to ${REPO_SVN}."
+svnsync init ${REPO_SVN} file://${LOCAL_CLONE}
+svnsync sync ${REPO_SVN}
+
+echo "Removing temporary local clone."
+rm -rf ${LOCAL_CLONE}
+
+echo "Removing local checkout."
+rm -rf ${CHECKOUT_DIR}
+
+echo "Finished!"