Skip to content

Commit 78bbded

Browse files
authored
Redeploy 'configurable index location' (#1148)
* Revert "Revert "Support custom indexes"" This reverts commit 5085d57. * Revert "Revert "Update Cargo.toml"" This reverts commit 02d3cfd. * Revert "Revert "Use registry from config, instead of cli argument"" This reverts commit 1edaace. * Revert "Revert "Use 0.11 rustwide"" This reverts commit 0128d2d. * Revert "Revert "Favor registry for queued crates"" This reverts commit 7d81b24. * Revert "Revert "Don`t check for deleted CRATE_VERSION"" This reverts commit c276522.
1 parent 5085d57 commit 78bbded

File tree

13 files changed

+152
-57
lines changed

13 files changed

+152
-57
lines changed

Cargo.lock

Lines changed: 13 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ log = "0.4"
2020
regex = "1"
2121
structopt = "0.3"
2222
crates-index = "0.15.1"
23-
crates-index-diff = "7"
23+
crates-index-diff = "7.1.1"
2424
reqwest = { version = "0.10.6", features = ["blocking", "json"] } # TODO: Remove blocking when async is ready
2525
semver = { version = "0.9", features = ["serde"] }
2626
slug = "=0.1.1"
@@ -40,7 +40,7 @@ schemamama = "0.3"
4040
schemamama_postgres = "0.3"
4141
systemstat = "0.1.4"
4242
prometheus = { version = "0.10.0", default-features = false }
43-
rustwide = "0.10.0"
43+
rustwide = "0.11"
4444
mime_guess = "2"
4545
dotenv = "0.15"
4646
zstd = "0.5"

src/bin/cratesfyi.rs

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ use std::sync::Arc;
66
use docs_rs::db::{self, add_path_into_database, Pool, PoolClient};
77
use docs_rs::utils::{remove_crate_priority, set_crate_priority};
88
use docs_rs::{
9-
BuildQueue, Config, Context, DocBuilder, Index, Metrics, RustwideBuilder, Server, Storage,
9+
BuildQueue, Config, Context, DocBuilder, Index, Metrics, PackageKind, RustwideBuilder, Server,
10+
Storage,
1011
};
1112
use failure::{err_msg, Error, ResultExt};
1213
use once_cell::sync::OnceCell;
@@ -169,9 +170,12 @@ impl QueueSubcommand {
169170
crate_name,
170171
crate_version,
171172
build_priority,
172-
} => ctx
173-
.build_queue()?
174-
.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+
)?,
175179

176180
Self::DefaultPriority { subcommand } => subcommand.handle_args(ctx)?,
177181
}
@@ -308,12 +312,16 @@ impl BuildSubcommand {
308312
.build_local_package(&path)
309313
.context("Building documentation failed")?;
310314
} else {
315+
let registry_url = ctx.config()?.registry_url.clone();
311316
builder
312317
.build_package(
313318
&crate_name.ok_or_else(|| err_msg("must specify name if not local"))?,
314319
&crate_version
315320
.ok_or_else(|| err_msg("must specify version if not local"))?,
316-
None,
321+
registry_url
322+
.as_ref()
323+
.map(|s| PackageKind::Registry(s.as_str()))
324+
.unwrap_or(PackageKind::CratesIo),
317325
)
318326
.context("Building documentation failed")?;
319327
}
@@ -593,7 +601,16 @@ impl Context for BinContext {
593601
fn index(&self) -> Result<Arc<Index>, Error> {
594602
Ok(self
595603
.index
596-
.get_or_try_init::<_, Error>(|| Ok(Arc::new(Index::new(&*self.config()?)?)))?
604+
.get_or_try_init::<_, Error>(|| {
605+
let config = self.config()?;
606+
Ok(Arc::new(
607+
if let Some(registry_url) = config.registry_url.clone() {
608+
Index::from_url(config.registry_index_path.clone(), registry_url)
609+
} else {
610+
Index::new(config.registry_index_path.clone())
611+
}?,
612+
))
613+
})?
597614
.clone())
598615
}
599616
}

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/config.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ pub struct Config {
1212

1313
pub prefix: PathBuf,
1414
pub registry_index_path: PathBuf,
15+
pub registry_url: Option<String>,
1516

1617
// Database connection params
1718
pub(crate) database_url: String,
@@ -56,6 +57,7 @@ impl Config {
5657

5758
prefix: prefix.clone(),
5859
registry_index_path: env("REGISTRY_INDEX_PATH", prefix.join("crates.io-index"))?,
60+
registry_url: maybe_env("REGISTRY_URL")?,
5961

6062
database_url: require_env("CRATESFYI_DATABASE_URL")?,
6163
max_pool_size: env("DOCSRS_MAX_POOL_SIZE", 90)?,

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/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ mod queue;
44
mod rustwide_builder;
55

66
pub(crate) use self::limits::Limits;
7-
pub use self::rustwide_builder::RustwideBuilder;
87
pub(crate) use self::rustwide_builder::{BuildResult, DocCoverage};
8+
pub use self::rustwide_builder::{PackageKind, RustwideBuilder};
99

1010
use crate::db::Pool;
1111
use crate::error::Result;

src/docbuilder/queue.rs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Updates registry index and builds new packages
22
3-
use super::{DocBuilder, RustwideBuilder};
3+
use super::{DocBuilder, PackageKind, RustwideBuilder};
44
use crate::error::Result;
55
use crate::utils::get_crate_priority;
66
use crate::Index;
@@ -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, None)?;
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

0 commit comments

Comments
 (0)