Issue 112: Missing git information for some files

This commit is contained in:
Nathan Adams 2015-11-15 22:39:13 -06:00
parent fef995b1e4
commit 7f1ef7dc40
2 changed files with 21 additions and 20 deletions

View File

@ -724,7 +724,7 @@ class IDF_Scm_Git extends IDF_Scm
$details = array(); $details = array();
for ($i=0;$i<$n;$i++) { for ($i=0;$i<$n;$i++) {
if ($tree[$i]->type == 'blob') { if ($tree[$i]->type == 'blob') {
$details[$tree[$i]->hash] = $i; $details[sha1($tree[$i]->hash . $tree[$i]->fullpath)] = $i;
} }
} }
if (!count($details)) { if (!count($details)) {
@ -778,17 +778,26 @@ class IDF_Scm_Git extends IDF_Scm
sprintf($cmd, $skip), $rawlog); sprintf($cmd, $skip), $rawlog);
while (count($rawlog) and count($blobs)) { while (count($rawlog) and count($blobs)) {
$rawlog = implode("\n", array_reverse($rawlog)); $rawlog = implode("\n", array_reverse($rawlog));
foreach ($blobs as $blob => $idx) { $newRawLog = substr($rawlog, 0, strrpos(rtrim($rawlog), "\n"));
if (preg_match('/^\:\d{6} \d{6} [0-9a-f]{40} ' $rawLogArr = explode("\n", $rawlog);
.$blob.' .*^([0-9a-f]{40})/msU', $lastLine = $rawLogArr[count($rawLogArr) - 1];
$rawlog, $matches)) { $commit = explode(" ", $lastLine)[0];
$fc = $this->getCommit($matches[1]); $fc = $this->getCommit($commit);
$res[$blob] = (object) array('hash' => $blob,
'date' => $fc->date,
'title' => $fc->title, foreach(explode("\n", $newRawLog) as $line) {
'author' => $fc->author); $sides = explode("\t", $line);
unset($blobs[$blob]); $leftSide = trim($sides[0]);
} $rightSide = trim($sides[1]);
$leftSideSplit = explode(" ", $leftSide);
$newHash = sha1($leftSideSplit[3] . $rightSide);
$res[$newHash] = (object) [
"hash" => $newHash,
'date' => $fc->date,
'title' => $fc->title,
'author' => $fc->author
];
unset($blobs[$newHash]);
} }
$rawlog = array(); $rawlog = array();
$skip += 5000; $skip += 5000;

View File

@ -161,15 +161,7 @@ class IDF_Views_Source
$in_branches = $scm->inBranches($commit, ''); $in_branches = $scm->inBranches($commit, '');
$tags = $scm->getTags(); $tags = $scm->getTags();
$in_tags = $scm->inTags($commit, ''); $in_tags = $scm->inTags($commit, '');
// Cache may work only if we filter for "default" or "tip" commits
//$cache = Pluf_Cache::factory();
$res = new Pluf_Template_ContextVars($scm->getTree($commit)); $res = new Pluf_Template_ContextVars($scm->getTree($commit));
$key = sprintf('Project:%s::IDF_Views_Source::treeBase:%s::',
$request->project->id, $commit);
/*if (null === ($res=$cache->get($key))) {
$cache->set($key, $res);
}*/
$scmConf = $request->conf->getVal('scm', 'git'); $scmConf = $request->conf->getVal('scm', 'git');
$props = $scm->getProperties($commit); $props = $scm->getProperties($commit);
$res->uasort(array('IDF_Views_Source', 'treeSort')); $res->uasort(array('IDF_Views_Source', 'treeSort'));