feature/3-git-content-database #8

Merged
ardent merged 5 commits from feature/3-git-content-database into main 2023-12-17 22:03:00 +01:00
6 changed files with 53 additions and 11 deletions
Showing only changes of commit a405578f93 - Show all commits

View File

@ -25,7 +25,7 @@ class HistoryController extends AbstractController
return $this->render('history/index.html.twig', [
'snip' => $snip,
'commits' => $this->snipServiceFactory->create($snip)->getRepo()->getAllCommits(),
'commits' => $this->snipServiceFactory->create($snip)->getHistory(),
]);
}
@ -34,7 +34,7 @@ class HistoryController extends AbstractController
{
$this->denyAccessUnlessGranted(SnipVoter::EDIT, $snip);
$this->snipServiceFactory->create($snip)->getRepo()->checkout($commit);
$this->snipServiceFactory->create($snip)->setCommit($commit);
$this->addFlash('success', 'Snip version set to ' . $commit);
return $this->redirectToRoute('snip_single', ['snip' => $snip->getId()]);
}

View File

@ -52,7 +52,7 @@ class SnipController extends AbstractController
return $this->render('snip/single.html.twig', [
'snip' => $snip,
'content' => (new Pipeline())->parse($snipService->get()),
'branch' => $snipService->getRepo()->getCurrentBranchName(),
'branch' => $snipService->getCommit(),
]);
}
@ -130,7 +130,7 @@ class SnipController extends AbstractController
$form = $this->createForm(ConfirmationType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->snipServiceFactory->create($snip)->deleteRepo();
$this->snipServiceFactory->create($snip)->delete();
$this->repository->remove($snip);
$this->addFlash('success', sprintf('Snip "%s" deleted', $snip));
return $this->redirectToRoute('snip_index');

View File

@ -0,0 +1,13 @@
<?php
namespace App\Service\SnipContent;
class SnipContentDB implements SnipContentInterface
{
public function __construct()
{
}
}

View File

@ -1,12 +1,12 @@
<?php
namespace App\Service;
namespace App\Service\SnipContent;
use App\Entity\User;
use App\Git\CustomGitRepository;
use Symfony\Component\Security\Core\User\UserInterface;
class SnipService
class SnipContentGit implements SnipContentInterface
{
private const SNIP_FILE_NAME = 'snip.txt';
private const MASTER_BRANCH_NAME = 'master';
@ -51,12 +51,22 @@ class SnipService
return file_get_contents($this->getSnipPath());
}
public function getRepo(): CustomGitRepository
public function getHistory(): array
{
return $this->repo;
return $this->repo->getAllCommits();
}
public function deleteRepo(): void
public function setCommit(string $commit): void
{
$this->repo->checkout($commit);
}
public function getCommit(): string
{
return $this->repo->getCurrentBranchName();
}
public function delete(): void
{
system("rm -rf " . escapeshellarg($this->repo->getRepositoryPath()));
}

View File

@ -0,0 +1,18 @@
<?php
namespace App\Service\SnipContent;
interface SnipContentInterface
{
public function update(string $snipContents): void;
public function get(): string;
public function getHistory(): array;
public function setCommit(string $commit): void;
public function getCommit(): string;
public function delete(): void;
}

View File

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