<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jetpack Flight Log &#187; subversion</title>
	<atom:link href="http://jetpackweb.com/blog/tags/subversion/feed/" rel="self" type="application/rss+xml" />
	<link>http://jetpackweb.com/blog</link>
	<description>Rock{et}ing the interweb</description>
	<lastBuildDate>Sun, 12 Jun 2011 17:51:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>SVN autobackup restore</title>
		<link>http://jetpackweb.com/blog/2008/11/04/svn-autobackup-restore/</link>
		<comments>http://jetpackweb.com/blog/2008/11/04/svn-autobackup-restore/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 19:02:32 +0000</pubDate>
		<dc:creator>Brian Racer</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[backups]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://blog.jetpackllc.com/?p=7</guid>
		<description><![CDATA[I have been using Doug Hellman&#8217;s useful svnautobackup script for our subversion backups. I think it is a pretty useful script, but it only focuses on backups and not restoration. During a recent server upgrade I needed to restore a large amount of repositories from our dumpfiles. I made the following shell script in php [...]]]></description>
			<content:encoded><![CDATA[<p>I have been using <a href="http://blog.doughellmann.com/">Doug Hellman&#8217;s</a> useful <a href="http://code.google.com/p/svnautobackup/" target="_blank">svnautobackup</a> script for our subversion backups. I think it is a pretty useful script, but it only focuses on backups and not restoration.</p>
<p>During a recent server upgrade I needed to restore a large amount of repositories from our dumpfiles. I made the following shell script in php that will loop through all of the backup dumps and restore them. There is a <a href="http://blogs.law.harvard.edu/hoanga/2008/07/03/svnbackup-restorerb-svnbackups-handy-companion-tool/" target="_blank">similar tool</a> that uses ruby, but it can only restore one repository and I do not know enough ruby to modify it <img src='http://jetpackweb.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<div class="wp_syntax"><div class="code"><pre class="php">#!/usr/bin/php -q
<span class="kw2">&lt;?php</span> 
<span class="co1">// edit this</span>
<span class="re0">$repo_dir</span> <span class="sy0">=</span> <span class="st_h">'/svn/'</span><span class="sy0">;</span>
<span class="re0">$backup_dir</span> <span class="sy0">=</span> <span class="st_h">'/home/backup/svn/'</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// don't edit this</span>
<span class="kw1">foreach</span><span class="br0">&#40;</span><span class="kw2">new</span> DirectoryIterator<span class="br0">&#40;</span><span class="re0">$backup_dir</span><span class="br0">&#41;</span> <span class="kw1">as</span> <span class="re0">$file</span><span class="br0">&#41;</span>
<span class="br0">&#123;</span> 
  <span class="kw1">if</span><span class="br0">&#40;</span>isDir<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="sy0">!</span><span class="re0">$file</span><span class="sy0">-&gt;</span><span class="me1">isDot</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
  <span class="br0">&#123;</span>
    <span class="co1">// get files</span>
    <span class="re0">$dumpfiles</span> <span class="sy0">=</span> <span class="kw3">glob</span><span class="br0">&#40;</span><span class="re0">$backup_dir</span><span class="sy0">.</span><span class="re0">$file</span><span class="sy0">.</span><span class="st_h">'/dumpfile*.bzip2'</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="co1">// sort them</span>
    <span class="kw3">natsort</span><span class="br0">&#40;</span><span class="re0">$dumpfiles</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
    <span class="co1">// create the repo if not exists</span>
    <span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">is_dir</span><span class="br0">&#40;</span><span class="re0">$repo_dir</span><span class="sy0">.</span><span class="re0">$file</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
      <span class="re0">$cmd</span> <span class="sy0">=</span>  <span class="st0">&quot;svnadmin create <span class="es4">{$repo_dir}</span><span class="es4">{$file}</span>&quot;</span><span class="sy0">;</span>
      <span class="kw3">system</span><span class="br0">&#40;</span><span class="kw3">escapeshellcmd</span><span class="br0">&#40;</span><span class="re0">$cmd</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
&nbsp;
    <span class="co1">// restore dump files</span>
    <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$dumpfiles</span> <span class="kw1">as</span> <span class="re0">$dumpfile</span><span class="br0">&#41;</span>
    <span class="br0">&#123;</span>
      <span class="re0">$cmd</span> <span class="sy0">=</span> <span class="st0">&quot;bzcat <span class="es4">{$dumpfile}</span> | svnadmin load <span class="es4">{$repo_dir}</span><span class="es4">{$file}</span>&quot;</span><span class="sy0">;</span>
      <span class="kw3">system</span><span class="br0">&#40;</span><span class="kw3">escapeshellcmd</span><span class="br0">&#40;</span><span class="re0">$cmd</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
  <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div>

<p>For reference, here is the script that runs nightly though cron</p>

<div class="wp_syntax"><div class="code"><pre class="bash"><span class="co0">#!/bin/bash</span>
&nbsp;
<span class="re2">files</span>=<span class="sy0">`</span><span class="kw2">ls</span> <span class="sy0">/</span><span class="kw2">svn</span><span class="sy0">`</span>
<span class="kw1">for</span> <span class="kw2">file</span> <span class="kw1">in</span> <span class="re1">$files</span>
<span class="kw1">do</span>
  <span class="kw1">if</span> <span class="br0">&#91;</span> <span class="re5">-d</span> <span class="sy0">/</span>svn<span class="sy0">/</span><span class="re1">$file</span> <span class="br0">&#93;</span>
  <span class="kw1">then</span>
    <span class="kw2">mkdir</span> <span class="re5">-p</span> <span class="re1">$file</span>
    <span class="sy0">/</span>home<span class="sy0">/</span>backup<span class="sy0">/</span>scripts<span class="sy0">/</span>svnautobackup<span class="sy0">/</span>svnbackup.sh <span class="re5">-v</span> <span class="re5">-i</span> <span class="nu0">100</span> <span class="re5">--history-file</span> <span class="sy0">/</span>home<span class="sy0">/</span>backup<span class="sy0">/</span>svn<span class="sy0">/</span><span class="re1">$file</span>-hist <span class="re5">--out-dir</span> <span class="sy0">/</span>home<span class="sy0">/</span>backup<span class="sy0">/</span>svn<span class="sy0">/</span><span class="re1">$file</span> <span class="sy0">/</span>svn<span class="sy0">/</span><span class="re1">$file</span>
  <span class="kw1">fi</span>
<span class="kw1">done</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://jetpackweb.com/blog/2008/11/04/svn-autobackup-restore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

