use util::{CargoResult, Graph, human, internal};
+#[deriving(PartialEq, Eq)]
pub struct Resolve {
graph: Graph<PackageId>,
root: PackageId
#![warn(warnings)]
use std::collections::HashSet;
-use std::io::{mod, File};
+use std::io::File;
use serialize::{Encodable, Decodable};
use toml::Encoder;
}
pub fn write_resolve(pkg: &Package, resolve: &Resolve) -> CargoResult<()> {
+ let loc = pkg.get_root().join("Cargo.lock");
+ match load_lockfile(&loc, pkg.get_package_id().get_source_id()) {
+ Ok(Some(ref prev_resolve)) if prev_resolve == resolve => return Ok(()),
+ _ => {}
+ }
+
+
let mut e = Encoder::new();
resolve.encode(&mut e).unwrap();
emit_package(dep, &mut out);
}
- let loc = pkg.get_root().join("Cargo.lock");
- let mut f = try!(File::open_mode(&loc, io::Open, io::ReadWrite));
- let prev = try!(f.read_to_string());
- if prev != out {
- try!(f.seek(0, io::SeekSet));
- try!(f.write_str(out.as_slice()));
- }
+ try!(File::create(&loc).write_str(out.as_slice()));
Ok(())
}
Ok(())
}
}
+
+impl<N: Eq + Hash> PartialEq for Graph<N> {
+ fn eq(&self, other: &Graph<N>) -> bool { self.nodes.eq(&other.nodes) }
+}
+impl<N: Eq + Hash> Eq for Graph<N> {}
--- /dev/null
+use std::io::File;
+
+use support::{project, execs, cargo_dir, ResultTest};
+use support::paths::PathExt;
+use hamcrest::assert_that;
+
+fn setup() {}
+
+test!(ignores_carriage_return {
+ let p = project("foo")
+ .file("Cargo.toml", r#"
+ [package]
+ name = "foo"
+ authors = []
+ version = "0.0.1"
+ "#)
+ .file("src/main.rs", r#"
+ mod a; fn main() {}
+ "#)
+ .file("src/a.rs", "");
+
+ assert_that(p.cargo_process("cargo-build"),
+ execs().with_status(0));
+
+ let lockfile = p.root().join("Cargo.lock");
+ let lock = File::open(&lockfile).read_to_string();
+ let lock = lock.assert();
+ let lock = lock.as_slice().replace("\n", "\r\n");
+ File::create(&lockfile).write_str(lock.as_slice()).assert();
+ lockfile.move_into_the_past().assert();
+ let mtime = lockfile.stat().assert().modified;
+ assert_that(p.process(cargo_dir().join("cargo-build")),
+ execs().with_status(0));
+ assert_eq!(lockfile.stat().assert().modified, mtime);
+})
mod test_cargo_compile_plugins;
mod test_cargo_doc;
mod test_cargo_freshness;
+mod test_cargo_generate_lockfile;