Skip to content

Commit 0a50489

Browse files
committed
Convert package list to dvec (cc #2280)
1 parent 109055c commit 0a50489

File tree

1 file changed

+27
-32
lines changed

1 file changed

+27
-32
lines changed

src/cargo/cargo.rs

+27-32
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use std::{map, json, tempfile, term, sort, getopts};
1313
use map::HashMap;
1414
use to_str::to_str;
1515
use getopts::{optflag, optopt, opt_present};
16+
use dvec::DVec;
1617

1718
type package = {
1819
name: ~str,
@@ -60,7 +61,7 @@ type source = @{
6061
mut method: ~str,
6162
mut key: Option<~str>,
6263
mut keyfp: Option<~str>,
63-
mut packages: ~[mut package]
64+
packages: DVec<package>
6465
};
6566

6667
type cargo = {
@@ -448,7 +449,7 @@ fn parse_source(name: ~str, j: json::Json) -> source {
448449
mut method: method,
449450
mut key: key,
450451
mut keyfp: keyfp,
451-
mut packages: ~[mut] };
452+
packages: DVec() };
452453
}
453454
_ => fail ~"needed dict value in source"
454455
};
@@ -558,14 +559,14 @@ fn load_one_source_package(src: source, p: map::HashMap<~str, json::Json>) {
558559
versions: ~[]
559560
};
560561

561-
match vec::position(src.packages, |pkg| pkg.uuid == uuid) {
562-
Some(idx) => {
563-
src.packages[idx] = newpkg;
564-
log(debug, ~" updated package: " + src.name + ~"/" + name);
565-
}
566-
None => {
567-
vec::grow(src.packages, 1u, newpkg);
568-
}
562+
match src.packages.position(|pkg| pkg.uuid == uuid) {
563+
Some(idx) => {
564+
src.packages.set_elt(idx, newpkg);
565+
log(debug, ~" updated package: " + src.name + ~"/" + name);
566+
}
567+
None => {
568+
src.packages.push(newpkg);
569+
}
569570
}
570571
571572
log(debug, ~" loaded package: " + src.name + ~"/" + name);
@@ -713,10 +714,7 @@ fn configure(opts: options) -> cargo {
713714

714715
fn for_each_package(c: cargo, b: fn(source, package)) {
715716
for c.sources.each_value |v| {
716-
// FIXME (#2280): this temporary shouldn't be
717-
// necessary, but seems to be, for borrowing.
718-
let pks = copy v.packages;
719-
for vec::each(pks) |p| {
717+
for v.packages.each |p| {
720718
b(v, p);
721719
}
722720
}
@@ -948,30 +946,28 @@ fn install_named(c: cargo, wd: &Path, name: ~str) {
948946

949947
fn install_uuid_specific(c: cargo, wd: &Path, src: ~str, uuid: ~str) {
950948
match c.sources.find(src) {
951-
Some(s) => {
952-
let packages = copy s.packages;
953-
if vec::any(packages, |p| {
954-
if p.uuid == uuid {
955-
install_package(c, src, wd, p);
956-
true
957-
} else { false }
958-
}) { return; }
959-
}
960-
_ => ()
949+
Some(s) => {
950+
for s.packages.each |p| {
951+
if p.uuid == uuid {
952+
install_package(c, src, wd, p);
953+
return;
954+
}
955+
}
956+
}
957+
_ => ()
961958
}
962959
error(~"can't find package: " + src + ~"/" + uuid);
963960
}
964961

965962
fn install_named_specific(c: cargo, wd: &Path, src: ~str, name: ~str) {
966963
match c.sources.find(src) {
967964
Some(s) => {
968-
let packages = copy s.packages;
969-
if vec::any(packages, |p| {
965+
for s.packages.each |p| {
970966
if p.name == name {
971967
install_package(c, src, wd, p);
972-
true
973-
} else { false }
974-
}) { return; }
968+
return;
969+
}
970+
}
975971
}
976972
_ => ()
977973
}
@@ -1500,8 +1496,7 @@ fn print_pkg(s: source, p: package) {
15001496
fn print_source(s: source) {
15011497
info(s.name + ~" (" + s.url + ~")");
15021498

1503-
let unsorted_pks = s.packages; // to prevent illegal borrow?
1504-
let pks = sort::merge_sort(sys::shape_lt, unsorted_pks);
1499+
let pks = sort::merge_sort(sys::shape_lt, s.packages.get());
15051500
let l = vec::len(pks);
15061501

15071502
print(io::with_str_writer(|writer| {
@@ -1685,7 +1680,7 @@ fn cmd_sources(c: cargo) {
16851680
mut method: assume_source_method(url),
16861681
mut key: None,
16871682
mut keyfp: None,
1688-
mut packages: ~[mut]
1683+
packages: DVec()
16891684
});
16901685
info(fmt!("added source: %s", name));
16911686
}

0 commit comments

Comments
 (0)