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