Manage a Subversion Working Copy
More details to come. For now, the recipe:
#
# Example usage: (https://reductivelabs.com/svn/vault into /var/svn/vault.cache)
# svnworkdir { vault:
# repository => "https://reductivelabs.com/svn/vault",
# local_container => "/var/svn",
# local_name => "vault.cache"
# svn_username => "puppet",
# svn_password => "mypassword"
# }
#
# Note, make sure you manage file["$local_container"] somewhere else, as it's required.
define svnworkdir($repository, $local_container, $local_name = false, $svn_username = false, $svn_password = false)
{
$owner_real = $owner ? { false => 0, default => $owner }
$group_real = $group ? { false => 0, default => $group }
$local_name_real = $local_name ? { false => $name, default => $local_name }
Exec { path => "/usr/bin:/bin:/opt/local/bin:/usr/local/bin" }
$retrieve_command = $svn_username ? {
false => "svn checkout --non-interactive '$repository' '$local_name_real'",
default => "svn checkout --non-interactive --username='$svn_username' --password='$svn_password' '$repository' '$local_name_real'"
}
exec { "svn-co-$name":
command => $retrieve_command,
cwd => $local_container,
require => File["$local_container"],
creates => "$local_container/$local_name_real/.svn"
}
exec { "svn-up-$name":
command => "svn update --non-interactive --username='$svn_username' --password='$svn_password' '$local_name_real'",
cwd => $local_container,
require => Exec["svn-co-$name"],
onlyif => "svn status -u --non-interactive --username='$svn_username' --password='$svn_password' '$local_name_real' | grep '\*'"
}
}