Auto merge of #9132 - ehuss:revert-8937, r=alexcrichton

[BETA] Revert "Slightly optimize `cargo vendor`"

This reverts #8937, which seems to have caused a permission issue.

cc #9127
This commit is contained in:
bors 2021-02-04 15:18:32 +00:00
commit f04e7fab73
1 changed files with 3 additions and 25 deletions

View File

@ -9,8 +9,6 @@ use serde::Serialize;
use std::collections::HashSet;
use std::collections::{BTreeMap, BTreeSet, HashMap};
use std::fs;
use std::fs::File;
use std::io::{Read, Write};
use std::path::{Path, PathBuf};
pub struct VendorOptions<'a> {
@ -184,7 +182,6 @@ fn sync(
}
let mut sources = BTreeSet::new();
let mut tmp_buf = [0; 64 * 1024];
for (id, pkg) in ids.iter() {
// Next up, copy it to the vendor directory
let src = pkg
@ -219,7 +216,7 @@ fn sync(
let pathsource = PathSource::new(src, id.source_id(), config);
let paths = pathsource.list_files(pkg)?;
let mut map = BTreeMap::new();
cp_sources(src, &paths, &dst, &mut map, &mut tmp_buf)
cp_sources(src, &paths, &dst, &mut map)
.chain_err(|| format!("failed to copy over vendored sources for: {}", id))?;
// Finally, emit the metadata about this package
@ -302,7 +299,6 @@ fn cp_sources(
paths: &[PathBuf],
dst: &Path,
cksums: &mut BTreeMap<String, String>,
tmp_buf: &mut [u8],
) -> CargoResult<()> {
for p in paths {
let relative = p.strip_prefix(&src).unwrap();
@ -338,27 +334,9 @@ fn cp_sources(
paths::create_dir_all(dst.parent().unwrap())?;
let cksum = copy_and_checksum(&p, &dst, tmp_buf)?;
paths::copy(&p, &dst)?;
let cksum = Sha256::new().update_path(dst)?.finish_hex();
cksums.insert(relative.to_str().unwrap().replace("\\", "/"), cksum);
}
Ok(())
}
fn copy_and_checksum(src_path: &Path, dst_path: &Path, buf: &mut [u8]) -> CargoResult<String> {
let mut src = File::open(src_path).chain_err(|| format!("failed to open {:?}", src_path))?;
let mut dst =
File::create(dst_path).chain_err(|| format!("failed to create {:?}", dst_path))?;
let mut cksum = Sha256::new();
loop {
let n = src
.read(buf)
.chain_err(|| format!("failed to read from {:?}", src_path))?;
if n == 0 {
break Ok(cksum.finish_hex());
}
let data = &buf[..n];
cksum.update(data);
dst.write_all(data)
.chain_err(|| format!("failed to write to {:?}", dst_path))?;
}
}