Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(97)

Side by Side Diff: lib/src/entrypoint.dart

Issue 2079303003: Track Source objects in PackageNames. (Closed) Base URL: git@github.com:dart-lang/pub.git@master
Patch Set: Code review changes Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « lib/src/command/cache_repair.dart ('k') | lib/src/global_packages.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'dart:async'; 5 import 'dart:async';
6 import 'dart:io'; 6 import 'dart:io';
7 7
8 import 'package:barback/barback.dart'; 8 import 'package:barback/barback.dart';
9 import 'package:package_config/packages_file.dart' as packages_file; 9 import 'package:package_config/packages_file.dart' as packages_file;
10 import 'package:path/path.dart' as p; 10 import 'package:path/path.dart' as p;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 /// Whether this is an entrypoint for a globally-activated package. 63 /// Whether this is an entrypoint for a globally-activated package.
64 final bool isGlobal; 64 final bool isGlobal;
65 65
66 /// The lockfile for the entrypoint. 66 /// The lockfile for the entrypoint.
67 /// 67 ///
68 /// If not provided to the entrypoint, it will be loaded lazily from disk. 68 /// If not provided to the entrypoint, it will be loaded lazily from disk.
69 LockFile get lockFile { 69 LockFile get lockFile {
70 if (_lockFile != null) return _lockFile; 70 if (_lockFile != null) return _lockFile;
71 71
72 if (!fileExists(lockFilePath)) { 72 if (!fileExists(lockFilePath)) {
73 _lockFile = new LockFile.empty(cache.sources); 73 _lockFile = new LockFile.empty();
74 } else { 74 } else {
75 _lockFile = new LockFile.load(lockFilePath, cache.sources); 75 _lockFile = new LockFile.load(lockFilePath, cache.sources);
76 } 76 }
77 77
78 return _lockFile; 78 return _lockFile;
79 } 79 }
80 LockFile _lockFile; 80 LockFile _lockFile;
81 81
82 /// The package graph for the application and all of its transitive 82 /// The package graph for the application and all of its transitive
83 /// dependencies. 83 /// dependencies.
(...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 'changed since the pubspec.lock file was generated, please run "pub ' 532 'changed since the pubspec.lock file was generated, please run "pub '
533 'get" again.'); 533 'get" again.');
534 } 534 }
535 } 535 }
536 536
537 /// Returns whether the locked version of [dep] matches the dependency. 537 /// Returns whether the locked version of [dep] matches the dependency.
538 bool _isDependencyUpToDate(PackageDep dep) { 538 bool _isDependencyUpToDate(PackageDep dep) {
539 if (dep.name == root.name) return true; 539 if (dep.name == root.name) return true;
540 540
541 var locked = lockFile.packages[dep.name]; 541 var locked = lockFile.packages[dep.name];
542 if (locked == null) return false; 542 return locked != null && dep.allows(locked);
543
544 if (dep.source != locked.source) return false;
545
546 if (!dep.constraint.allows(locked.version)) return false;
547
548 var source = cache.sources[dep.source];
549 if (source == null) return false;
550
551 return source.descriptionsEqual(dep.description, locked.description);
552 } 543 }
553 544
554 /// Determines whether all of the packages in the lockfile are already 545 /// Determines whether all of the packages in the lockfile are already
555 /// installed and available. 546 /// installed and available.
556 bool _arePackagesAvailable() { 547 bool _arePackagesAvailable() {
557 return lockFile.packages.values.every((package) { 548 return lockFile.packages.values.every((package) {
558 var source = cache.sources[package.source]; 549 if (package.source is UnknownSource) return false;
559 if (source is UnknownSource) return false;
560 550
561 // We only care about cached sources. Uncached sources aren't "installed". 551 // We only care about cached sources. Uncached sources aren't "installed".
562 // If one of those is missing, we want to show the user the file not 552 // If one of those is missing, we want to show the user the file not
563 // found error later since installing won't accomplish anything. 553 // found error later since installing won't accomplish anything.
564 var boundSource = cache.source(package.source); 554 var source = cache.source(package.source);
565 if (boundSource is! CachedSource) return true; 555 if (source is! CachedSource) return true;
566 556
567 // Get the directory. 557 // Get the directory.
568 var dir = boundSource.getDirectory(package); 558 var dir = source.getDirectory(package);
569 // See if the directory is there and looks like a package. 559 // See if the directory is there and looks like a package.
570 return dirExists(dir) && fileExists(p.join(dir, "pubspec.yaml")); 560 return dirExists(dir) && fileExists(p.join(dir, "pubspec.yaml"));
571 }); 561 });
572 } 562 }
573 563
574 /// Determines whether or not the `.packages` file is out of date with respect 564 /// Determines whether or not the `.packages` file is out of date with respect
575 /// to the lockfile. 565 /// to the lockfile.
576 /// 566 ///
577 /// This will be `false` if the packages file contains dependencies that are 567 /// This will be `false` if the packages file contains dependencies that are
578 /// not in the lockfile or that don't match what's in there. 568 /// not in the lockfile or that don't match what's in there.
579 bool _isPackagesFileUpToDate() { 569 bool _isPackagesFileUpToDate() {
580 var packages = packages_file.parse( 570 var packages = packages_file.parse(
581 new File(packagesFile).readAsBytesSync(), 571 new File(packagesFile).readAsBytesSync(),
582 p.toUri(packagesFile)); 572 p.toUri(packagesFile));
583 573
584 return lockFile.packages.values.every((lockFileId) { 574 return lockFile.packages.values.every((lockFileId) {
585 var source = cache.source(lockFileId.source);
586
587 // It's very unlikely that the lockfile is invalid here, but it's not 575 // It's very unlikely that the lockfile is invalid here, but it's not
588 // impossible—for example, the user may have a very old application 576 // impossible—for example, the user may have a very old application
589 // package with a checked-in lockfile that's newer than the pubspec, but 577 // package with a checked-in lockfile that's newer than the pubspec, but
590 // that contains sdk dependencies. 578 // that contains sdk dependencies.
591 if (source.source is UnknownSource) return false; 579 if (lockFileId.source is UnknownSource) return false;
592 580
593 var packagesFileUri = packages[lockFileId.name]; 581 var packagesFileUri = packages[lockFileId.name];
594 if (packagesFileUri == null) return false; 582 if (packagesFileUri == null) return false;
595 583
596 // Pub only generates "file:" and relative URIs. 584 // Pub only generates "file:" and relative URIs.
597 if (packagesFileUri.scheme != 'file' && 585 if (packagesFileUri.scheme != 'file' &&
598 packagesFileUri.scheme.isNotEmpty) { 586 packagesFileUri.scheme.isNotEmpty) {
599 return false; 587 return false;
600 } 588 }
601 589
590 var source = cache.source(lockFileId.source);
591
602 // Get the dirname of the .packages path, since it's pointing to lib/. 592 // Get the dirname of the .packages path, since it's pointing to lib/.
603 var packagesFilePath = p.dirname( 593 var packagesFilePath = p.dirname(
604 p.join(root.dir, p.fromUri(packagesFileUri))); 594 p.join(root.dir, p.fromUri(packagesFileUri)));
605 var lockFilePath = p.join(root.dir, source.getDirectory(lockFileId)); 595 var lockFilePath = p.join(root.dir, source.getDirectory(lockFileId));
606 596
607 // For cached sources, make sure the directory exists and looks like a 597 // For cached sources, make sure the directory exists and looks like a
608 // package. This is also done by [_arePackagesAvailable] but that may not 598 // package. This is also done by [_arePackagesAvailable] but that may not
609 // be run if the lockfile is newer than the pubspec. 599 // be run if the lockfile is newer than the pubspec.
610 if (source is CachedSource && 600 if (source is CachedSource &&
611 !dirExists(packagesFilePath) || 601 !dirExists(packagesFilePath) ||
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
683 /// If [packageSymlinks] is true, creates a symlink to the "packages" 673 /// If [packageSymlinks] is true, creates a symlink to the "packages"
684 /// directory in [dir]. 674 /// directory in [dir].
685 /// 675 ///
686 /// Otherwise, deletes a "packages" directories in [dir] if one exists. 676 /// Otherwise, deletes a "packages" directories in [dir] if one exists.
687 void _linkOrDeleteSecondaryPackageDir(String dir) { 677 void _linkOrDeleteSecondaryPackageDir(String dir) {
688 var symlink = p.join(dir, 'packages'); 678 var symlink = p.join(dir, 'packages');
689 if (entryExists(symlink)) deleteEntry(symlink); 679 if (entryExists(symlink)) deleteEntry(symlink);
690 if (_packageSymlinks) createSymlink(packagesDir, symlink, relative: true); 680 if (_packageSymlinks) createSymlink(packagesDir, symlink, relative: true);
691 } 681 }
692 } 682 }
OLDNEW
« no previous file with comments | « lib/src/command/cache_repair.dart ('k') | lib/src/global_packages.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698