Restructured the control of the large commits.

dev
Loic d'Anterroches 2009-01-20 16:26:36 +01:00
parent df086f7a61
commit e159185465
4 changed files with 24 additions and 23 deletions

View File

@ -287,15 +287,12 @@ class IDF_Scm_Git
} }
/** /**
* Get commit size. * Check if a commit is big.
*
* Get the sum of all the added/removed lines and the number of
* affected files.
* *
* @param string Commit ('HEAD') * @param string Commit ('HEAD')
* @return array array(added, removed, affected) * @return bool The commit is big
*/ */
public function getCommitSize($commit='HEAD') public function isCommitLarge($commit='HEAD')
{ {
$cmd = sprintf('GIT_DIR=%s git log --numstat -1 --pretty=format:%s %s', $cmd = sprintf('GIT_DIR=%s git log --numstat -1 --pretty=format:%s %s',
escapeshellarg($this->repo), escapeshellarg($this->repo),
@ -316,7 +313,7 @@ class IDF_Scm_Git
$added+=$a; $added+=$a;
$removed+=$r; $removed+=$r;
} }
return array($added, $removed, $affected); return ($affected > 100 or ($added + $removed) > 20000);
} }
/** /**

View File

@ -306,17 +306,14 @@ class IDF_Scm_Mercurial
} }
/** /**
* Get commit size. * Check if a commit is big.
*
* Get the sum of all the added/removed lines and the number of
* affected files.
* *
* @param string Commit ('HEAD') * @param string Commit ('HEAD')
* @return array array(added, removed, affected) * @return bool The commit is big
*/ */
public function getCommitSize($commit='HEAD') public function isCommitLarge($commit='HEAD')
{ {
return array(0, 0, 0); return false;
} }
/** /**

View File

@ -290,17 +290,25 @@ class IDF_Scm_Svn
} }
/** /**
* Get commit size. * Check if a commit is big.
*
* Get the sum of all the added/removed lines and the number of
* affected files.
* *
* @param string Commit ('HEAD') * @param string Commit ('HEAD')
* @return array array(added, removed, affected) * @return bool The commit is big
*/ */
public function getCommitSize($commit='HEAD') public function isCommitLarge($commit='HEAD')
{ {
return array(0, 0, 0); if (substr($this->repo, 0, 7) != 'file://') {
return false;
}
// We have a locally hosted repository, we can query it with
// svnlook
$repo = substr($this->repo, 7);
$cmd = sprintf('svnlook changed -r %s %s',
escapeshellarg($commit),
escapeshellarg($repo));
$out = IDF_Scm::shell_exec($cmd);
$lines = preg_split("/\015\012|\015|\012/", $out);
return (count($lines) > 100);
} }
private function getDiff($rev='HEAD') private function getDiff($rev='HEAD')

View File

@ -225,8 +225,7 @@ class IDF_Views_Source
} }
$title = sprintf(__('%s Commit Details'), (string) $request->project); $title = sprintf(__('%s Commit Details'), (string) $request->project);
$page_title = sprintf(__('%s Commit Details - %s'), (string) $request->project, $commit); $page_title = sprintf(__('%s Commit Details - %s'), (string) $request->project, $commit);
$size = $scm->getCommitSize($commit); $large = $scm->isCommitLarge($commit);
$large = ($size[2] > 100 or ($size[0] + $size[1]) > 20000);
$cobject = $scm->getCommit($commit, !$large); $cobject = $scm->getCommit($commit, !$large);
$rcommit = IDF_Commit::getOrAdd($cobject, $request->project); $rcommit = IDF_Commit::getOrAdd($cobject, $request->project);
$diff = new IDF_Diff($cobject->changes); $diff = new IDF_Diff($cobject->changes);