Skip to content

Commit 8687b7b

Browse files
l4lJoshua Nelson
authored and
Joshua Nelson
committed
Favor registry for queued crates
1 parent 686cfb3 commit 8687b7b

File tree

6 files changed

+61
-24
lines changed

6 files changed

+61
-24
lines changed

src/bin/cratesfyi.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -170,9 +170,12 @@ impl QueueSubcommand {
170170
crate_name,
171171
crate_version,
172172
build_priority,
173-
} => ctx
174-
.build_queue()?
175-
.add_crate(&crate_name, &crate_version, build_priority)?,
173+
} => ctx.build_queue()?.add_crate(
174+
&crate_name,
175+
&crate_version,
176+
build_priority,
177+
ctx.config()?.registry_url.as_deref(),
178+
)?,
176179

177180
Self::DefaultPriority { subcommand } => subcommand.handle_args(ctx)?,
178181
}

src/build_queue.rs

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ pub(crate) struct QueuedCrate {
1111
pub(crate) name: String,
1212
pub(crate) version: String,
1313
pub(crate) priority: i32,
14+
pub(crate) registry: Option<String>,
1415
}
1516

1617
#[derive(Debug)]
@@ -29,10 +30,16 @@ impl BuildQueue {
2930
}
3031
}
3132

32-
pub fn add_crate(&self, name: &str, version: &str, priority: i32) -> Result<()> {
33+
pub fn add_crate(
34+
&self,
35+
name: &str,
36+
version: &str,
37+
priority: i32,
38+
registry: Option<&str>,
39+
) -> Result<()> {
3340
self.db.get()?.execute(
34-
"INSERT INTO queue (name, version, priority) VALUES ($1, $2, $3);",
35-
&[&name, &version, &priority],
41+
"INSERT INTO queue (name, version, priority, registry) VALUES ($1, $2, $3, $4);",
42+
&[&name, &version, &priority, &registry],
3643
)?;
3744
Ok(())
3845
}
@@ -63,7 +70,7 @@ impl BuildQueue {
6370

6471
pub(crate) fn queued_crates(&self) -> Result<Vec<QueuedCrate>> {
6572
let query = self.db.get()?.query(
66-
"SELECT id, name, version, priority
73+
"SELECT id, name, version, priority, registry
6774
FROM queue
6875
WHERE attempt < $1
6976
ORDER BY priority ASC, attempt ASC, id ASC",
@@ -77,6 +84,7 @@ impl BuildQueue {
7784
name: row.get("name"),
7885
version: row.get("version"),
7986
priority: row.get("priority"),
87+
registry: row.get("registry"),
8088
})
8189
.collect())
8290
}
@@ -149,7 +157,7 @@ mod tests {
149157
("high-priority-baz", "1.0.0", -1000),
150158
];
151159
for krate in &test_crates {
152-
queue.add_crate(krate.0, krate.1, krate.2)?;
160+
queue.add_crate(krate.0, krate.1, krate.2, None)?;
153161
}
154162

155163
let assert_next = |name| -> Result<()> {
@@ -214,9 +222,9 @@ mod tests {
214222
let queue = env.build_queue();
215223

216224
assert_eq!(queue.pending_count()?, 0);
217-
queue.add_crate("foo", "1.0.0", 0)?;
225+
queue.add_crate("foo", "1.0.0", 0, None)?;
218226
assert_eq!(queue.pending_count()?, 1);
219-
queue.add_crate("bar", "1.0.0", 0)?;
227+
queue.add_crate("bar", "1.0.0", 0, None)?;
220228
assert_eq!(queue.pending_count()?, 2);
221229

222230
queue.process_next_crate(|krate| {
@@ -235,11 +243,11 @@ mod tests {
235243
let queue = env.build_queue();
236244

237245
assert_eq!(queue.prioritized_count()?, 0);
238-
queue.add_crate("foo", "1.0.0", 0)?;
246+
queue.add_crate("foo", "1.0.0", 0, None)?;
239247
assert_eq!(queue.prioritized_count()?, 1);
240-
queue.add_crate("bar", "1.0.0", -100)?;
248+
queue.add_crate("bar", "1.0.0", -100, None)?;
241249
assert_eq!(queue.prioritized_count()?, 2);
242-
queue.add_crate("baz", "1.0.0", 100)?;
250+
queue.add_crate("baz", "1.0.0", 100, None)?;
243251
assert_eq!(queue.prioritized_count()?, 2);
244252

245253
queue.process_next_crate(|krate| {
@@ -262,9 +270,9 @@ mod tests {
262270
let queue = env.build_queue();
263271

264272
assert_eq!(queue.failed_count()?, 0);
265-
queue.add_crate("foo", "1.0.0", -100)?;
273+
queue.add_crate("foo", "1.0.0", -100, None)?;
266274
assert_eq!(queue.failed_count()?, 0);
267-
queue.add_crate("bar", "1.0.0", 0)?;
275+
queue.add_crate("bar", "1.0.0", 0, None)?;
268276

269277
for _ in 0..MAX_ATTEMPTS {
270278
assert_eq!(queue.failed_count()?, 0);
@@ -296,7 +304,7 @@ mod tests {
296304
("baz", "1.0.0", 10),
297305
];
298306
for krate in &test_crates {
299-
queue.add_crate(krate.0, krate.1, krate.2)?;
307+
queue.add_crate(krate.0, krate.1, krate.2, None)?;
300308
}
301309

302310
assert_eq!(

src/db/migrate.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,20 @@ pub fn migrate(version: Option<Version>, conn: &mut Client) -> CratesfyiResult<(
475475
DROP TYPE feature;
476476
"
477477
),
478+
migration!(
479+
context,
480+
20,
481+
// description
482+
"Support alternative registries",
483+
// upgrade query
484+
"
485+
ALTER TABLE queue ADD COLUMN registry TEXT DEFAULT NULL;
486+
",
487+
// downgrade query
488+
"
489+
ALTER TABLE queue DROP COLUMN registry;
490+
"
491+
)
478492
];
479493

480494
for migration in migrations {

src/docbuilder/queue.rs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,12 @@ impl DocBuilder {
4545
ChangeKind::Added => {
4646
let priority = get_crate_priority(&mut conn, &krate.name)?;
4747

48-
match self
49-
.build_queue
50-
.add_crate(&krate.name, &krate.version, priority)
51-
{
48+
match self.build_queue.add_crate(
49+
&krate.name,
50+
&krate.version,
51+
priority,
52+
index.repository_url(),
53+
) {
5254
Ok(()) => {
5355
debug!("{}-{} added into build queue", krate.name, krate.version);
5456
crates_added += 1;
@@ -79,7 +81,13 @@ impl DocBuilder {
7981
queue.process_next_crate(|krate| {
8082
processed = true;
8183

82-
builder.build_package(&krate.name, &krate.version, PackageKind::CratesIo)?;
84+
let kind = krate
85+
.registry
86+
.as_ref()
87+
.map(|r| PackageKind::Registry(r.as_str()))
88+
.unwrap_or(PackageKind::CratesIo);
89+
90+
builder.build_package(&krate.name, &krate.version, kind)?;
8391
Ok(())
8492
})?;
8593

src/index/mod.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,4 +113,8 @@ impl Index {
113113
);
114114
}
115115
}
116+
117+
pub fn repository_url(&self) -> Option<&str> {
118+
self.repository_url.as_deref()
119+
}
116120
}

src/web/releases.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1126,9 +1126,9 @@ mod tests {
11261126
.expect("missing heading")
11271127
.any(|el| el.text_contents().contains("nothing")));
11281128

1129-
queue.add_crate("foo", "1.0.0", 0)?;
1130-
queue.add_crate("bar", "0.1.0", -10)?;
1131-
queue.add_crate("baz", "0.0.1", 10)?;
1129+
queue.add_crate("foo", "1.0.0", 0, None)?;
1130+
queue.add_crate("bar", "0.1.0", -10, None)?;
1131+
queue.add_crate("baz", "0.0.1", 10, None)?;
11321132

11331133
let full = kuchiki::parse_html().one(web.get("/releases/queue").send()?.text()?);
11341134
let items = full

0 commit comments

Comments
 (0)