# Install svn client tools. # class svn::client { package { "subversion": ensure => installed, } } # Checkout working copy. # # === Parameters # # $name: # Destination directory. # $source: # Source URL. # $revision: # Revision. Defaults to HEAD. # # === Sample usage # # svn::checkout { "/usr/local/src/graphingwiki": # source => "http://svn.graphingwiki.webfactional.com/trunk", # revision => "1959", # } # define svn::checkout($source, $revision="HEAD") { exec { "svn-co-${name}": path => "/bin:/usr/bin:/sbin:/usr/sbin", command => "svn checkout --non-interactive -r ${revision} ${source} ${name}", unless => "test -d ${name}", require => Package["subversion"], } exec { "svn-up-${name}": path => "/bin:/usr/bin:/sbin:/usr/sbin", cwd => "${name}", command => "svn update --non-interactive -r ${revision}", onlyif => $revision ? { "HEAD" => "svn status --non-interactive -q -u 2>&1 | egrep '^[[:space:]]+\\*'", default => "test $(svn info --non-interactive 2>&1 | awk '/^Revision:/ { print \$2 }') != ${revision}", }, require => Exec["svn-co-${name}"], } } # Export directory from repository. # # === Parameters # # $name: # Destination directory. # $source: # Source URL. # $revision: # Revision. Defaults to HEAD. # # === Sample usage # # svn::export { "/usr/local/src/graphingwiki": # source => "http://svn.graphingwiki.webfactional.com/trunk/graphingwiki", # revision => "1959", # } # define svn::export($source, $revision="HEAD") { exec { "svn-export-clean-${name}": path => "/bin:/usr/bin:/sbin:/usr/sbin", command => "rm -fr ${name}", onlyif => $revision ? { "HEAD" => "test -r ${name}/.svnrevision && test $(svn info --non-interactive ${source} 2>&1 | awk '/^Last Changed Rev:/ { print \$4 }') != $(cat ${name}/.svnrevision)", default => "test -r ${name}/.svnrevision && test ${revision} != $(cat ${name}/.svnrevision)", }, } exec { "svn-export-${name}": path => "/bin:/usr/bin:/sbin:/usr/sbin", command => "svn export --non-interactive -r ${revision} ${source} ${name} && svn info --non-interactive -r ${revision} ${source} 2>&1 | awk '/^Last Changed Rev:/ { print \$4 }' > ${name}/.svnrevision", creates => "${name}", require => Exec["svn-export-clean-${name}"], } }