| #/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!" |