Start on snip history manipulation

This commit is contained in:
Tim 2023-04-05 08:26:36 +02:00
parent ccab49dd3c
commit e461a7ad35
4 changed files with 59 additions and 15 deletions

13
src/Git/CustomGit.php Normal file
View File

@ -0,0 +1,13 @@
<?php
namespace App\Git;
use CzProject\GitPhp\Git;
class CustomGit extends Git
{
public function open($directory)
{
return new CustomGitRepository($directory, $this->runner);
}
}

View File

@ -0,0 +1,29 @@
<?php
namespace App\Git;
use CzProject\GitPhp\GitRepository;
use DateTime;
class CustomGitRepository extends GitRepository
{
public function getAllCommits(): array
{
$result = $this->run('log', '--pretty=%H,%cI');
if (empty($result->getOutput())) {
return [];
}
$commits = [];
foreach ($result->getOutput() as $line) {
$parts = explode(',', $line);
$commits[] = [
'hash' => $parts[0],
'date' => new DateTime($parts[1]),
];
}
return $commits;
}
}

View File

@ -2,28 +2,17 @@
namespace App\Service;
use App\Entity\Snip;
use App\Entity\User;
use CzProject\GitPhp\Git;
use App\Git\CustomGitRepository;
use CzProject\GitPhp\GitRepository;
class SnipService
{
private GitRepository $repo;
public function __construct(
Snip $snip,
string $snipBasePath,
private readonly User $user,
private readonly CustomGitRepository $repo,
private readonly User $user,
)
{
$git = new Git();
$repoPath = sprintf('%s/%s', $snipBasePath, $snip->getId());
if (!is_dir($repoPath)) {
$this->repo = $git->init($repoPath);
} else {
$this->repo = $git->open($repoPath);
}
}
private function snipExists(): bool
@ -52,4 +41,9 @@ class SnipService
}
return file_get_contents($this->getSnipPath());
}
public function getRepo(): GitRepository
{
return $this->repo;
}
}

View File

@ -3,6 +3,7 @@
namespace App\Service;
use App\Entity\Snip;
use App\Git\CustomGit;
use Symfony\Bundle\SecurityBundle\Security;
class SnipServiceFactory
@ -17,6 +18,13 @@ class SnipServiceFactory
public function create(Snip $snip): SnipService
{
return new SnipService($snip, $this->snipBasePath, $this->security->getUser());
$git = new CustomGit();
$repoPath = sprintf('%s/%s', $this->snipBasePath, $snip->getId());
if (!is_dir($repoPath)) {
$repo = $git->init($repoPath);
} else {
$repo = $git->open($repoPath);
}
return new SnipService($repo, $this->security->getUser());
}
}