Browse Source

Retrouver les informations du VCS Git dans le compilateur de PhpDocumentor.

2.6
Matthieu Marcillaud 2 years ago
parent
commit
fed157d364
  1. 66
      src/autodoc/Plugin/Core/Compiler/Pass/VcsInformations/Git.php
  2. 8
      src/autodoc/Plugin/Core/Compiler/Pass/VcsLinkBuilder.php

66
src/autodoc/Plugin/Core/Compiler/Pass/VcsInformations/Git.php

@ -0,0 +1,66 @@
<?php
/**
* autodoc
*
* Permet l'extraction des informations SVN d'un répertoire
*/
namespace autodoc\Plugin\Core\Compiler\Pass\VcsInformations;
/**
* Extraction d'informations d'un dossier utilisant un Vcs
**/
class Git extends VcsInformationsAbstract
{
/**
* Données XML de l'extraction
* @var SimpleXMLElement|null
**/
private $xml;
/**
* {@inheritDoc}
**/
public function extractWithDirectory($dir) {
$this->clear();
// obtenir les infos SVN
exec("cd $dir ; checkout.php --read . 2> /dev/null", $output);
// la sortie doit avoir plus de 3 lignes, sinon c'est une erreur !
if ($output) {
$res = trim($output[0]);
$res = explode(' ', $res);
$infos = [];
$infos['revision'] = substr($res[2], 2); // -r{revision}
$infos['branche'] = substr($res[3], 2); // -b{branche}
$infos['url'] = $url = $res[4];
if (false !== strpos($url, '@')) {
// git@git.spip.net:path ...
list($root, $path) = explode(':', $url, 2);
} else {
// https://git.spip.net/path ...
list($protocol, $path) = explode('://', $url, 2);
list($root, $path) = explode('/', $path, 2);
$root = $protocol . '://' . $root;
}
$infos['root'] = $root;
$infos['path'] = $path;
# https://git.spip.net/SPIP/spip.git
$this->setUrlPath( $infos['url'] );
# git.spip.net
$this->setUrlRoot( $infos['root'] );
# SPIP/spip/
$this->setPath( $infos['path'] );
}
}
/**
* {@inheritDoc}
**/
public function clear() {
parent::clear();
}
}

8
src/autodoc/Plugin/Core/Compiler/Pass/VcsLinkBuilder.php

@ -168,7 +168,7 @@ class VcsLinkBuilder implements CompilerPassInterface
* Uniquement SVN actuellement
*
* @param string $dir
* @return void
* @return VcsInformationsAbstract
**/
public function getVcsInformationsFromDirectory($dir) {
// liste des répertoires déjà analysés
@ -176,7 +176,11 @@ class VcsLinkBuilder implements CompilerPassInterface
$dir = rtrim($dir, '/') . '/';
if (!isset($dirs[$dir])) {
$vcs = new VcsInformations\Svn();
if (file_exists($dir . '.git')) {
$vcs = new VcsInformations\Git();
} else {
$vcs = new VcsInformations\Svn();
}
$vcs->extractWithDirectory($dir);
$dirs[$dir] = $vcs;
}

Loading…
Cancel
Save