(PECL svn:0.1-0.2)
svn_log — Récupère le message d'historisation d'une URL du dépôt
svn_log() récupère l'historique complète d'un élément à l'URL
repos_url
, ou l'historique d'une version spécifique
si revision_no
est défini. Cette fonction est équivalent
à la commande svn log --verbose -r $revision_no $repos_url
.
Pour les dépôts dont l'historique est important, la sortie peut
être énorme (un tableau dont chaque élément représente une version).
Cette fonction ne supporte pas le drapeau
--limit NUM
, ni un intervalle de versions
(revision_no
doit être un entier).
URL du dépôt de l'élément dont on doit récupérer l'historique.
Numéro de version de l'historisation à récupérer. Utilisez la constante SVN_REVISON_HEAD pour récupérer l'historisation de la version la plus récente.
En cas de succès, cette fonction retourne un tableau de fichiers au format :
[0] => Tableau, ordonné du numéro de version le plus grand, au plus petit ( [rev] => numéro de version [author] => nom de l'auteur [msg] => message d'historisation [date] => date, au format ISO 8601, i.e. date('c') [paths] => Tableau, décrivant les fichiers modifiés ( [0] => Array ( [action] => lettre, spécifiant la modification [path] => chemin absolu du dépôt vers le fichier modifié ) [1] => ... ) ) [1] => ...
Note: La sortie sera toujours un tableau indexé numériquement de tableaux, même s'il n'y en a aucun, ou seulement un seul message d'historisation.
La valeur de action est un sous-jeu de » la sortie de statut pour la première colonne, où les valeurs possibles sont :
Lettre | Description |
---|---|
M | L'élément a été modifié |
A | L'élément a été ajouté |
D | L'élément a été effacé |
R | L'élément a été remplacé |
Si aucune modification n'a été effectué à l'élément, un tableau vide sera retourné.
Cette fonction est EXPERIMENTALE. Cela signifie que le comportement de cette fonction, son nom et, concrètement, TOUT ce qui est documenté ici peut changer dans un futur proche, SANS PREAVIS ! Soyez-en conscient, et utilisez cette fonction à vos risques et périls.
Exemple #1 Exemple avec svn_log()
<?php
print_r( svn_log('http://www.example.com/', 23) );
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
Array ( [0] => Array ( [rev] => 23 [author] => 'joe' [msg] => 'Add cheese and salami to our sandwich.' [date] => '2007-04-06T16:00:27-04:00' [paths] => Array ( [0] => Array ( [action] => 'M' [path] => '/sandwich.txt' ) ) ) )
Exemple #2 Simulation de --limit
avec svn
et svn_log()
Cette fonction simule le comportement de --limit
en utilisant l'exécutable SVN pour retourner la liste des versions.
Note: Cette fonction effectue un total de limit + 1 requêtes : la première requête pour spécifier les versions requises, et ensuite, chacune pour récupérer le message de journalisation de l'élément pour cette requête.
<?php
/**
* Recupération les dernières $limit entrées de la journalisation
* @param $repos_url URL du dépôt de l'élément
* @param $limit Nombre limite de messages
*/
function svn_log_limit($repos_url, $limit) {
$limit = (int) $limit;
if ($limit <= 0) return array();
// Drapeau -q utilisé pour prévenir le serveur de l'envoi des messages du journal
$output = shell_exec("svn log -q --limit $limit $repos_url");
preg_match_all('/^r(\d+) /m', $output, $matches);
$ret = array();
foreach ($matches[1] as $rev) {
$log = svn_log($repos_url, (int) $rev);
$ret[] = $log[0]; // Message du journal n'est que d'un seul élément
}
return $ret;
}
?>