You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

47 lines
1.5 KiB

<?php
/**
* autodoc
*
* Permet l'extraction des informations VCS d'un répertoire
*/
namespace autodoc\Plugin\Core\Compiler\Pass\VcsInformations;
/**
* Extraction d'informations d'un dossier utilisant un Vcs
**/
class Finder
{
/**
* Retourne la description git ou svn d’un répertoire
*
* @param string $root Chemin racine le plus bas (on ne cherche pas en deça)
* @param string $dir Répertoire depuis la racine (on cherche un .git ou .svn en remontant vers root)
* @return VcsInformationsAbstract
*/
public static function find($root, $dir) {
// liste des répertoires déjà analysés
static $dirs = array();
$_dir = rtrim($root . $dir, '/') . '/';
if (!isset($dirs[$_dir])) {
if (file_exists($_dir . '.git')) {
$vcs = new Git();
$vcs->extractWithDirectory($_dir);
} elseif (file_exists($_dir . '.svn')) {
$vcs = new Svn();
$vcs->extractWithDirectory($_dir);
} elseif ($dir) {
$vcs = clone self::find($root, dirname($dir));
$vcs->setInnerPath(ltrim($vcs->getInnerPath() . '/' . basename($dir), '/'));
} else {
// on a tout épuisé jusqu’à root sans trouver de .git ou .svn
$vcs = new None();
$vcs->extractWithDirectory($_dir);
}
$dirs[$dir] = $vcs;
}
return $dirs[$dir];
}
}