Skip to content

Commit c9b21d2

Browse files
committed
add logic for aliasing packages discovered by the telescope that are already known to us by a different name
1 parent bc30536 commit c9b21d2

File tree

3 files changed

+43
-2
lines changed

3 files changed

+43
-2
lines changed

Sources/SwiftinitServer/Plugins/GitHubPlugin.RepoTelescope.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ extension GitHubPlugin.RepoTelescope:GitHubCrawler
4040
with: session)
4141
else
4242
{
43-
Log[.debug] = "Skipping telescope crawl: no windows left to crawl."
43+
// Log[.debug] = "Skipping telescope crawl: no windows left to crawl."
4444
return
4545
}
4646

Sources/UnidocDB/Packages/UnidocDatabase.Packages.swift

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,19 @@ extension UnidocDatabase.Packages
4040
$0[Unidoc.PackageMetadata[.repo]] = .init { $0[.exists] = true }
4141
}
4242

43+
public static
44+
let indexRepoGitHub:Mongo.CollectionIndex = .init("RepoGitHub", unique: true)
45+
{
46+
$0[ Unidoc.PackageMetadata[.repo] /
47+
Unidoc.PackageRepo[.github] /
48+
Unidoc.PackageRepo.GitHubOrigin[.id]] = (+)
49+
}
50+
where:
51+
{
52+
$0[ Unidoc.PackageMetadata[.repo] /
53+
Unidoc.PackageRepo[.github]] = .init { $0[.exists] = true }
54+
}
55+
4356
public static
4457
let indexRealm:Mongo.CollectionIndex = .init("Realm", unique: false)
4558
{
@@ -64,6 +77,7 @@ extension UnidocDatabase.Packages:Mongo.CollectionModel
6477
[
6578
Self.indexLastCrawled,
6679
Self.indexRepoCreated,
80+
Self.indexRepoGitHub,
6781
Self.indexRealm,
6882
]
6983
}
@@ -80,6 +94,23 @@ extension UnidocDatabase.Packages:Mongo.RecodableModel
8094
}
8195
extension UnidocDatabase.Packages
8296
{
97+
func findGitHub(repo id:Int32,
98+
with session:Mongo.Session) async throws -> Unidoc.PackageMetadata?
99+
{
100+
try await session.run(
101+
command: Mongo.Find<Mongo.Single<Unidoc.PackageMetadata>>.init(Self.name, limit: 1)
102+
{
103+
$0[.filter] = .init
104+
{
105+
$0[ Unidoc.PackageMetadata[.repo] /
106+
Unidoc.PackageRepo[.github] /
107+
Unidoc.PackageRepo.GitHubOrigin[.id]] = id
108+
}
109+
$0[.hint] = Self.indexRepoGitHub.id
110+
},
111+
against: self.database)
112+
}
113+
83114
public
84115
func update(metadata:Unidoc.PackageMetadata,
85116
with session:Mongo.Session) async throws -> Bool?

Sources/UnidocDB/UnidocDatabase.swift

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,10 +141,20 @@ extension UnidocDatabase
141141

142142
public
143143
func index(package:Symbol.Package,
144-
repo:consuming Unidoc.PackageRepo? = nil,
144+
repo:Unidoc.PackageRepo? = nil,
145145
mode:Unidoc.PackageIndexMode = .manual,
146146
with session:Mongo.Session) async throws -> (package:Unidoc.PackageMetadata, new:Bool)
147147
{
148+
if case .github(let origin)? = repo?.origin,
149+
let existing:Unidoc.PackageMetadata = try await self.packages.findGitHub(
150+
repo: origin.id,
151+
with: session)
152+
{
153+
// According to GitHub, this package is already known to us by a different name.
154+
try await self.alias(existing: existing.symbol, package: package, with: session)
155+
return (existing, false)
156+
}
157+
148158
// Placement involves autoincrement, which is why this cannot be done in an update.
149159
let placement:Unidoc.Autoincrement<Unidoc.PackageMetadata> = try await session.query(
150160
database: self.id,

0 commit comments

Comments
 (0)