Auto merge of #30187 - alexcrichton:stabilize-1.6, r=aturon

This commit is the standard API stabilization commit for the 1.6 release cycle.
The list of issues and APIs below have all been through their cycle-long FCP and
the libs team decisions are listed below

Stabilized APIs

* `Read::read_exact`
* `ErrorKind::UnexpectedEof` (renamed from `UnexpectedEOF`)
* libcore -- this was a bit of a nuanced stabilization, the crate itself is now
  marked as `#[stable]` and the methods appearing via traits for primitives like
  `char` and `str` are now also marked as stable. Note that the extension traits
  themeselves are marked as unstable as they're imported via the prelude. The
  `try!` macro was also moved from the standard library into libcore to have the
  same interface. Otherwise the functions all have copied stability from the
  standard library now.
* `fs::DirBuilder`
* `fs::DirBuilder::new`
* `fs::DirBuilder::recursive`
* `fs::DirBuilder::create`
* `os::unix::fs::DirBuilderExt`
* `os::unix::fs::DirBuilderExt::mode`
* `vec::Drain`
* `vec::Vec::drain`
* `string::Drain`
* `string::String::drain`
* `vec_deque::Drain`
* `vec_deque::VecDeque::drain`
* `collections::hash_map::Drain`
* `collections::hash_map::HashMap::drain`
* `collections::hash_set::Drain`
* `collections::hash_set::HashSet::drain`
* `collections::binary_heap::Drain`
* `collections::binary_heap::BinaryHeap::drain`
* `Vec::extend_from_slice` (renamed from `push_all`)
* `Mutex::get_mut`
* `Mutex::into_inner`
* `RwLock::get_mut`
* `RwLock::into_inner`
* `Iterator::min_by_key` (renamed from `min_by`)
* `Iterator::max_by_key` (renamed from `max_by`)

Deprecated APIs

* `ErrorKind::UnexpectedEOF` (renamed to `UnexpectedEof`)
* `OsString::from_bytes`
* `OsStr::to_cstring`
* `OsStr::to_bytes`
* `fs::walk_dir` and `fs::WalkDir`
* `path::Components::peek`
* `slice::bytes::MutableByteVector`
* `slice::bytes::copy_memory`
* `Vec::push_all` (renamed to `extend_from_slice`)
* `Duration::span`
* `IpAddr`
* `SocketAddr::ip`
* `Read::tee`
* `io::Tee`
* `Write::broadcast`
* `io::Broadcast`
* `Iterator::min_by` (renamed to `min_by_key`)
* `Iterator::max_by` (renamed to `max_by_key`)
* `net::lookup_addr`

New APIs (still unstable)

* `<[T]>::sort_by_key` (added to mirror `min_by_key`)

Closes #27585
Closes #27704
Closes #27707
Closes #27710
Closes #27711
Closes #27727
Closes #27740
Closes #27744
Closes #27799
Closes #27801
cc #27801 (doesn't close as `Chars` is still unstable)
Closes #28968
This commit is contained in:
bors 2015-12-06 04:12:54 +00:00
commit c4b16384f1
165 changed files with 712 additions and 718 deletions

View file

@ -246,17 +246,16 @@ pub fn symlink<P: AsRef<Path>, Q: AsRef<Path>>(src: P, dst: Q) -> io::Result<()>
sys::fs::symlink(src.as_ref(), dst.as_ref())
}
#[unstable(feature = "dir_builder", reason = "recently added API",
issue = "27710")]
#[stable(feature = "dir_builder", since = "1.6.0")]
/// An extension trait for `fs::DirBuilder` for unix-specific options.
pub trait DirBuilderExt {
/// Sets the mode to create new directories with. This option defaults to
/// 0o777.
#[stable(feature = "dir_builder", since = "1.6.0")]
fn mode(&mut self, mode: raw::mode_t) -> &mut Self;
}
#[unstable(feature = "dir_builder", reason = "recently added API",
issue = "27710")]
#[stable(feature = "dir_builder", since = "1.6.0")]
impl DirBuilderExt for fs::DirBuilder {
fn mode(&mut self, mode: raw::mode_t) -> &mut fs::DirBuilder {
self.as_inner_mut().set_mode(mode);

View file

@ -355,8 +355,7 @@ impl DirBuilder {
}
fn cstr(path: &Path) -> io::Result<CString> {
path.as_os_str().to_cstring().ok_or(
io::Error::new(io::ErrorKind::InvalidInput, "path contained a null"))
Ok(try!(CString::new(path.as_os_str().as_bytes())))
}
impl FromInner<c_int> for File {

View file

@ -149,7 +149,7 @@ pub fn join_paths<I, T>(paths: I) -> Result<OsString, JoinPathsError>
if path.contains(&sep) {
return Err(JoinPathsError)
}
joined.push_all(path);
joined.extend_from_slice(path);
}
Ok(OsStringExt::from_vec(joined))
}

View file

@ -53,7 +53,7 @@ impl Buf {
}
pub fn push_slice(&mut self, s: &Slice) {
self.inner.push_all(&s.inner)
self.inner.extend_from_slice(&s.inner)
}
}

View file

@ -43,7 +43,7 @@ pub struct Command {
impl Command {
pub fn new(program: &OsStr) -> Command {
Command {
program: program.to_cstring().unwrap(),
program: os2c(program),
args: Vec::new(),
env: None,
cwd: None,
@ -54,10 +54,10 @@ impl Command {
}
pub fn arg(&mut self, arg: &OsStr) {
self.args.push(arg.to_cstring().unwrap())
self.args.push(os2c(arg));
}
pub fn args<'a, I: Iterator<Item = &'a OsStr>>(&mut self, args: I) {
self.args.extend(args.map(|s| s.to_cstring().unwrap()))
self.args.extend(args.map(os2c));
}
fn init_env_map(&mut self) {
if self.env.is_none() {
@ -76,10 +76,14 @@ impl Command {
self.env = Some(HashMap::new())
}
pub fn cwd(&mut self, dir: &OsStr) {
self.cwd = Some(dir.to_cstring().unwrap())
self.cwd = Some(os2c(dir));
}
}
fn os2c(s: &OsStr) -> CString {
CString::new(s.as_bytes()).unwrap()
}
////////////////////////////////////////////////////////////////////////////////
// Processes
////////////////////////////////////////////////////////////////////////////////
@ -430,9 +434,9 @@ fn make_envp(env: Option<&HashMap<OsString, OsString>>)
for pair in env {
let mut kv = Vec::new();
kv.push_all(pair.0.as_bytes());
kv.extend_from_slice(pair.0.as_bytes());
kv.push('=' as u8);
kv.push_all(pair.1.as_bytes());
kv.extend_from_slice(pair.1.as_bytes());
kv.push(0); // terminating null
tmps.push(kv);
}