Skip to content

Commit 076f05b

Browse files
committed
don’t replace release volumes with prerelease volumes when performing a full rebuild
1 parent 4f1413b commit 076f05b

File tree

3 files changed

+31
-8
lines changed

3 files changed

+31
-8
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import Unidoc
2+
3+
extension Unidoc
4+
{
5+
@frozen public
6+
enum UnlinkStatus:Equatable, Sendable
7+
{
8+
/// The unlink request was declined, most likely because the volume is a release.
9+
case declined(Unidoc.Edition)
10+
/// The unlink request was successful.
11+
case unlinked(Unidoc.Edition)
12+
}
13+
}

Sources/UnidocDB/UnidocDatabase.swift

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -351,13 +351,19 @@ extension UnidocDatabase
351351
}
352352
}
353353

354-
@discardableResult
355354
public
356355
func unlink(volume:Symbol.Edition,
357-
with session:Mongo.Session) async throws -> Unidoc.Edition?
356+
with session:Mongo.Session) async throws -> Unidoc.UnlinkStatus?
358357
{
359-
if let volume:Unidoc.VolumeMetadata = try await self.volumes.find(named: volume,
360-
with: session)
358+
guard
359+
let volume:Unidoc.VolumeMetadata = try await self.volumes.find(named: volume,
360+
with: session)
361+
else
362+
{
363+
return nil
364+
}
365+
366+
if case nil = volume.patch
361367
{
362368
try await self.vertices.clear(range: volume.id, with: session)
363369
try await self.groups.clear(range: volume.id, with: session)
@@ -368,11 +374,11 @@ extension UnidocDatabase
368374
// have an easy way to clean up the remaining documents.
369375
try await self.volumes.delete(id: volume.id, with: session)
370376

371-
return volume.id
377+
return .unlinked(volume.id)
372378
}
373379
else
374380
{
375-
return nil
381+
return .declined(volume.id)
376382
}
377383
}
378384
}
@@ -394,7 +400,11 @@ extension UnidocDatabase
394400
}
395401
// If there is a volume generated from a prerelease with the same patch number,
396402
// we need to delete that too.
397-
try await self.unlink(volume: volume.id, with: session)
403+
if case .declined? = try await self.unlink(volume: volume.id, with: session)
404+
{
405+
// We should not clear release versions by name, only by coordinate.
406+
return nil
407+
}
398408

399409
try await self.volumes.insert(some: volume.metadata, with: session)
400410
try await self.search.insert(some: volume.search, with: session)

dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# This dockerfile creates the base image we use to distribute the Unidoc compiler.
44
# It includes a superset of the system dependencies the swiftpackageindex.com builder
55
# image supports, so we can compile any package that swiftpackageindex.com can compile.
6-
FROM swift:5.9.1
6+
FROM swift:5.9.2
77

88
RUN apt update && apt install -y \
99
sqlite3 libsqlite3-dev \

0 commit comments

Comments
 (0)