@@ -13,6 +13,7 @@ use std::{map, json, tempfile, term, sort, getopts};
13
13
use map:: HashMap ;
14
14
use to_str:: to_str;
15
15
use getopts:: { optflag, optopt, opt_present} ;
16
+ use dvec:: DVec ;
16
17
17
18
type package = {
18
19
name : ~str ,
@@ -60,7 +61,7 @@ type source = @{
60
61
mut method : ~str ,
61
62
mut key : Option < ~str > ,
62
63
mut keyfp : Option < ~str > ,
63
- mut packages : ~ [ mut package ]
64
+ packages : DVec < package >
64
65
} ;
65
66
66
67
type cargo = {
@@ -448,7 +449,7 @@ fn parse_source(name: ~str, j: json::Json) -> source {
448
449
mut method: method,
449
450
mut key: key,
450
451
mut keyfp: keyfp,
451
- mut packages: ~ [ mut ] } ;
452
+ packages: DVec ( ) } ;
452
453
}
453
454
_ => fail ~"needed dict value in source"
454
455
} ;
@@ -558,14 +559,14 @@ fn load_one_source_package(src: source, p: map::HashMap<~str, json::Json>) {
558
559
versions: ~[ ]
559
560
} ;
560
561
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
+ }
569
570
}
570
571
571
572
log(debug, ~" loaded package: " + src.name + ~" /" + name);
@@ -713,10 +714,7 @@ fn configure(opts: options) -> cargo {
713
714
714
715
fn for_each_package ( c : cargo , b : fn ( source , package ) ) {
715
716
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| {
720
718
b( v, p) ;
721
719
}
722
720
}
@@ -948,30 +946,28 @@ fn install_named(c: cargo, wd: &Path, name: ~str) {
948
946
949
947
fn install_uuid_specific( c: cargo, wd: & Path , src: ~str , uuid: ~str ) {
950
948
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
+ _ => ( )
961
958
}
962
959
error( ~"can' t find package: " + src + ~" /" + uuid) ;
963
960
}
964
961
965
962
fn install_named_specific( c: cargo, wd: & Path , src: ~str , name: ~str ) {
966
963
match c. sources. find( src) {
967
964
Some ( s) => {
968
- let packages = copy s. packages;
969
- if vec:: any( packages, |p| {
965
+ for s. packages. each |p| {
970
966
if p. name == name {
971
967
install_package( c, src, wd, p) ;
972
- true
973
- } else { false }
974
- } ) { return ; }
968
+ return ;
969
+ }
970
+ }
975
971
}
976
972
_ => ( )
977
973
}
@@ -1500,8 +1496,7 @@ fn print_pkg(s: source, p: package) {
1500
1496
fn print_source( s : source ) {
1501
1497
info ( s. name + ~" ( " + s.url + ~" ) ") ;
1502
1498
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 ( ) ) ;
1505
1500
let l = vec:: len ( pks) ;
1506
1501
1507
1502
print( io:: with_str_writer( |writer| {
@@ -1685,7 +1680,7 @@ fn cmd_sources(c: cargo) {
1685
1680
mut method: assume_source_method ( url) ,
1686
1681
mut key: None ,
1687
1682
mut keyfp: None ,
1688
- mut packages: ~ [ mut ]
1683
+ packages : DVec ( )
1689
1684
} ) ;
1690
1685
info ( fmt ! ( "added source: %s" , name) ) ;
1691
1686
}
0 commit comments