Trying to decouple the Git communication library from the GitList application as much as possible

This commit is contained in:
Klaus Silveira
2012-07-15 02:04:23 -03:00
parent 6a0baffc9c
commit 66ec944da1
3 changed files with 30 additions and 9 deletions

View File

@@ -15,7 +15,6 @@ $config->set('git', 'repositories', rtrim($config->get('git', 'repositories'), D
$app = new Silex\Application(); $app = new Silex\Application();
$app['debug'] = $config->get('app', 'debug'); $app['debug'] = $config->get('app', 'debug');
$app['filetypes'] = $config->getSection('filetypes'); $app['filetypes'] = $config->getSection('filetypes');
$app['hidden'] = $config->get('git', 'hidden') ? $config->get('git', 'hidden') : array();
$app['cache.archives'] = __DIR__ . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'archives'; $app['cache.archives'] = __DIR__ . DIRECTORY_SEPARATOR . 'cache' . DIRECTORY_SEPARATOR . 'archives';
// Register services // Register services
@@ -26,6 +25,7 @@ $app->register(new Silex\Provider\TwigServiceProvider(), array(
$app->register(new GitList\Provider\GitServiceProvider(), array( $app->register(new GitList\Provider\GitServiceProvider(), array(
'git.client' => $config->get('git', 'client'), 'git.client' => $config->get('git', 'client'),
'git.repos' => $config->get('git', 'repositories'), 'git.repos' => $config->get('git', 'repositories'),
'git.hidden' => $config->get('git', 'hidden') ? $config->get('git', 'hidden') : array(),
)); ));
$app->register(new GitList\Provider\ViewUtilServiceProvider()); $app->register(new GitList\Provider\ViewUtilServiceProvider());
$app->register(new GitList\Provider\RepositoryUtilServiceProvider()); $app->register(new GitList\Provider\RepositoryUtilServiceProvider());

View File

@@ -6,14 +6,13 @@ use Silex\Application;
class Client class Client
{ {
protected $app;
protected $path; protected $path;
protected $hidden;
public function __construct(Application $app) public function __construct($options = null)
{ {
$this->app = $app; $this->setPath($options['path']);
$path = $this->app['git.client'] ? $this->app['git.client'] : '/usr/bin/git'; $this->setHidden($options['hidden']);
$this->setPath($path);
} }
/** /**
@@ -45,7 +44,7 @@ class Client
throw new \RuntimeException('There is no GIT repository at ' . $path); throw new \RuntimeException('There is no GIT repository at ' . $path);
} }
if (in_array($path, $this->app['hidden'])) { if (in_array($path, $this->getHidden())) {
throw new \RuntimeException('You don\'t have access to this repository'); throw new \RuntimeException('You don\'t have access to this repository');
} }
@@ -91,7 +90,7 @@ class Client
$isRepository = file_exists($file->getPathname() . '/.git/HEAD'); $isRepository = file_exists($file->getPathname() . '/.git/HEAD');
if ($isRepository || $isBare) { if ($isRepository || $isBare) {
if (in_array($file->getPathname(), $this->app['hidden'])) { if (in_array($file->getPathname(), $this->getHidden())) {
continue; continue;
} }
@@ -170,4 +169,24 @@ class Client
{ {
$this->path = $path; $this->path = $path;
} }
/**
* Get hidden repository list
*
* @return array List of repositories to hide
*/
protected function getHidden()
{
return $this->hidden;
}
/**
* Set the hidden repository list
*
* @param array $hidden List of repositories to hide
*/
protected function setHidden($hidden)
{
$this->hidden = $hidden;
}
} }

View File

@@ -17,7 +17,9 @@ class GitServiceProvider implements ServiceProviderInterface
public function register(Application $app) public function register(Application $app)
{ {
$app['git'] = function () use ($app) { $app['git'] = function () use ($app) {
return new Client($app); $options['path'] = $app['git.client'];
$options['hidden'] = $app['git.hidden'];
return new Client($options);
}; };
} }