Auto merge of #4562 - SimonSapin:btree-manifest, r=matklad
authorbors <bors@rust-lang.org>
Mon, 2 Oct 2017 10:40:21 +0000 (10:40 +0000)
committerbors <bors@rust-lang.org>
Mon, 2 Oct 2017 10:40:21 +0000 (10:40 +0000)
commitd7e3b7f24265016c9ce4455504b914dc92c92b07
tree05fa0629239edb4e18f38d86ecd7b462c542aff8
parenta888e111e4938b8c305190fd0eaebef5f4c1718f
parentf38c53f5c3d0a98d11ac286f4889fa29034be4e8
Auto merge of #4562 - SimonSapin:btree-manifest, r=matklad

Make manifest serialization deterministic

Fixes #4326

`cargo package` (and so `cargo publish`) parses a crate’s `Cargo.toml`, makes some modifications, and re-serializes it. Because the `TomlManifest` struct uses `HashMap` with its default `RandomState` hasher, the maps’ iteration order changed on every run.

As a result, when using `cargo vendor`, updating a dependency would generate a diff larger than necessary, with non-significant order-changes obscuring significant changes.

This replaces some uses of `HashMap` with `BTreeMap`, whose iteration order is deterministic (based on `Ord`).