@@ -476,6 +476,25 @@ fn install_package(c: cargo, wd: str, pkg: package) {
476
476
}
477
477
}
478
478
479
+ fn cargo_suggestion(c: cargo, syncing: bool, fallback: fn())
480
+ {
481
+ if c.sources.size() == 0u {
482
+ error("No sources defined. You may wish to run " +
483
+ "\"cargo init\" then \"cargo sync\".");
484
+ ret;
485
+ }
486
+ if !syncing {
487
+ let npkg = 0u;
488
+ c.sources.values({ |v| npkg += vec::len(v.packages) });
489
+ if npkg == 0u {
490
+ error("No packages known. You may wish to run " +
491
+ "\"cargo sync\".");
492
+ ret;
493
+ }
494
+ }
495
+ fallback();
496
+ }
497
+
479
498
fn install_uuid(c: cargo, wd: str, uuid: str) {
480
499
let ps = [];
481
500
for_each_package(c, { |s, p|
@@ -489,7 +508,7 @@ fn install_uuid(c: cargo, wd: str, uuid: str) {
489
508
install_package(c, wd, p);
490
509
ret;
491
510
} else if vec::len(ps) == 0u {
492
- error("No packages." );
511
+ cargo_suggestion(c, false, { || error("No packages match uuid."); } );
493
512
ret;
494
513
}
495
514
error("Found multiple packages:");
@@ -510,7 +529,7 @@ fn install_named(c: cargo, wd: str, name: str) {
510
529
install_package(c, wd, p);
511
530
ret;
512
531
} else if vec::len(ps) == 0u {
513
- error("No packages." );
532
+ cargo_suggestion(c, false, { || error("No packages match name."); } );
514
533
ret;
515
534
}
516
535
error("Found multiple packages:");
@@ -651,6 +670,7 @@ fn cmd_sync(c: cargo, argv: [str]) {
651
670
if vec::len(argv) == 3u {
652
671
sync_one(c, argv[2], c.sources.get(argv[2]));
653
672
} else {
673
+ cargo_suggestion(c, true, { || } );
654
674
c.sources.items { |k, v|
655
675
sync_one(c, k, v);
656
676
}
0 commit comments