@@ -11,6 +11,7 @@ use syntax::diagnostic;
11
11
12
12
use result:: { Ok , Err } ;
13
13
use io:: WriterUtil ;
14
+ use send_map:: linear:: LinearMap ;
14
15
use std:: { map, json, tempfile, term, sort, getopts} ;
15
16
use map:: HashMap ;
16
17
use to_str:: to_str;
@@ -400,7 +401,7 @@ fn need_dir(s: &Path) {
400
401
}
401
402
}
402
403
403
- fn valid_pkg_name ( s : ~ str ) -> bool {
404
+ fn valid_pkg_name ( s : & str ) -> bool {
404
405
fn is_valid_digit ( c : char ) -> bool {
405
406
( '0' <= c && c <= '9' ) ||
406
407
( 'a' <= c && c <= 'z' ) ||
@@ -412,27 +413,27 @@ fn valid_pkg_name(s: ~str) -> bool {
412
413
s. all ( is_valid_digit)
413
414
}
414
415
415
- fn parse_source ( name : ~str , j : json:: Json ) -> @Source {
416
+ fn parse_source ( name : ~str , j : & json:: Json ) -> @Source {
416
417
if !valid_pkg_name ( name) {
417
418
fail fmt ! ( "'%s' is an invalid source name" , name) ;
418
419
}
419
420
420
- match j {
421
- json:: Dict ( j) => {
422
- let mut url = match j. find ( ~"url") {
423
- Some ( json:: String ( u) ) => * u,
421
+ match * j {
422
+ json:: Object ( j) => {
423
+ let mut url = match j. find ( & ~"url") {
424
+ Some ( json:: String ( u) ) => u,
424
425
_ => fail ~"needed ' url' field in source"
425
426
} ;
426
- let method = match j. find ( ~"method") {
427
- Some ( json:: String ( u) ) => * u,
427
+ let method = match j. find ( & ~"method") {
428
+ Some ( json:: String ( u) ) => u,
428
429
_ => assume_source_method ( url)
429
430
} ;
430
- let key = match j. find ( ~"key") {
431
- Some ( json:: String ( u) ) => Some ( * u) ,
431
+ let key = match j. find ( & ~"key") {
432
+ Some ( json:: String ( u) ) => Some ( u) ,
432
433
_ => None
433
434
} ;
434
- let keyfp = match j. find ( ~"keyfp") {
435
- Some ( json:: String ( u) ) => Some ( * u) ,
435
+ let keyfp = match j. find ( & ~"keyfp") {
436
+ Some ( json:: String ( u) ) => Some ( u) ,
436
437
_ => None
437
438
} ;
438
439
if method == ~"file" {
@@ -454,88 +455,88 @@ fn try_parse_sources(filename: &Path, sources: map::HashMap<~str, @Source>) {
454
455
if !os:: path_exists ( filename) { return ; }
455
456
let c = io:: read_whole_file_str ( filename) ;
456
457
match json:: from_str ( c. get ( ) ) {
457
- Ok ( json:: Dict ( j) ) => {
458
- for j. each |k, v| {
459
- sources. insert ( k, parse_source ( k, v) ) ;
460
- debug ! ( "source: %s" , k) ;
458
+ Ok ( json:: Object ( j) ) => {
459
+ for j. each |k, v| {
460
+ sources. insert ( copy * k, parse_source ( * k, v) ) ;
461
+ debug ! ( "source: %s" , * k) ;
461
462
}
462
463
}
463
464
Ok ( _) => fail ~"malformed sources. json ",
464
465
Err ( e) => fail fmt ! ( "%s:%s" , filename. to_str( ) , e. to_str( ) )
465
466
}
466
467
}
467
468
468
- fn load_one_source_package ( src : @Source , p : map :: HashMap < ~ str , json:: Json > ) {
469
- let name = match p. find ( ~"name") {
469
+ fn load_one_source_package ( src : @Source , p : & json:: Object ) {
470
+ let name = match p. find ( & ~"name") {
470
471
Some ( json:: String ( n) ) => {
471
- if !valid_pkg_name ( * n) {
472
+ if !valid_pkg_name ( n) {
472
473
warn ( ~"malformed source json: "
473
- + src.name + ~" , ' " + * n + ~"' "+
474
+ + src.name + ~" , ' " + n + ~"' "+
474
475
~" is an invalid name ( alphanumeric, underscores and" +
475
476
~" dashes only) ") ;
476
477
return ;
477
478
}
478
- * n
479
+ n
479
480
}
480
481
_ => {
481
482
warn ( ~"malformed source json: " + src.name + ~" ( missing name) ") ;
482
483
return ;
483
484
}
484
485
} ;
485
486
486
- let uuid = match p. find ( ~"uuid") {
487
+ let uuid = match p. find ( & ~"uuid") {
487
488
Some ( json:: String ( n) ) => {
488
- if !is_uuid ( * n) {
489
+ if !is_uuid ( n) {
489
490
warn ( ~"malformed source json: "
490
- + src.name + ~" , ' " + * n + ~"' "+
491
+ + src.name + ~" , ' " + n + ~"' "+
491
492
~" is an invalid uuid") ;
492
493
return ;
493
494
}
494
- * n
495
+ n
495
496
}
496
497
_ => {
497
498
warn ( ~"malformed source json: " + src.name + ~" ( missing uuid) ") ;
498
499
return ;
499
500
}
500
501
} ;
501
502
502
- let url = match p. find ( ~"url") {
503
- Some ( json:: String ( n) ) => * n,
503
+ let url = match p. find ( & ~"url") {
504
+ Some ( json:: String ( n) ) => n,
504
505
_ => {
505
506
warn ( ~"malformed source json: " + src.name + ~" ( missing url) ") ;
506
507
return ;
507
508
}
508
509
} ;
509
510
510
- let method = match p. find ( ~"method") {
511
- Some ( json:: String ( n) ) => * n,
511
+ let method = match p. find ( & ~"method") {
512
+ Some ( json:: String ( n) ) => n,
512
513
_ => {
513
514
warn ( ~"malformed source json: "
514
515
+ src.name + ~" ( missing method) ") ;
515
516
return ;
516
517
}
517
518
} ;
518
519
519
- let reference = match p. find ( ~"ref ") {
520
- Some(json::String(n)) => Some(* n),
520
+ let reference = match p. find ( & ~"ref ") {
521
+ Some(json::String(n)) => Some(n),
521
522
_ => None
522
523
};
523
524
524
525
let mut tags = ~[];
525
- match p.find(~" tags") {
526
+ match p.find(& ~" tags") {
526
527
Some ( json:: List ( js) ) => {
527
- for ( * js ) . each |j| {
528
+ for js . each |j| {
528
529
match * j {
529
- json:: String ( j) => vec:: grow ( tags, 1 u, * j) ,
530
+ json:: String ( j) => vec:: grow ( tags, 1 u, j) ,
530
531
_ => ( )
531
532
}
532
533
}
533
534
}
534
535
_ => ( )
535
536
}
536
537
537
- let description = match p. find ( ~"description") {
538
- Some ( json:: String ( n) ) => * n,
538
+ let description = match p. find ( & ~"description") {
539
+ Some ( json:: String ( n) ) => n,
539
540
_ => {
540
541
warn ( ~"malformed source json: " + src.name
541
542
+ ~" ( missing description) ") ;
@@ -573,8 +574,8 @@ fn load_source_info(c: &Cargo, src: @Source) {
573
574
if !os:: path_exists ( & srcfile) { return ; }
574
575
let srcstr = io:: read_whole_file_str ( & srcfile) ;
575
576
match json:: from_str ( srcstr. get ( ) ) {
576
- Ok ( json:: Dict ( s ) ) => {
577
- let o = parse_source ( src. name , json:: Dict ( s ) ) ;
577
+ Ok ( ref json @ json :: Object ( _ ) ) => {
578
+ let o = parse_source ( src. name , json) ;
578
579
579
580
src. key = o. key ;
580
581
src. keyfp = o. keyfp ;
@@ -596,9 +597,9 @@ fn load_source_packages(c: &Cargo, src: @Source) {
596
597
let pkgstr = io:: read_whole_file_str ( & pkgfile) ;
597
598
match json:: from_str ( pkgstr. get ( ) ) {
598
599
Ok ( json:: List ( js) ) => {
599
- for ( * js ) . each |j| {
600
+ for js . each |j| {
600
601
match * j {
601
- json:: Dict ( p) => {
602
+ json:: Object ( p) => {
602
603
load_one_source_package ( src, p) ;
603
604
}
604
605
_ => {
@@ -663,11 +664,11 @@ fn configure(opts: Options) -> Cargo {
663
664
664
665
let p = get_cargo_dir ( ) . get ( ) ;
665
666
666
- let sources = map :: HashMap ( ) ;
667
+ let sources = HashMap ( ) ;
667
668
try_parse_sources ( & home. push ( "sources.json" ) , sources) ;
668
669
try_parse_sources ( & home. push ( "local-sources.json" ) , sources) ;
669
670
670
- let dep_cache = map :: HashMap ( ) ;
671
+ let dep_cache = HashMap ( ) ;
671
672
672
673
let mut c = Cargo {
673
674
pgp : pgp:: supported ( ) ,
@@ -707,10 +708,10 @@ fn configure(opts: Options) -> Cargo {
707
708
c
708
709
}
709
710
710
- fn for_each_package ( c : & Cargo , b : fn ( s : @Source , p : Package ) ) {
711
+ fn for_each_package ( c : & Cargo , b : fn ( s : @Source , p : & Package ) ) {
711
712
for c. sources. each_value |v| {
712
713
for v. packages. each |p| {
713
- b( v, * p) ;
714
+ b( v, p) ;
714
715
}
715
716
}
716
717
}
@@ -876,7 +877,7 @@ fn install_package(c: &Cargo, src: ~str, wd: &Path, pkg: Package) {
876
877
match method {
877
878
~"git" => install_git( c, wd, url, copy pkg. reference) ,
878
879
~"file" => install_file( c, wd, & Path ( url) ) ,
879
- ~"curl" => install_curl( c, wd, copy url) ,
880
+ ~"curl" => install_curl( c, wd, url) ,
880
881
_ => ( )
881
882
}
882
883
}
@@ -895,7 +896,7 @@ fn install_uuid(c: &Cargo, wd: &Path, uuid: ~str) {
895
896
let mut ps = ~[ ] ;
896
897
for_each_package( c, |s, p| {
897
898
if p. uuid == uuid {
898
- vec : : grow ( ps, 1 u , ( s. name, copy p) ) ;
899
+ vec : : push ( ps, ( s. name, copy * p) ) ;
899
900
}
900
901
} ) ;
901
902
if vec:: len( ps) == 1 u {
@@ -919,7 +920,7 @@ fn install_named(c: &Cargo, wd: &Path, name: ~str) {
919
920
let mut ps = ~[ ] ;
920
921
for_each_package( c, |s, p| {
921
922
if p. name == name {
922
- vec : : grow ( ps, 1 u , ( s. name, copy p) ) ;
923
+ vec : : push ( ps, ( s. name, copy * p) ) ;
923
924
}
924
925
} ) ;
925
926
if vec:: len( ps) == 1 u {
@@ -1477,7 +1478,7 @@ fn cmd_init(c: &Cargo) {
1477
1478
info ( fmt ! ( "initialized .cargo in %s" , c. root. to_str( ) ) ) ;
1478
1479
}
1479
1480
1480
- fn print_pkg ( s : @Source , p : Package ) {
1481
+ fn print_pkg ( s : @Source , p : & Package ) {
1481
1482
let mut m = s. name + ~"/" + p. name + ~" ( " + p.uuid + ~" ) ";
1482
1483
if vec:: len ( p. tags ) > 0 u {
1483
1484
m = m + ~" [ " + str::connect(p.tags, ~" , ") + ~" ] ";
@@ -1572,7 +1573,7 @@ fn dump_cache(c: &Cargo) {
1572
1573
need_dir ( & c. root ) ;
1573
1574
1574
1575
let out = c. root . push ( "cache.json" ) ;
1575
- let _root = json:: Dict ( map :: HashMap ( ) ) ;
1576
+ let _root = json:: Object ( ~ LinearMap ( ) ) ;
1576
1577
1577
1578
if os:: path_exists ( & out) {
1578
1579
copy_warn ( & out, & c. root . push ( "cache.json.old" ) ) ;
@@ -1593,33 +1594,31 @@ fn dump_sources(c: &Cargo) {
1593
1594
1594
1595
match io:: buffered_file_writer ( & out) {
1595
1596
result:: Ok ( writer) => {
1596
- let hash = map:: HashMap ( ) ;
1597
- let root = json:: Dict ( hash) ;
1597
+ let mut hash = ~LinearMap ( ) ;
1598
1598
1599
- for c. sources. each |k, v| {
1600
- let chash = map:: HashMap ( ) ;
1601
- let child = json:: Dict ( chash) ;
1599
+ for c. sources. each |k, v| {
1600
+ let mut chash = ~LinearMap ( ) ;
1602
1601
1603
- chash. insert ( ~"url", json:: String ( @ v. url ) ) ;
1604
- chash. insert ( ~"method", json:: String ( @ v. method ) ) ;
1602
+ chash. insert ( ~"url", json:: String ( v. url ) ) ;
1603
+ chash. insert ( ~"method", json:: String ( v. method ) ) ;
1605
1604
1606
1605
match copy v. key {
1607
1606
Some ( key) => {
1608
- chash. insert ( ~"key", json:: String ( @ key) ) ;
1607
+ chash. insert ( ~"key", json:: String ( copy key) ) ;
1609
1608
}
1610
1609
_ => ( )
1611
1610
}
1612
1611
match copy v. keyfp {
1613
1612
Some ( keyfp) => {
1614
- chash. insert ( ~"keyfp", json:: String ( @ keyfp) ) ;
1613
+ chash. insert ( ~"keyfp", json:: String ( copy keyfp) ) ;
1615
1614
}
1616
1615
_ => ( )
1617
1616
}
1618
1617
1619
- hash. insert ( k, child ) ;
1618
+ hash. insert ( copy k, json :: Object ( chash ) ) ;
1620
1619
}
1621
1620
1622
- writer . write_str ( json:: to_str ( root ) ) ;
1621
+ json :: to_writer ( writer , & json:: Object ( hash ) )
1623
1622
}
1624
1623
result:: Err ( e) => {
1625
1624
error ( fmt ! ( "could not dump sources: %s" , e) ) ;
0 commit comments