Added the display of the repository size in the source subtab of a project.

This commit is contained in:
Loic d'Anterroches 2009-06-19 17:31:45 +02:00
parent e235242ea6
commit 25e296fbb6
7 changed files with 62 additions and 1 deletions

View File

@ -349,6 +349,24 @@ class IDF_Project extends Pluf_Model
return new Pluf_Template_ContextVars($tags);
}
/**
* Get the repository size.
*
* @param bool Force to skip the cache (false)
* @return int Size in byte or -1 if not available
*/
public function getRepositorySize($force=false)
{
$last_eval = $this->getConf()->getVal('repository_size_check_date', 0);
if (!$force and $last_eval > time()-86400) {
return $this->getConf()->getVal('repository_size', -1);
}
$scm = IDF_Scm::get($this);
$this->getConf()->setVal('repository_size', $scm->getRepositorySize());
$this->getConf()->setVal('repository_size_check_date', time());
return $this->getConf()->getVal('repository_size', -1);
}
/**
* Get the access url to the repository.
*

View File

@ -87,6 +87,16 @@ class IDF_Scm
return call_user_func(array($scms[$scm], 'factory'), $project);
}
/**
* Return the size of the repository in bytes.
*
* @return int Size in byte, -1 if the size cannot be evaluated.
*/
public function getRepositorySize()
{
return -1;
}
/**
* Returns the URL of the git daemon.
*

View File

@ -41,6 +41,14 @@ class IDF_Scm_Git extends IDF_Scm
$this->project = $project;
}
public function getRepositorySize()
{
$cmd = Pluf::f('idf_exec_cmd_prefix', '').'du -bs '
.escapeshellarg($this->repo);
$out = split(' ', shell_exec($cmd), 2);
return (int) $out[0];
}
public function isAvailable()
{
try {

View File

@ -33,6 +33,14 @@ class IDF_Scm_Mercurial extends IDF_Scm
$this->project = $project;
}
public function getRepositorySize()
{
$cmd = Pluf::f('idf_exec_cmd_prefix', '').'du -bs '
.escapeshellarg($this->repo);
$out = split(' ', shell_exec($cmd), 2);
return (int) $out[0];
}
public static function factory($project)
{
$rep = sprintf(Pluf::f('mercurial_repositories'), $project->shortname);

View File

@ -51,6 +51,17 @@ class IDF_Scm_Svn extends IDF_Scm
return true;
}
public function getRepositorySize()
{
if (strpos($this->repo, 'file://') !== 0) {
return -1;
}
$cmd = Pluf::f('idf_exec_cmd_prefix', '').'du -bs '
.escapeshellarg(substr($this->repo, 7));
$out = split(' ', shell_exec($cmd), 2);
return (int) $out[0];
}
/**
* Given the string describing the author from the log find the
* author in the database.

View File

@ -510,6 +510,7 @@ class IDF_Views_Project
'remote_svn' => $remote_svn,
'repository_access' => $prj->getRemoteAccessUrl(),
'repository_type' => $repository_type,
'repository_size' => $prj->getRepositorySize(),
'page_title' => $title,
'form' => $form,
),

View File

@ -20,7 +20,12 @@
<th>{trans 'Repository access:'}</th>
<td>{$repository_access}
</td>
</tr>{if $remote_svn}
</tr>{if $repository_size != -1}
<tr>
<th>{trans 'Repository size:'}</th>
<td>{$repository_size|size}
</td>
</tr>{/if}{if $remote_svn}
<tr>
<th>{$form.f.svn_username.labelTag}:</th>
<td>{if $form.f.svn_username.errors}{$form.f.svn_username.fieldErrors}{/if}