1
0

Update extgitgraph to f4853a2f

This commit is contained in:
Mike Schwörer 2021-06-13 07:07:29 +02:00
parent 990e803192
commit bd5d13003b
Signed by: Mikescher
GPG Key ID: D3C7172E0A70F8CF
3 changed files with 52 additions and 7 deletions

View File

@ -461,4 +461,29 @@ class EGGDatabase
foreach ($rows as $row) $r []= $row['d']; foreach ($rows as $row) $r []= $row['d'];
return $r; return $r;
} }
/**
* @return Commit[]
*/
public function getCommits(Branch $branch): array
{
$rows = $this->sql_query_assoc("SELECT metadata.*, commits.id AS commitid FROM commits LEFT JOIN metadata WHERE commits.branch_id = :bid", [[":bid", $branch->ID, PDO::PARAM_INT]]);
$r = [];
foreach ($rows as $row)
{
$c = new Commit();
$c->ID = $row['commitid'];
$c->Branch = $branch;
$c->Hash = $row['hash'];
$c->AuthorName = $row['author_name'];
$c->AuthorEmail = $row['author_email'];
$c->CommitterName = $row['committer_name'];
$c->CommitterEmail = $row['committer_email'];
$c->Message = $row['message'];
$c->Date = $row['date'];
$c->Parents = $row['parent_commits'];
$r []= $c;
}
return $r;
}
} }

View File

@ -233,9 +233,10 @@ abstract class StandardGitConnection implements IRemoteSource
if ($branch->HeadFromAPI === null) return []; if ($branch->HeadFromAPI === null) return [];
$target = $branch->Head; $target = $branch->Head;
$targetFound = false;
$next_sha = [ $branch->HeadFromAPI ]; $next_sha = [ $branch->HeadFromAPI ];
$visited = [ ]; $visited = array_map(function(Commit $m):string{return $m->Hash;}, $db->getCommits($branch));
$json = $this->queryCommits($repo->Name, $branch->Name, $next_sha[0]); $json = $this->queryCommits($repo->Name, $branch->Name, $next_sha[0]);
@ -260,19 +261,25 @@ abstract class StandardGitConnection implements IRemoteSource
if (in_array($sha, $visited)) continue; if (in_array($sha, $visited)) continue;
$visited []= $sha; $visited []= $sha;
if ($sha === $target && count($next_sha) === 0) if ($sha === $target) $targetFound = true;
if ($targetFound && count($next_sha) === 0)
{ {
if (count($newcommits) === 0) if (count($newcommits) === 0)
{ {
$this->logger->proclog("Found no new commits for: [" . $this->name . "|" . $repo->Name . "|" . $branch->Name . "] (HEAD at {" . substr($branch->HeadFromAPI, 0, 8) . "})"); $this->logger->proclog("Found no new commits for: [" . $this->name . "|" . $repo->Name . "|" . $branch->Name . "] (HEAD at {" . substr($branch->HeadFromAPI, 0, 8) . "})");
return []; return [];
} }
else
{
$this->logger->proclog("Added " . count($newcommits) . " new commits for: [" . $this->name . "|" . $repo->Name . "|" . $branch->Name . "] (HEAD moved from {" . substr($branch->Head, 0, 8) . "} to {" . substr($branch->HeadFromAPI, 0, 8) . "})");
$db->insertNewCommits($this->name, $repo, $branch, $newcommits); $db->insertNewCommits($this->name, $repo, $branch, $newcommits);
$db->setBranchHead($branch, $branch->HeadFromAPI); $db->setBranchHead($branch, $branch->HeadFromAPI);
return $newcommits; return $newcommits;
} }
}
$commit = new Commit(); $commit = new Commit();
$commit->Branch = $branch; $commit->Branch = $branch;
@ -299,7 +306,7 @@ abstract class StandardGitConnection implements IRemoteSource
$json = $this->queryCommits($repo->Name, $branch->Name, $next_sha[0]); $json = $this->queryCommits($repo->Name, $branch->Name, $next_sha[0]);
} }
$this->logger->proclog("HEAD pointer in Branch: [" . $this->name . "|" . $repo->Name . "|" . $branch->Name . "] no longer matches. Re-query all " . count($newcommits) . " commits (old HEAD := {".substr($branch->Head, 0, 8)."})"); $this->logger->proclog("HEAD pointer in Branch: [" . $this->name . "|" . $repo->Name . "|" . $branch->Name . "] no longer matches. Re-query all " . count($newcommits) . " commits (old HEAD := {".substr($branch->Head, 0, 8)."}, missing: [" . join(", ", array_map(function($p){return substr($p, 0, 8);}, $next_sha)) . "] )");
$db->deleteAllCommits($branch); $db->deleteAllCommits($branch);

View File

@ -56,4 +56,17 @@ CREATE VIEW alldata AS
FROM commits FROM commits
LEFT JOIN metadata ON commits.hash = metadata.hash LEFT JOIN metadata ON commits.hash = metadata.hash
LEFT JOIN branches ON commits.branch_id = branches.id LEFT JOIN branches ON commits.branch_id = branches.id
LEFT JOIN repositories ON branches.repo_id = repositories.id LEFT JOIN repositories ON branches.repo_id = repositories.id;
/*----SPLIT----*/
CREATE VIEW allbranches AS
SELECT
repositories.source, repositories.name AS repository,
branches.name AS branch,
repositories.url,
repositories.last_update, repositories.last_change,
(SELECT COUNT(*) FROM commits WHERE branch_id = branches.id) AS commit_count
FROM branches
LEFT JOIN repositories ON branches.repo_id = repositories.id;