Skip to content

Commit 573eaa2

Browse files
committed
allow running local builds
NOTE: this breaks backwards compatibility for build_package
1 parent 799f5d2 commit 573eaa2

File tree

3 files changed

+34
-10
lines changed

3 files changed

+34
-10
lines changed

src/bin/cratesfyi.rs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ extern crate rustwide;
99

1010

1111
use std::env;
12-
use std::path::PathBuf;
12+
use std::path::{Path, PathBuf};
1313

1414
use clap::{Arg, App, SubCommand};
1515
use cratesfyi::{DocBuilder, RustwideBuilder, DocBuilderOptions, db};
@@ -53,12 +53,18 @@ pub fn main() {
5353
.about("Builds documentation for a crate")
5454
.arg(Arg::with_name("CRATE_NAME")
5555
.index(1)
56-
.required(true)
56+
.required_unless("LOCAL")
57+
.requires("CRATE_VERSION")
5758
.help("Crate name"))
5859
.arg(Arg::with_name("CRATE_VERSION")
5960
.index(2)
60-
.required(true)
61-
.help("Version of crate")))
61+
.help("Version of crate"))
62+
.arg(Arg::with_name("LOCAL")
63+
.short("-l")
64+
.long("--local")
65+
.takes_value(true)
66+
.conflicts_with_all(&["CRATE_NAME", "CRATE_VERSION"])
67+
.help("Build a crate at a specific path")))
6268
.subcommand(SubCommand::with_name("add-essential-files")
6369
.about("Adds essential files for rustc"))
6470
.subcommand(SubCommand::with_name("lock").about("Locks cratesfyi daemon to stop \
@@ -156,9 +162,11 @@ pub fn main() {
156162
} else if let Some(matches) = matches.subcommand_matches("crate") {
157163
docbuilder.load_cache().expect("Failed to load cache");
158164
let mut builder = RustwideBuilder::init().unwrap();
159-
builder.build_package(&mut docbuilder, matches.value_of("CRATE_NAME").unwrap(),
160-
matches.value_of("CRATE_VERSION").unwrap())
161-
.expect("Building documentation failed");
165+
match matches.value_of("LOCAL") {
166+
Some(path) => builder.build_local_package(&mut docbuilder, Path::new(path)),
167+
None => builder.build_package(&mut docbuilder,
168+
matches.value_of("CRATE_NAME").unwrap(), matches.value_of("CRATE_VERSION").unwrap(), None),
169+
}.expect("Building documentation failed");
162170
docbuilder.save_cache().expect("Failed to save cache");
163171
} else if let Some(_) = matches.subcommand_matches("add-essential-files") {
164172
let mut builder = RustwideBuilder::init().unwrap();

src/docbuilder/queue.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ impl DocBuilder {
5959
let name: String = query.get(0).get(1);
6060
let version: String = query.get(0).get(2);
6161

62-
match builder.build_package(self, &name, &version) {
62+
match builder.build_package(self, &name, &version, None) {
6363
Ok(_) => {
6464
let _ = conn.execute("DELETE FROM queue WHERE id = $1", &[&id]);
6565
::web::metrics::TOTAL_BUILDS.inc();

src/docbuilder/rustwide_builder.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ impl RustwideBuilder {
204204
crates_from_path(
205205
&doc_builder.options().crates_io_index_path.clone(),
206206
&mut |name, version| {
207-
match self.build_package(doc_builder, name, version) {
207+
match self.build_package(doc_builder, name, version, None) {
208208
Ok(status) => {
209209
count += 1;
210210
if status && count % 10 == 0 {
@@ -218,11 +218,23 @@ impl RustwideBuilder {
218218
)
219219
}
220220

221+
pub fn build_local_package(
222+
&mut self,
223+
doc_builder: &mut DocBuilder,
224+
path: &Path,
225+
) -> Result<bool> {
226+
self.update_toolchain()?;
227+
let metadata = CargoMetadata::load(&self.workspace, &self.toolchain, path)?;
228+
let package = metadata.root();
229+
self.build_package(doc_builder, &package.name, &package.version, Some(path))
230+
}
231+
221232
pub fn build_package(
222233
&mut self,
223234
doc_builder: &mut DocBuilder,
224235
name: &str,
225236
version: &str,
237+
local: Option<&Path>,
226238
) -> Result<bool> {
227239
if !doc_builder.should_build(name, version) {
228240
return Ok(false);
@@ -238,7 +250,11 @@ impl RustwideBuilder {
238250
let mut build_dir = self.workspace.build_dir(&format!("{}-{}", name, version));
239251
build_dir.purge()?;
240252

241-
let krate = Crate::crates_io(name, version);
253+
let krate = if let Some(path) = local {
254+
Crate::local(path)
255+
} else {
256+
Crate::crates_io(name, version)
257+
};
242258
krate.fetch(&self.workspace)?;
243259

244260
let sandbox = SandboxBuilder::new()

0 commit comments

Comments
 (0)