Le code permet de faire des mises en production avec les dossiers, tout en permettant un rollback rapide...
Beaucoup d'évolution sont possibles suivant l'imagination

// Dossier ou seront deposees les export/backup
$baseLocale = '';
/**
* Informations de connexion au serveur FTP
*/
$hoteFTP = '';
$loginFTP = '';
$passFTP = '';
// Dossier dans lesquel se trouve les fichiers
$baseDossierFTP = '';
/**
* Definition des dossier de base (mep pour la mise en production, backup pour effectuer le backup)
*/
$baseMep = $baseLocale.'mep-'.$revision;
$baseBackup = $baseLocale.'backup-'.$revision;
// URL du serveur de subversion
// exemple : svn://monsubversion/
$urlBaseSVN = '';
// Nom du projet ex : projet1
$projet = '';
// Numero de la revision correspond au fichier a recuperer
$revision = 1;
// exemple : svn://monsubversion/projet1/
$svn = $urlBaseSVN.$projet;
$cmd = "svn diff --summarize -r ".$revision." ".$svn;
exec($cmd, $tabRetour);
/**
* Recuperation des fichiers du SVN
*/
mkdir($baseMep);
chdir($baseMep);
foreach($tabRetour as $unFichier) {
$newInfo = str_replace(' ', '',$unFichier);
$type = substr($newInfo, 0, 1);
$nomFichier = substr($newInfo, 1);
if ($type == 'M' || $type == 'A') {
if (ereg('(\.)', $nomFichier)) {
$tab = explode($projet, $nomFichier);
$folder = $tab[1];
$tabFolder = explode('/', $folder);
array_pop($tabFolder);
foreach ($tabFolder as $sousDossier) {
if (!is_dir($sousDossier)) {
mkdir($sousDossier);
}
chdir($sousDossier);
}
$cmd = "svn export ".$nomFichier;
exec($cmd);
echo '(GETSVN) Export fichier '.$folder."\n";
chdir($baseMep);
$tabFichier [] = $folder;
}
}
}
/**
* Creation du backup - recuperation des fichiers sur le FTP
*/
mkdir($baseBackup);
chdir($baseBackup);
$stream = ftp_connect($hoteFTP);
ftp_login($stream, $loginFTP,$passFTP);
foreach($tabFichier as $fichier) {
$tabFolder = explode('/', $fichier);
array_pop($tabFolder);
foreach ($tabFolder as $sousDossier) {
if (!is_dir($sousDossier)) {
mkdir($sousDossier);
}
chdir($sousDossier);
}
chdir($baseBackup);
ftp_get($stream, $fichier, $baseDossierFTP.$fichier,FTP_BINARY);
echo '(BACKUP) Recuperation fichier '.$fichier."\n";
}
/**
* Envoi des fichiers pour Mise en production
*/
chdir($baseMep);
foreach($tabFichier as $fichier) {
ftp_put($stream, $baseDossierFTP.$fichier, $fichier, FTP_BINARY);
echo '(MEP) Envoi fichier '.$fichier."\n";
}
ftp_close($stream);