Merge pull request #71 from srwalter/cargo-no-network

Update cargo support so that there truly is no network access
This commit is contained in:
Steven Walter
2016-09-05 18:45:14 -04:00
committed by GitHub
11 changed files with 228 additions and 137 deletions
+3 -3
View File
@@ -1,4 +1,4 @@
CARGO_SNAPSHOT = "2016-01-31/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz"
SRC_URI[md5sum] = "52f48780b7cfadc88813766048d4d402"
SRC_URI[sha256sum] = "1920e661bab536eba763ff6704a1d62fb20bb0f67d8c5a119e41c49510ea5fa6"
CARGO_SNAPSHOT = "2016-09-01/cargo-nightly-x86_64-unknown-linux-gnu.tar.gz;downloadfilename=cargo-nightly-x86_64-unknown-linux-gnu-2016-09-01.tar.gz"
SRC_URI[md5sum] = "d41ebf79290a7c9c9e5df87cb27e5091"
SRC_URI[sha256sum] = "365e5cad79512d244b8ced32f8e5b86a710fc6c17f0d0f5f744b8058ef6dc756"
+53 -5
View File
@@ -1,5 +1,3 @@
INHIBIT_CARGO_DEP = "1"
inherit cargo
inherit patch
inherit rust-installer
@@ -11,8 +9,60 @@ LICENSE = "MIT | Apache-2.0"
DEPENDS = "openssl zlib libgit2 curl ca-certificates libssh2"
CARGO_INDEX_COMMIT = "6127fc24b0b6fe73fe4d339817fbf000b9a798a2"
SRC_URI = "\
http://static-rust-lang-org.s3.amazonaws.com/cargo-dist/${CARGO_SNAPSHOT} \
crate://crates.io/advapi32-sys/0.1.2 \
crate://crates.io/bufstream/0.1.1 \
crate://crates.io/crossbeam/0.2.8 \
crate://crates.io/docopt/0.6.78 \
crate://crates.io/env_logger/0.3.2 \
crate://crates.io/filetime/0.1.10 \
crate://crates.io/flate2/0.2.13 \
crate://crates.io/fs2/0.2.3 \
crate://crates.io/glob/0.2.11 \
crate://crates.io/hamcrest/0.1.0 \
crate://crates.io/kernel32-sys/0.2.1 \
crate://crates.io/libc/0.2.8 \
crate://crates.io/log/0.3.5 \
crate://crates.io/num_cpus/0.2.11 \
crate://crates.io/regex/0.1.58 \
crate://crates.io/rustc-serialize/0.3.18 \
crate://crates.io/tar/0.4.5 \
crate://crates.io/tempdir/0.3.4 \
crate://crates.io/term/0.4.4 \
crate://crates.io/toml/0.1.28 \
crate://crates.io/url/1.1.0 \
crate://crates.io/winapi/0.2.6 \
crate://crates.io/semver/0.2.3 \
crate://crates.io/regex-syntax/0.3.0 \
crate://crates.io/utf8-ranges/0.1.3 \
crate://crates.io/gcc/0.3.26 \
crate://crates.io/unicode-normalization/0.1.2 \
crate://crates.io/libz-sys/1.0.2 \
crate://crates.io/rand/0.3.14 \
crate://crates.io/user32-sys/0.1.2 \
crate://crates.io/idna/0.1.0 \
crate://crates.io/strsim/0.3.0 \
crate://crates.io/matches/0.1.2 \
crate://crates.io/cmake/0.1.16 \
crate://crates.io/gdi32-sys/0.1.1 \
crate://crates.io/bitflags/0.1.1 \
crate://crates.io/unicode-bidi/0.2.3 \
crate://crates.io/pkg-config/0.3.8 \
crate://crates.io/winapi-build/0.1.1 \
crate://crates.io/memchr/0.1.10 \
crate://crates.io/pnacl-build-helper/1.4.10 \
crate://crates.io/nom/1.2.2 \
crate://crates.io/num/0.1.31 \
crate://crates.io/uuid/0.2.3 \
crate://crates.io/aho-corasick/0.5.1 \
crate://crates.io/libressl-pnacl-sys/2.1.6 \
crate://crates.io/miniz-sys/0.1.7 \
crate://crates.io/openssl-sys/0.7.8 \
crate://crates.io/url/0.5.10 \
crate-index://crates.io/${CARGO_INDEX_COMMIT} \
"
B = "${S}"
@@ -44,8 +94,6 @@ do_configure () {
${EXTRA_OECONF} \
|| die "Could not configure cargo"
# cargo downloads a cargo snapshot to build itself using cargo, we need
# to override it's arch info.
cargo_do_configure
}
@@ -54,7 +102,7 @@ do_compile () {
rm -rf target/snapshot
mkdir -p target
cp -R ${WORKDIR}/$(basename ${CARGO_SNAPSHOT} .tar.gz)/cargo target/snapshot
cp -R ${WORKDIR}/cargo-nightly-x86_64-unknown-linux-gnu/cargo target/snapshot
oe_runmake ARGS="--verbose"
}
+1
View File
@@ -4,6 +4,7 @@ require cargo.inc
SRC_URI += " \
git://github.com/rust-lang/cargo.git;protocol=https;name=cargo \
file://0001-disable-cargo-snapshot-fetch.patch \
file://0001-Never-update-the-registry-index.patch \
git://github.com/rust-lang/rust-installer.git;protocol=https;name=rust-installer;destsuffix=${S}/src/rust-installer \
"
# Compatible with Rust 1.10.0
@@ -0,0 +1,88 @@
From 27df8ab04275dfd715d1756fc517bb0323f1b210 Mon Sep 17 00:00:00 2001
From: Steven Walter <stevenrwalter@gmail.com>
Date: Fri, 2 Sep 2016 14:02:03 -0400
Subject: [PATCH] Never update the registry index
Bitbake will fetch the index for us so that we needn't do network IO
during a build
---
src/cargo/ops/cargo_run.rs | 2 +-
src/cargo/sources/registry.rs | 34 +---------------------------------
2 files changed, 2 insertions(+), 34 deletions(-)
diff --git a/src/cargo/ops/cargo_run.rs b/src/cargo/ops/cargo_run.rs
index 6764118..379b98b 100644
--- a/src/cargo/ops/cargo_run.rs
+++ b/src/cargo/ops/cargo_run.rs
@@ -1,7 +1,7 @@
use std::path::Path;
use ops::{self, CompileFilter};
-use util::{self, CargoResult, process, ProcessError};
+use util::{self, CargoResult, ProcessError};
use core::Package;
pub fn run(manifest_path: &Path,
diff --git a/src/cargo/sources/registry.rs b/src/cargo/sources/registry.rs
index 614d654..a0c7fe6 100644
--- a/src/cargo/sources/registry.rs
+++ b/src/cargo/sources/registry.rs
@@ -166,7 +166,6 @@ use std::path::{PathBuf, Path};
use curl::http;
use flate2::read::GzDecoder;
-use git2;
use rustc_serialize::hex::ToHex;
use rustc_serialize::json;
use tar::Archive;
@@ -174,7 +173,7 @@ use url::Url;
use core::{Source, SourceId, PackageId, Package, Summary, Registry};
use core::dependency::{Dependency, DependencyInner, Kind};
-use sources::{PathSource, git};
+use sources::PathSource;
use util::{CargoResult, Config, internal, ChainError, ToUrl, human};
use util::{hex, Sha256, paths, Filesystem, FileLock};
use ops;
@@ -464,38 +463,7 @@ impl<'cfg> RegistrySource<'cfg> {
/// Actually perform network operations to update the registry
fn do_update(&mut self) -> CargoResult<()> {
- if self.updated {
- return Ok(())
- }
- try!(self.checkout_path.create_dir());
- let lock = try!(self.checkout_path.open_rw(Path::new(INDEX_LOCK),
- self.config,
- "the registry index"));
- let path = lock.path().parent().unwrap();
-
- try!(self.config.shell().status("Updating",
- format!("registry `{}`", self.source_id.url())));
- let repo = try!(git2::Repository::open(path).or_else(|_| {
- let _ = lock.remove_siblings();
- git2::Repository::init(path)
- }));
-
- // git fetch origin
- let url = self.source_id.url().to_string();
- let refspec = "refs/heads/*:refs/remotes/origin/*";
-
- try!(git::fetch(&repo, &url, refspec, &self.config).chain_error(|| {
- internal(format!("failed to fetch `{}`", url))
- }));
-
- // git reset --hard origin/master
- let reference = "refs/remotes/origin/master";
- let oid = try!(repo.refname_to_id(reference));
- trace!("[{}] updating to rev {}", self.source_id, oid);
- let object = try!(repo.find_object(oid, None));
- try!(repo.reset(&object, git2::ResetType::Hard, None));
self.updated = true;
- self.cache.clear();
Ok(())
}
}
--
2.7.4
+9 -4
View File
@@ -6,22 +6,27 @@ LICENSE = "MIT | Apache-2.0"
LIC_FILES_CHKSUM ="file://COPYRIGHT;md5=43e1f1fb9c0ee3af66693d8c4fecafa8"
require rust-shared-source.inc
CARGO_INDEX_COMMIT = "6127fc24b0b6fe73fe4d339817fbf000b9a798a2"
SRC_URI += "\
crate://crates.io/gcc/0.3.26 \
crate-index://crates.io/${CARGO_INDEX_COMMIT} \
"
DEPENDS += "compiler-rt"
RUSTLIB_DEP = ""
inherit cargo_util
inherit cargo
# Needed so cargo can find libbacktrace
RUSTFLAGS += "-L ${STAGING_LIBDIR}"
B = "${WORKDIR}/build"
do_compile () {
do_compile_prepend () {
cd ${S}/src/rustc/std_shim
export CARGO_TARGET_DIR="${B}"
export RUSTC_BOOTSTRAP_KEY="e8edd0fd"
oe_cargo_fix_env
oe_cargo_build
}
do_install () {