Skip to content

Commit c5d35e6

Browse files
committed
use new ChangeKind methods to determine crate-index change-kind
1 parent 172e6ad commit c5d35e6

File tree

1 file changed

+51
-56
lines changed

1 file changed

+51
-56
lines changed

src/build_queue.rs

+51-56
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ use crate::utils::{get_config, get_crate_priority, report_error, set_config, Con
77
use crate::{Config, Index, Metrics, RustwideBuilder};
88
use anyhow::Context;
99

10-
use crates_index_diff::Change;
1110
use tracing::{debug, error, info, instrument, warn};
1211

1312
use std::collections::HashMap;
@@ -309,67 +308,63 @@ impl BuildQueue {
309308
changes.reverse();
310309

311310
for change in &changes {
312-
match change {
313-
Change::Yanked(release)
314-
| Change::Unyanked(release)
315-
// FIXME: the correct handling of `AddedAndYanked` is probably
316-
// running the build and direcctly yanking the release.
317-
// looking at
318-
// https://github.com/Byron/crates-index-diff-rs/commit/8256cbbd3651073394d6aa9de38c734618df9102
319-
// The same change previously lead to a simple `Yanked` change, which would
320-
// be ignored by us because we don't find the release.
321-
// This is best fixed together with other edge-cases like
322-
// a release being yanked while the build is still queued or running.
323-
| Change::AddedAndYanked(release) => {
324-
set_yanked(
325-
&mut conn,
326-
release.name.as_str(),
327-
release.version.as_str(),
328-
!matches!(change, Change::Unyanked(_)),
329-
);
330-
331-
if let Err(err) = cdn::invalidate_crate(&self.config, &self.cdn, &release.name)
332-
{
333-
report_error(&err);
334-
}
311+
if let Some((ref krate, ..)) = change.deleted() {
312+
match delete_crate(&mut conn, &self.storage, &self.config, krate)
313+
.with_context(|| format!("failed to delete crate {}", krate))
314+
{
315+
Ok(_) => info!(
316+
"crate {} was deleted from the index and will be deleted from the database",
317+
krate
318+
),
319+
Err(err) => report_error(&err),
335320
}
321+
if let Err(err) = cdn::invalidate_crate(&self.config, &self.cdn, krate) {
322+
report_error(&err);
323+
}
324+
continue;
325+
}
336326

337-
Change::Added(release) => {
338-
let priority = get_crate_priority(&mut conn, &release.name)?;
339-
340-
match self
341-
.add_crate(
342-
&release.name,
343-
&release.version,
344-
priority,
345-
index.repository_url(),
327+
if let Some(release) = change.added() {
328+
let priority = get_crate_priority(&mut conn, &release.name)?;
329+
330+
match self
331+
.add_crate(
332+
&release.name,
333+
&release.version,
334+
priority,
335+
index.repository_url(),
336+
)
337+
.with_context(|| {
338+
format!(
339+
"failed adding {}-{} into build queue",
340+
release.name, release.version
346341
)
347-
.with_context(|| {
348-
format!(
349-
"failed adding {}-{} into build queue",
350-
release.name, release.version
351-
)
352-
}) {
353-
Ok(()) => {
354-
debug!(
355-
"{}-{} added into build queue",
356-
release.name, release.version
357-
);
358-
crates_added += 1;
359-
}
360-
Err(err) => report_error(&err),
342+
}) {
343+
Ok(()) => {
344+
debug!(
345+
"{}-{} added into build queue",
346+
release.name, release.version
347+
);
348+
crates_added += 1;
361349
}
350+
Err(err) => report_error(&err),
362351
}
352+
}
363353

364-
Change::Deleted { name: krate, .. } => {
365-
match delete_crate(&mut conn, &self.storage, &self.config, krate)
366-
.with_context(|| format!("failed to delete crate {}", krate)) {
367-
Ok(_) => info!("crate {} was deleted from the index and will be deleted from the database", krate),
368-
Err(err) => report_error(&err),
369-
}
370-
if let Err(err) = cdn::invalidate_crate(&self.config, &self.cdn, krate) {
371-
report_error(&err);
372-
}
354+
let yanked = change.yanked();
355+
let unyanked = change.unyanked();
356+
if let Some(release) = yanked.or(unyanked) {
357+
// FIXME: delay yanks of crates that have not yet finished building
358+
// https://github.com/rust-lang/docs.rs/issues/1934
359+
set_yanked(
360+
&mut conn,
361+
release.name.as_str(),
362+
release.version.as_str(),
363+
yanked.is_some(),
364+
);
365+
366+
if let Err(err) = cdn::invalidate_crate(&self.config, &self.cdn, &release.name) {
367+
report_error(&err);
373368
}
374369
}
375370
}

0 commit comments

Comments
 (0)