Skip to content

Commit a4ebd75

Browse files
authored
Merge pull request #346 from tayloraswift/package-metadata-settings
Package metadata settings
2 parents 4203b5e + fea873c commit a4ebd75

32 files changed

+488
-243
lines changed

Package.resolved

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"originHash" : "f3b7bec960dd1c198a978266f70c0c6b6a923dd592188dcfaafb4a837d75e282",
2+
"originHash" : "9db681321dbead3e4e8b376a25cec9c94acb432f4b4e11fe4f453acf75469f2e",
33
"pins" : [
44
{
55
"identity" : "indexstore-db",
@@ -96,8 +96,8 @@
9696
"kind" : "remoteSourceControl",
9797
"location" : "https://github.com/tayloraswift/swift-mongodb",
9898
"state" : {
99-
"revision" : "78f6fa4f98e3dfb0c8054fa97b30360a185439c0",
100-
"version" : "0.23.2"
99+
"revision" : "2cd1f297c2415f741c86aa2f7e3aab012d529787",
100+
"version" : "0.23.3"
101101
}
102102
},
103103
{

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ let package:Package = .init(
9292
.package(url: "https://github.com/tayloraswift/swift-hash", .upToNextMinor(
9393
from: "0.6.0")),
9494
.package(url: "https://github.com/tayloraswift/swift-mongodb", .upToNextMinor(
95-
from: "0.23.1")),
95+
from: "0.23.3")),
9696
.package(url: "https://github.com/tayloraswift/swift-unixtime", .upToNextMinor(
9797
from: "0.1.5")),
9898

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import URI
2+
3+
extension URI.Path
4+
{
5+
public
6+
protocol ComponentConvertible:LosslessStringConvertible
7+
{
8+
}
9+
}
10+
extension URI.Path.ComponentConvertible where Self:RawRepresentable<String>
11+
{
12+
@inlinable public
13+
init?(_ description:String) { self.init(rawValue: description) }
14+
15+
@inlinable public
16+
var description:String { self.rawValue }
17+
}

Sources/URI/URI.Path.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,12 @@ extension URI.Path
156156
self.append(.push(component))
157157
}
158158

159+
@inlinable public mutating
160+
func append(_ component:some URI.Path.ComponentConvertible)
161+
{
162+
self.append(.push("\(component)"))
163+
}
164+
159165
@inlinable public mutating
160166
func normalize()
161167
{
Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
import URI
2+
13
extension Unidoc
24
{
35
@frozen public
4-
enum LinkerRoute:String
6+
enum LinkerRoute:String, URI.Path.ComponentConvertible
57
{
68
case uplink
79
case unlink
@@ -11,13 +13,3 @@ extension Unidoc
1113
case vintage
1214
}
1315
}
14-
extension Unidoc.LinkerRoute:CustomStringConvertible
15-
{
16-
@inlinable public
17-
var description:String { self.rawValue }
18-
}
19-
extension Unidoc.LinkerRoute:LosslessStringConvertible
20-
{
21-
@inlinable public
22-
init?(_ description:String) { self.init(rawValue: description) }
23-
}

Sources/UnidocDB/Packages/Unidoc.DB.Packages.swift

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -98,36 +98,40 @@ extension Unidoc.DB.Packages:Mongo.RecodableModel
9898
}
9999
extension Unidoc.DB.Packages
100100
{
101-
private
102-
func reset<Value>(field:Element.CodingKey,
103-
of package:Element.ID,
104-
to value:Value?) async throws -> Element? where Value:BSONEncodable
101+
public
102+
func set(media:Unidoc.PackageMedia?,
103+
of package:Unidoc.Package) async throws -> Unidoc.PackageMetadata?
105104
{
106105
try await self.modify(existing: package, returning: .new)
107106
{
108-
if let value:Value
107+
if let media:Unidoc.PackageMedia
109108
{
110-
$0[.set] { $0[Element[field]] = value }
109+
$0[.set] { $0[Element[.media]] = media }
111110
}
112111
else
113112
{
114-
$0[.unset] { $0[Element[field]] = () }
113+
$0[.unset] { $0[Element[.media]] = true }
115114
}
116115
}
117116
}
118117

119118
public
120-
func reset(media:Unidoc.PackageMedia?,
121-
of package:Unidoc.Package) async throws -> Unidoc.PackageMetadata?
122-
{
123-
try await self.reset(field: .media, of: package, to: media)
124-
}
125-
126-
public
127-
func reset(platformPreference triple:Triple?,
119+
func set(build:Unidoc.BuildTemplate,
128120
of package:Unidoc.Package) async throws -> Unidoc.PackageMetadata?
129121
{
130-
try await self.reset(field: .platformPreference, of: package, to: triple)
122+
try await self.modify(existing: package, returning: .new)
123+
{
124+
$0[.set]
125+
{
126+
$0[Element[.build_toolchain]] = build.toolchain
127+
$0[Element[.build_platform]] = build.platform
128+
}
129+
$0[.unset]
130+
{
131+
$0[Element[.build_toolchain]] = build.toolchain == nil
132+
$0[Element[.build_platform]] = build.platform == nil
133+
}
134+
}
131135
}
132136
}
133137
extension Unidoc.DB.Packages
@@ -171,7 +175,7 @@ extension Unidoc.DB.Packages
171175
}
172176
else
173177
{
174-
$0[.unset] { $0[Element[.repo]] = () }
178+
$0[.unset] { $0[Element[.repo]] = true }
175179
}
176180
}
177181
}
@@ -184,17 +188,11 @@ extension Unidoc.DB.Packages
184188
{
185189
if hidden
186190
{
187-
$0[.set]
188-
{
189-
$0[Unidoc.PackageMetadata[.hidden]] = true
190-
}
191+
$0[.set] { $0[Unidoc.PackageMetadata[.hidden]] = true }
191192
}
192193
else
193194
{
194-
$0[.unset]
195-
{
196-
$0[Unidoc.PackageMetadata[.hidden]] = ()
197-
}
195+
$0[.unset] { $0[Unidoc.PackageMetadata[.hidden]] = true }
198196
}
199197
}
200198
}
@@ -227,7 +225,7 @@ extension Unidoc.DB.Packages
227225
{
228226
$0[.unset]
229227
{
230-
$0[Unidoc.PackageMetadata[.repoWebhook]] = ()
228+
$0[Unidoc.PackageMetadata[.repoWebhook]] = true
231229
}
232230
}
233231
}

Sources/UnidocDB/Vertices/Unidoc.DB.Groups.AlignLatest.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ extension Unidoc.DB.Groups.AlignLatest:Mongo.UpdateQuery
7070
}
7171
$0[.u]
7272
{
73-
$0[.unset] { $0[Unidoc.AnyGroup[.realm]] = () }
73+
$0[.unset] { $0[Unidoc.AnyGroup[.realm]] = true }
7474
}
7575
}
7676
}

Sources/UnidocDB/Vertices/Unidoc.DB.Groups.ClearLatest.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ extension Unidoc.DB.Groups.ClearLatest:Mongo.UpdateQuery
4040
}
4141
$0[.u]
4242
{
43-
$0[.unset] { $0[Unidoc.AnyGroup[.realm]] = () }
43+
$0[.unset] { $0[Unidoc.AnyGroup[.realm]] = true }
4444
}
4545
}
4646
}

Sources/UnidocDB/Volumes/Unidoc.DB.Volumes.AlignLatest.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ extension Unidoc.DB.Volumes.AlignLatest:Mongo.UpdateQuery
7070
}
7171
$0[.u]
7272
{
73-
$0[.unset] { $0[Unidoc.VolumeMetadata[.latest]] = () }
73+
$0[.unset] { $0[Unidoc.VolumeMetadata[.latest]] = true }
7474
}
7575
}
7676
}

Sources/UnidocDB/Volumes/Unidoc.DB.Volumes.AlignRealm.swift

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,17 +58,11 @@ extension Unidoc.DB.Volumes.AlignRealm:Mongo.UpdateQuery
5858
{
5959
if let realm:Unidoc.Realm = self.realm
6060
{
61-
$0[.set]
62-
{
63-
$0[Unidoc.VolumeMetadata[.realm]] = realm
64-
}
61+
$0[.set] { $0[Unidoc.VolumeMetadata[.realm]] = realm }
6562
}
6663
else
6764
{
68-
$0[.unset]
69-
{
70-
$0[Unidoc.VolumeMetadata[.realm]] = ()
71-
}
65+
$0[.unset] { $0[Unidoc.VolumeMetadata[.realm]] = true }
7266
}
7367
}
7468
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import SemanticVersions
2+
import SymbolGraphs
3+
4+
extension Unidoc
5+
{
6+
@frozen public
7+
struct BuildTemplate:Equatable, Sendable
8+
{
9+
public
10+
var toolchain:PatchVersion?
11+
public
12+
var platform:Triple?
13+
14+
@inlinable public
15+
init()
16+
{
17+
}
18+
19+
@inlinable public
20+
init(toolchain:PatchVersion?, platform:Triple?)
21+
{
22+
self.toolchain = toolchain
23+
self.platform = platform
24+
}
25+
}
26+
}

Sources/UnidocRecords/Packages/Unidoc.PackageMetadata.swift

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ extension Unidoc
3030
/// documentation locally.
3131
public
3232
var media:PackageMedia?
33+
/// Default build settings for this package.
34+
public
35+
var build:BuildTemplate
3336
/// The current realm this package belongs to. A package can change realms, or lack one
3437
/// entirely.
3538
public
@@ -38,9 +41,6 @@ extension Unidoc
3841
public
3942
var realmAligning:Bool
4043

41-
public
42-
var platformPreference:Triple?
43-
4444
public
4545
var editors:[Account]
4646

@@ -59,9 +59,9 @@ extension Unidoc
5959
symbol:Symbol.Package,
6060
hidden:Bool = false,
6161
media:PackageMedia? = nil,
62+
build:BuildTemplate = .init(),
6263
realm:Unidoc.Realm? = nil,
6364
realmAligning:Bool = false,
64-
platformPreference:Triple? = nil,
6565
editors:[Account] = [],
6666
repo:PackageRepo? = nil,
6767
repoWebhook:String? = nil)
@@ -70,9 +70,9 @@ extension Unidoc
7070
self.symbol = symbol
7171
self.hidden = hidden
7272
self.media = media
73+
self.build = build
7374
self.realm = realm
7475
self.realmAligning = realmAligning
75-
self.platformPreference = platformPreference
7676
self.editors = editors
7777
self.repo = repo
7878
self.repoWebhook = repoWebhook
@@ -100,14 +100,16 @@ extension Unidoc.PackageMetadata
100100
case media = "M"
101101
case realm = "r"
102102
case realmAligning = "A"
103-
case platformPreference = "O"
103+
104+
case build_toolchain = "S"
105+
case build_platform = "O"
106+
104107
case editors = "u"
105108
case repo = "G"
106109
case repoWebhook = "W"
107110

108111
@available(*, unavailable)
109112
case repoLegacy = "R"
110-
111113
@available(*, unavailable)
112114
case crawled = "C"
113115
@available(*, unavailable)
@@ -122,10 +124,13 @@ extension Unidoc.PackageMetadata:BSONDocumentEncodable
122124
bson[.id] = self.id
123125
bson[.symbol] = self.symbol
124126
bson[.hidden] = self.hidden ? true : nil
127+
125128
bson[.media] = self.media
129+
bson[.build_toolchain] = self.build.toolchain
130+
bson[.build_platform] = self.build.platform
131+
126132
bson[.realm] = self.realm
127133
bson[.realmAligning] = self.realmAligning ? true : nil
128-
bson[.platformPreference] = self.platformPreference
129134
bson[.editors] = self.editors.isEmpty ? nil : self.editors
130135
bson[.repo] = self.repo
131136
bson[.repoWebhook] = self.repoWebhook
@@ -140,9 +145,11 @@ extension Unidoc.PackageMetadata:BSONDocumentDecodable
140145
symbol: try bson[.symbol].decode(),
141146
hidden: try bson[.hidden]?.decode() ?? false,
142147
media: try bson[.media]?.decode(),
148+
build: .init(
149+
toolchain: try bson[.build_toolchain]?.decode(),
150+
platform: try bson[.build_platform]?.decode()),
143151
realm: try bson[.realm]?.decode(),
144152
realmAligning: try bson[.realmAligning]?.decode() ?? false,
145-
platformPreference: try bson[.platformPreference]?.decode(),
146153
editors: try bson[.editors]?.decode() ?? [],
147154
repo: try bson[.repo]?.decode(),
148155
repoWebhook: try bson[.repoWebhook]?.decode())

Sources/UnidocRender/Unidoc.ServerRoot.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import URI
33
extension Unidoc
44
{
55
@frozen public
6-
enum ServerRoot:String, Sendable
6+
enum ServerRoot:String, URI.Path.ComponentConvertible
77
{
88
case account
99
case admin

Sources/UnidocServer/Administration/Unidoc._RecodePage.Target.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import URI
44

55
extension Unidoc._RecodePage
66
{
7-
enum Target:String, CaseIterable
7+
enum Target:String, CaseIterable, URI.Path.ComponentConvertible
88
{
99
case packageDependencies = "package-dependencies"
1010
case packages

Sources/UnidocServer/Caching/Unidoc.Asset (ext).swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import UnidocAssets
22
import UnidocAssets_System
3+
import URI
34

5+
extension Unidoc.Asset:URI.Path.ComponentConvertible
6+
{
7+
}
48
extension Unidoc.Asset:Unidoc.CacheKey
59
{
610
/// Indicates if the asset will be reloaded from disk when hot-reloading is enabled.

0 commit comments

Comments
 (0)