Skip to content

Commit 6a4686d

Browse files
committed
Track next metadata revision on the version entity
1 parent 6d18168 commit 6a4686d

6 files changed

Lines changed: 52 additions & 40 deletions

File tree

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace DoctrineMigrations;
6+
7+
use Doctrine\DBAL\Schema\Schema;
8+
use Doctrine\Migrations\AbstractMigration;
9+
10+
final class Version20260513125839 extends AbstractMigration
11+
{
12+
public function getDescription(): string
13+
{
14+
return 'Add next_revision counter to version table';
15+
}
16+
17+
public function up(Schema $schema): void
18+
{
19+
$this->addSql(<<<'SQL'
20+
ALTER TABLE version ADD next_revision INT DEFAULT NULL
21+
SQL);
22+
$this->addSql(<<<'SQL'
23+
UPDATE version SET next_revision = COALESCE((SELECT MAX(revision) FROM metadata WHERE metadata.version_id = version.id), 0) + 1
24+
SQL);
25+
$this->addSql(<<<'SQL'
26+
ALTER TABLE version ALTER next_revision SET NOT NULL
27+
SQL);
28+
}
29+
30+
public function down(Schema $schema): void
31+
{
32+
$this->addSql(<<<'SQL'
33+
ALTER TABLE version DROP next_revision
34+
SQL);
35+
}
36+
}

src/Doctrine/Entity/Version.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ class Version extends TrackedEntity implements \Stringable
2929
#[ORM\Column]
3030
private bool $defaultBranch = false;
3131

32+
#[ORM\Column]
33+
private int $nextRevision = 1;
34+
3235
#[ORM\Column(nullable: true)]
3336
private ?\DateTimeImmutable $updatedAt = null;
3437

@@ -114,6 +117,17 @@ public function setDefaultBranch(bool $defaultBranch): void
114117
$this->defaultBranch = $defaultBranch;
115118
}
116119

120+
public function getNextRevision(bool $increment = false): int
121+
{
122+
$nextRevision = $this->nextRevision;
123+
124+
if ($increment) {
125+
++$this->nextRevision;
126+
}
127+
128+
return $nextRevision;
129+
}
130+
117131
public function getUpdatedAt(): ?\DateTimeImmutable
118132
{
119133
return $this->updatedAt;

src/Doctrine/EventListener/MetadataListener.php

Lines changed: 0 additions & 22 deletions
This file was deleted.

src/Doctrine/Repository/MetadataRepository.php

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -122,22 +122,4 @@ public function fetchMetadataCollections(Metadata ...$metadata): void
122122
->getQuery()
123123
->getResult();
124124
}
125-
126-
public function getNextRevision(Metadata $metadata): int
127-
{
128-
$version = $metadata->getVersion();
129-
130-
if (null === $version->getId()) {
131-
return 1;
132-
}
133-
134-
$lastRevision = $this->createQueryBuilder('metadata')
135-
->select('MAX(metadata.revision)')
136-
->where('metadata.version = :version')
137-
->setParameter('version', $metadata->getVersion())
138-
->getQuery()
139-
->getSingleScalarResult();
140-
141-
return (int) $lastRevision + 1;
142-
}
143125
}

src/Package/PackageMetadataResolver.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ private function updateVersion(Version $version, CompletePackageInterface $data,
235235
$metadata = $this->createMetadata($version, $data, $driver);
236236

237237
if (null === $currentMetadata || $this->hasMetadataChanged($currentMetadata, $metadata)) {
238+
$metadata->setRevision($version->getNextRevision(increment: true));
238239
$version->setCurrentMetadata($metadata);
239240

240241
$this->entityManager->persist($metadata);

tests/Helper/MockEntityFactoryTrait.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ protected function createMockMetadata(Version $version): Metadata
1717
$package = $version->getPackage();
1818

1919
$metadata = new Metadata($version);
20+
$metadata->setRevision($version->getNextRevision());
2021
$metadata->setPackageName($package->getName());
2122
$metadata->setVersionName($version->getName());
2223
$metadata->setNormalizedVersionName($version->getNormalizedName());

0 commit comments

Comments
 (0)