diff --git a/src/librustpkg/crate_id.rs b/src/librustpkg/crate_id.rs index 7ff8417f23c..9a3c47823e0 100644 --- a/src/librustpkg/crate_id.rs +++ b/src/librustpkg/crate_id.rs @@ -9,9 +9,10 @@ // except according to those terms. use version::{try_getting_version, try_getting_local_version, - Version, NoVersion, split_version}; + Version, NoVersion, ExactRevision}; use std::hash::Streaming; use std::hash; +use syntax::crateid; /// Path-fragment identifier of a package such as /// 'github.com/graydon/test'; path must be a relative @@ -45,27 +46,14 @@ impl CrateId { pub fn new(s: &str) -> CrateId { use conditions::bad_pkg_id::cond; - let mut given_version = None; - - // Did the user request a specific version? - let s = match split_version(s) { - Some((path, v)) => { - given_version = Some(v); - path - } - None => { - s - } - }; - - let path = Path::new(s); - if !path.is_relative() { - return cond.raise((path, ~"absolute crate_id")); + let raw_crateid: Option = from_str(s); + if raw_crateid.is_none() { + return cond.raise((Path::new(s), ~"bad crateid")) } - if path.filename().is_none() { - return cond.raise((path, ~"0-length crate_id")); - } - let short_name = path.filestem_str().expect(format!("Strange path! {}", s)); + let raw_crateid = raw_crateid.unwrap(); + let crateid::CrateId { path, name, version } = raw_crateid; + let path = Path::new(path); + let given_version = version.map(|v| ExactRevision(v)); let version = match given_version { Some(v) => v, @@ -79,8 +67,8 @@ impl CrateId { }; CrateId { - path: path.clone(), - short_name: short_name.to_owned(), + path: path, + short_name: name, version: version } } diff --git a/src/librustpkg/tests.rs b/src/librustpkg/tests.rs index 86b323609d3..0e78e907de0 100644 --- a/src/librustpkg/tests.rs +++ b/src/librustpkg/tests.rs @@ -26,7 +26,7 @@ use extra::getopts::groups::getopts; use std::run::ProcessOutput; use installed_packages::list_installed_packages; use crate_id::{CrateId}; -use version::{ExactRevision, NoVersion, Version, Tagged}; +use version::{ExactRevision, NoVersion, Version}; use path_util::{target_executable_in_workspace, target_test_in_workspace, target_bench_in_workspace, make_dir_rwx, library_in_workspace, installed_library_in_workspace, @@ -35,7 +35,6 @@ use path_util::{target_executable_in_workspace, target_test_in_workspace, chmod_read_only, platform_library_name}; use rustc::back::link::get_cc_prog; use rustc::metadata::filesearch::{rust_path, libdir, rustlibdir}; -use rustc::driver::session; use rustc::driver::driver::{build_session, build_session_options, host_triple, optgroups}; use syntax::diagnostic; use target::*; @@ -76,14 +75,6 @@ fn git_repo_pkg() -> CrateId { } } -fn git_repo_pkg_with_tag(a_tag: ~str) -> CrateId { - CrateId { - path: Path::new("mockgithub.com/catamorphism/test-pkg"), - short_name: ~"test-pkg", - version: Tagged(a_tag) - } -} - fn writeFile(file_path: &Path, contents: &str) { let mut out = File::create(file_path); out.write(contents.as_bytes()); @@ -487,12 +478,6 @@ fn lib_output_file_name(workspace: &Path, short_name: &str) -> Path { &NoVersion).expect("lib_output_file_name") } -fn output_file_name(workspace: &Path, short_name: ~str) -> Path { - target_build_dir(workspace).join(short_name.as_slice()) - .join(format!("{}{}", short_name, - os::consts::EXE_SUFFIX)) -} - #[cfg(target_os = "linux")] fn touch_source_file(workspace: &Path, crateid: &CrateId) { use conditions::bad_path::cond; @@ -746,8 +731,8 @@ fn test_crate_ids_must_be_relative_path_like() { CrateId::new("github.com/catamorphism/test-pkg").to_str()); cond.trap(|(p, e)| { - assert!(p.filename().is_none()) - assert!("0-length crate_id" == e); + assert!(p.filename().is_none()); + assert!("bad crateid" == e); whatever.clone() }).inside(|| { let x = CrateId::new(""); @@ -757,7 +742,7 @@ fn test_crate_ids_must_be_relative_path_like() { cond.trap(|(p, e)| { let abs = os::make_absolute(&Path::new("foo/bar/quux")); assert_eq!(p, abs); - assert!("absolute crate_id" == e); + assert!("bad crateid" == e); whatever.clone() }).inside(|| { let zp = os::make_absolute(&Path::new("foo/bar/quux")); @@ -1894,9 +1879,11 @@ fn crateid_pointing_to_subdir() { fs::mkdir_recursive(&foo_dir, io::UserRWX); fs::mkdir_recursive(&bar_dir, io::UserRWX); writeFile(&foo_dir.join("lib.rs"), - "#[crate_id=\"mockgithub.com/mozilla/some_repo/extras/foo\"]; pub fn f() {}"); + "#[crate_id=\"mockgithub.com/mozilla/some_repo/extras/rust-foo#foo:0.0\"];" + + "pub fn f() {}"); writeFile(&bar_dir.join("lib.rs"), - "#[crate_id=\"mockgithub.com/mozilla/some_repo/extras/bar\"]; pub fn g() {}"); + "#[crate_id=\"mockgithub.com/mozilla/some_repo/extras/rust-bar#bar:0.0\"];" + + "pub fn g() {}"); debug!("Creating a file in {}", workspace.display()); let testpkg_dir = workspace.join_many(["src", "testpkg-0.0"]); @@ -2318,7 +2305,7 @@ fn find_sources_in_cwd() { let source_dir = temp_dir.join("foo"); fs::mkdir_recursive(&source_dir, io::UserRWX); writeFile(&source_dir.join("main.rs"), - r#"#[crate_id="foo"]; fn main() { let _x = (); }"#); + r#"#[crate_id="rust-foo#foo:0.0"]; fn main() { let _x = (); }"#); command_line_test([~"install", ~"foo"], &source_dir); assert_executable_exists(&source_dir.join(".rust"), "foo"); }