diff options
Diffstat (limited to 'src/libstd/path.rs')
| -rw-r--r-- | src/libstd/path.rs | 49 |
1 files changed, 46 insertions, 3 deletions
diff --git a/src/libstd/path.rs b/src/libstd/path.rs index 3956f948eb9..e398a5a28c9 100644 --- a/src/libstd/path.rs +++ b/src/libstd/path.rs @@ -100,8 +100,10 @@ #![stable(feature = "rust1", since = "1.0.0")] use ascii::*; +#[allow(deprecated)] use borrow::{Borrow, IntoCow, ToOwned, Cow}; use cmp; +use error::Error; use fmt; use fs; use hash::{Hash, Hasher}; @@ -1043,6 +1045,7 @@ impl PathBuf { self._push(path.as_ref()) } + #[allow(deprecated)] fn _push(&mut self, path: &Path) { // in general, a separator is needed if the rightmost byte is not a separator let mut need_sep = self.as_mut_vec().last().map(|c| !is_sep_byte(*c)).unwrap_or(false); @@ -1219,6 +1222,7 @@ impl Borrow<Path> for PathBuf { } #[stable(feature = "rust1", since = "1.0.0")] +#[allow(deprecated)] impl IntoCow<'static, Path> for PathBuf { fn into_cow(self) -> Cow<'static, Path> { Cow::Owned(self) @@ -1226,6 +1230,7 @@ impl IntoCow<'static, Path> for PathBuf { } #[stable(feature = "rust1", since = "1.0.0")] +#[allow(deprecated)] impl<'a> IntoCow<'a, Path> for &'a Path { fn into_cow(self) -> Cow<'a, Path> { Cow::Borrowed(self) @@ -1328,6 +1333,12 @@ pub struct Path { inner: OsStr, } +/// An error returned from the `Path::strip_prefix` method indicating that the +/// prefix was not found in `self`. +#[derive(Debug, Clone, PartialEq, Eq)] +#[stable(since = "1.7.0", feature = "strip_prefix")] +pub struct StripPrefixError(()); + impl Path { // The following (private!) function allows construction of a path from a u8 // slice, which is only safe when it is known to follow the OsStr encoding. @@ -1447,6 +1458,7 @@ impl Path { /// assert!(!Path::new("foo.txt").is_absolute()); /// ``` #[stable(feature = "rust1", since = "1.0.0")] + #[allow(deprecated)] pub fn is_absolute(&self) -> bool { self.has_root() && (cfg!(unix) || self.prefix().is_some()) } @@ -1473,6 +1485,8 @@ impl Path { #[unstable(feature = "path_prefix", reason = "uncertain whether to expose this convenience", issue = "27722")] + #[rustc_deprecated(since = "1.7.0", + reason = "inspect components().next() instead")] pub fn prefix(&self) -> Option<Prefix> { self.components().prefix } @@ -1561,12 +1575,28 @@ impl Path { /// returns false), then `relative_from` returns `None`. #[unstable(feature = "path_relative_from", reason = "see #23284", issue = "23284")] + #[rustc_deprecated(since = "1.7.0", reason = "renamed to strip_prefix")] pub fn relative_from<'a, P: ?Sized + AsRef<Path>>(&'a self, base: &'a P) -> Option<&Path> { - self._relative_from(base.as_ref()) + self._strip_prefix(base.as_ref()).ok() + } + + /// Returns a path that, when joined onto `base`, yields `self`. + /// + /// If `base` is not a prefix of `self` (i.e. `starts_with` + /// returns false), then `relative_from` returns `None`. + #[stable(since = "1.7.0", feature = "path_strip_prefix")] + pub fn strip_prefix<'a, P: ?Sized>(&'a self, base: &'a P) + -> Result<&'a Path, StripPrefixError> + where P: AsRef<Path> + { + self._strip_prefix(base.as_ref()) } - fn _relative_from<'a>(&'a self, base: &'a Path) -> Option<&'a Path> { - iter_after(self.components(), base.components()).map(|c| c.as_path()) + fn _strip_prefix<'a>(&'a self, base: &'a Path) + -> Result<&'a Path, StripPrefixError> { + iter_after(self.components(), base.components()) + .map(|c| c.as_path()) + .ok_or(StripPrefixError(())) } /// Determines whether `base` is a prefix of `self`. @@ -2015,6 +2045,18 @@ impl_eq!(Cow<'a, Path>, Path); impl_eq!(Cow<'a, Path>, &'b Path); impl_eq!(Cow<'a, Path>, PathBuf); +#[stable(since = "1.7.0", feature = "strip_prefix")] +impl fmt::Display for StripPrefixError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + self.description().fmt(f) + } +} + +#[stable(since = "1.7.0", feature = "strip_prefix")] +impl Error for StripPrefixError { + fn description(&self) -> &str { "prefix not found" } +} + #[cfg(test)] mod tests { use super::*; @@ -2105,6 +2147,7 @@ mod tests { ); #[test] + #[allow(deprecated)] fn into_cow() { use borrow::{Cow, IntoCow}; |
