rollup merge of #21759: aturon/new-path

This PR implements [path reform](https://github.com/rust-lang/rfcs/pull/474), and motivation and details for the change can be found there.

For convenience, the old path API is being kept as `old_path` for the time being. Updating after this PR is just a matter of changing imports to `old_path` (which is likely not needed, since the prelude entries still export the old path API).

This initial PR does not include additional normalization or platform-specific path extensions. These will be done in follow up commits or PRs.

[breaking-change]

Closes #20034
Closes #12056
Closes #11594
Closes #14028
Closes #14049
Closes #10035
This commit is contained in:
Alex Crichton 2015-02-03 15:35:53 -08:00
commit 8550bf74c1
34 changed files with 2614 additions and 46 deletions

View File

@ -51,7 +51,7 @@
//! use std::error::FromError;
//! use std::old_io::{File, IoError};
//! use std::os::{MemoryMap, MapError};
//! use std::path::Path;
//! use std::old_path::Path;
//!
//! enum MyError {
//! Io(IoError),

View File

@ -17,7 +17,7 @@ use std::cmp::Ordering;
use std::default::Default;
use std::fmt;
use std::iter::FromIterator;
use std::path::BytesContainer;
use std::old_path::BytesContainer;
use std::slice;
// Note 1: It is not clear whether the flexibility of providing both

View File

@ -306,7 +306,7 @@ impl Target {
use std::env;
use std::ffi::OsString;
use std::old_io::File;
use std::path::Path;
use std::old_path::Path;
use serialize::json;
fn load_file(path: &Path) -> Result<Target, String> {

View File

@ -1590,7 +1590,7 @@ fn compile_unit_metadata(cx: &CrateContext) -> DIDescriptor {
Some(ref p) if p.is_relative() => {
// prepend "./" if necessary
let dotdot = b"..";
let prefix: &[u8] = &[dotdot[0], ::std::path::SEP_BYTE];
let prefix: &[u8] = &[dotdot[0], ::std::old_path::SEP_BYTE];
let mut path_bytes = p.as_vec().to_vec();
if &path_bytes[..2] != prefix &&

View File

@ -49,7 +49,7 @@ use rustc::middle::stability;
use std::rc::Rc;
use std::u32;
use std::str::Str as StrTrait; // Conflicts with Str variant
use std::path::Path as FsPath; // Conflicts with Path struct
use std::old_path::Path as FsPath; // Conflicts with Path struct
use core::DocContext;
use doctree;

View File

@ -14,7 +14,7 @@
Core encoding and decoding interfaces.
*/
use std::path;
use std::old_path;
use std::rc::Rc;
use std::cell::{Cell, RefCell};
use std::sync::Arc;
@ -538,29 +538,29 @@ macro_rules! tuple {
tuple! { T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, }
impl Encodable for path::posix::Path {
impl Encodable for old_path::posix::Path {
fn encode<S: Encoder>(&self, e: &mut S) -> Result<(), S::Error> {
self.as_vec().encode(e)
}
}
impl Decodable for path::posix::Path {
fn decode<D: Decoder>(d: &mut D) -> Result<path::posix::Path, D::Error> {
impl Decodable for old_path::posix::Path {
fn decode<D: Decoder>(d: &mut D) -> Result<old_path::posix::Path, D::Error> {
let bytes: Vec<u8> = try!(Decodable::decode(d));
Ok(path::posix::Path::new(bytes))
Ok(old_path::posix::Path::new(bytes))
}
}
impl Encodable for path::windows::Path {
impl Encodable for old_path::windows::Path {
fn encode<S: Encoder>(&self, e: &mut S) -> Result<(), S::Error> {
self.as_vec().encode(e)
}
}
impl Decodable for path::windows::Path {
fn decode<D: Decoder>(d: &mut D) -> Result<path::windows::Path, D::Error> {
impl Decodable for old_path::windows::Path {
fn decode<D: Decoder>(d: &mut D) -> Result<old_path::windows::Path, D::Error> {
let bytes: Vec<u8> = try!(Decodable::decode(d));
Ok(path::windows::Path::new(bytes))
Ok(old_path::windows::Path::new(bytes))
}
}

View File

@ -57,7 +57,7 @@ pub fn current_dir() -> IoResult<Path> {
///
/// ```rust
/// use std::env;
/// use std::path::Path;
/// use std::old_path::Path;
///
/// let root = Path::new("/");
/// assert!(env::set_current_dir(&root).is_ok());

View File

@ -24,6 +24,7 @@ pub use self::os_str::OsStr;
mod c_str;
mod os_str;
// FIXME (#21670): these should be defined in the os_str module
/// Freely convertible to an `&OsStr` slice.
pub trait AsOsStr {
/// Convert to an `&OsStr` slice.

View File

@ -41,7 +41,7 @@ use string::{String, CowString};
use ops;
use cmp;
use hash::{Hash, Hasher, Writer};
use path::{Path, GenericPath};
use old_path::{Path, GenericPath};
use sys::os_str::{Buf, Slice};
use sys_common::{AsInner, IntoInner, FromInner};

View File

@ -251,6 +251,7 @@ pub mod old_io;
pub mod os;
pub mod env;
pub mod path;
pub mod old_path;
pub mod rand;
pub mod time;

View File

@ -61,8 +61,8 @@ use old_io;
use iter::{Iterator, Extend};
use option::Option;
use option::Option::{Some, None};
use path::{Path, GenericPath};
use path;
use old_path::{Path, GenericPath};
use old_path;
use result::Result::{Err, Ok};
use slice::SliceExt;
use string::String;
@ -782,7 +782,7 @@ pub trait PathExtensions {
fn is_dir(&self) -> bool;
}
impl PathExtensions for path::Path {
impl PathExtensions for old_path::Path {
fn stat(&self) -> IoResult<FileStat> { stat(self) }
fn lstat(&self) -> IoResult<FileStat> { lstat(self) }
fn exists(&self) -> bool {

View File

@ -23,7 +23,7 @@
use prelude::v1::*;
use ffi::CString;
use path::BytesContainer;
use old_path::BytesContainer;
use old_io::{Listener, Acceptor, IoResult, TimedOut, standard_error};
use sys::pipe::UnixAcceptor as UnixAcceptorImp;
use sys::pipe::UnixListener as UnixListenerImp;

View File

@ -25,7 +25,7 @@ use old_io::{IoResult, IoError};
use old_io;
use libc;
use os;
use path::BytesContainer;
use old_path::BytesContainer;
use sync::mpsc::{channel, Receiver};
use sys::fs::FileDesc;
use sys::process::Process as ProcessImp;

View File

@ -17,7 +17,7 @@ use old_io;
use ops::Drop;
use option::Option::{None, Some};
use option::Option;
use path::{Path, GenericPath};
use old_path::{Path, GenericPath};
use rand::{Rng, thread_rng};
use result::Result::{Ok, Err};
use str::StrExt;

View File

@ -445,7 +445,7 @@ mod tests {
use clone::Clone;
use iter::IteratorExt;
use option::Option::{self, Some, None};
use path::GenericPath;
use old_path::GenericPath;
use slice::{AsSlice, SliceExt};
use str::{self, Str, StrExt};
use string::ToString;

View File

@ -1124,7 +1124,7 @@ mod tests {
use clone::Clone;
use iter::IteratorExt;
use option::Option::{self, Some, None};
use path::GenericPath;
use old_path::GenericPath;
use slice::{AsSlice, SliceExt};
use str::Str;
use string::ToString;

View File

@ -48,7 +48,7 @@ use old_io::{IoResult, IoError};
use ops::{Drop, FnOnce};
use option::Option::{Some, None};
use option::Option;
use path::{Path, GenericPath, BytesContainer};
use old_path::{Path, GenericPath, BytesContainer};
use ptr::PtrExt;
use ptr;
use result::Result::{Err, Ok};
@ -267,7 +267,7 @@ pub fn split_paths<T: BytesContainer>(unparsed: T) -> Vec<Path> {
///
/// ```rust
/// use std::os;
/// use std::path::Path;
/// use std::old_path::Path;
///
/// let key = "PATH";
/// let mut paths = os::getenv_as_bytes(key).map_or(Vec::new(), os::split_paths);
@ -470,7 +470,7 @@ pub fn tmpdir() -> Path {
/// # Example
/// ```rust
/// use std::os;
/// use std::path::Path;
/// use std::old_path::Path;
///
/// // Assume we're in a path like /home/someuser
/// let rel_path = Path::new("..");
@ -500,7 +500,7 @@ pub fn make_absolute(p: &Path) -> IoResult<Path> {
/// # Example
/// ```rust
/// use std::os;
/// use std::path::Path;
/// use std::old_path::Path;
///
/// let root = Path::new("/");
/// assert!(os::change_dir(&root).is_ok());

2567
src/libstd/path.rs Executable file

File diff suppressed because it is too large Load Diff

View File

@ -56,7 +56,7 @@
#[doc(no_inline)] pub use vec::Vec;
// NB: remove when path reform lands
#[doc(no_inline)] pub use path::{Path, GenericPath};
#[doc(no_inline)] pub use old_path::{Path, GenericPath};
// NB: remove when I/O reform lands
#[doc(no_inline)] pub use old_io::{Buffer, Writer, Reader, Seek, BufferPrelude};
// NB: remove when range syntax lands

View File

@ -20,7 +20,7 @@ mod imp {
use self::OsRngInner::*;
use old_io::{IoResult, File};
use path::Path;
use old_path::Path;
use rand::Rng;
use rand::reader::ReaderRng;
use result::Result::Ok;

View File

@ -16,7 +16,7 @@ use prelude::v1::*;
use sys::{last_error, retry};
use ffi::CString;
use num::Int;
use path::BytesContainer;
use old_path::BytesContainer;
use collections;
pub mod backtrace;

View File

@ -20,7 +20,7 @@ use str;
use string::{String, CowString};
use mem;
#[derive(Clone)]
#[derive(Clone, Hash)]
pub struct Buf {
pub inner: Vec<u8>
}

View File

@ -20,7 +20,7 @@ use old_io::{self, IoResult, IoError, EndOfFile};
use libc::{self, pid_t, c_void, c_int};
use mem;
use os;
use path::BytesContainer;
use old_path::BytesContainer;
use ptr;
use sync::mpsc::{channel, Sender, Receiver};
use sys::fs::FileDesc;

View File

@ -32,7 +32,7 @@ use libc;
use mem;
use ops::Drop;
use option::Option::{Some};
use path::Path;
use old_path::Path;
use ptr;
use result::Result::{Ok, Err};
use slice::SliceExt;

View File

@ -18,7 +18,7 @@ use result::Result;
use option::Option;
use mem;
#[derive(Clone)]
#[derive(Clone, Hash)]
pub struct Buf {
pub inner: Wtf8Buf
}

View File

@ -23,7 +23,7 @@ use old_io::process::{ProcessExit, ExitStatus};
use old_io::{IoResult, IoError};
use old_io;
use os;
use path::BytesContainer;
use old_path::BytesContainer;
use ptr;
use str;
use sync::{StaticMutex, MUTEX_INIT};

View File

@ -25,7 +25,7 @@ use serialize::{Decodable, Decoder, Encodable, Encoder};
use std::fmt;
use std::mem;
use std::ops::Deref;
use std::path::BytesContainer;
use std::old_path::BytesContainer;
use std::rc::Rc;
#[allow(non_camel_case_types)]

View File

@ -13,4 +13,4 @@
pub fn main() {
let r = 1..2..3;
//~^ ERROR expected one of `.`, `;`, or an operator, found `..`
}
}

View File

@ -13,4 +13,4 @@
pub fn main() {
let r = ..1..2;
//~^ ERROR expected one of `.`, `;`, or an operator, found `..`
}
}

View File

@ -149,4 +149,4 @@ fn main() {
assoc_enum(Enum::Variant2(8i64, 9i32));
}
fn zzz() { () }
fn zzz() { () }

View File

@ -11,7 +11,7 @@
use std::slice::SliceExt;
use std::old_io::{Command, fs, USER_RWX};
use std::os;
use std::path::BytesContainer;
use std::old_path::BytesContainer;
use std::rand::random;
fn main() {

View File

@ -1,4 +1,3 @@
// Copyright 2012-2014 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
@ -15,8 +14,8 @@
#![feature(box_syntax)]
#![feature(unboxed_closures)]
use std::path::{Path};
use std::path;
use std::old_path::{Path};
use std::old_path;
use std::result;
use std::thunk::Thunk;
@ -28,7 +27,7 @@ fn tester()
result::Result::Ok("more blah".to_string())
};
let path = path::Path::new("blah");
let path = old_path::Path::new("blah");
assert!(loader(&path).is_ok());
}

View File

@ -20,7 +20,7 @@ use std::old_io;
use std::old_io::fs;
use std::old_io::Command;
use std::os;
use std::path::Path;
use std::old_path::Path;
fn main() {
let my_args = os::args();