Skip to content

Commit 4565c2d

Browse files
author
ekatek
committed
For direct dependencies only plugins affect buid
1 parent 6c993f1 commit 4565c2d

13 files changed

Lines changed: 82 additions & 44 deletions

tools/bundler.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -529,7 +529,7 @@ _.extend(Target.prototype, {
529529
if (_.has(getsUsed, slice.id))
530530
return;
531531
getsUsed[slice.id] = slice;
532-
slice.eachUsedSlice(self.arch, packageLoader,
532+
compiler.eachUsedSlice(slice.uses, self.arch, packageLoader,
533533
{skipWeak: true}, addToGetsUsed);
534534
};
535535
_.each(rootSlices, addToGetsUsed);
@@ -562,8 +562,8 @@ _.extend(Target.prototype, {
562562
// will depend on `slice` and need to be added after it. So we ignore
563563
// those edge. Because we did follow those edges in Phase 1, any unordered
564564
// slices were at some point in `needed` and will not be left out).
565-
slice.eachUsedSlice(
566-
self.arch, packageLoader, {skipUnordered: true},
565+
compiler.eachUsedSlice(
566+
slice.uses, self.arch, packageLoader, {skipUnordered: true},
567567
function (usedSlice, useOptions) {
568568
// If this is a weak dependency, and nothing else in the target had a
569569
// strong dependency on it, then ignore this edge.
@@ -1770,7 +1770,7 @@ exports.bundle = function (options) {
17701770

17711771
if (includeDefaultTargets) {
17721772
// Create a Package object that represents the app
1773-
var app = packageCache.loadAppAtPath(appDir, ignoreFiles);
1773+
var app = packageCache.packageCache.loadAppAtPath(appDir, ignoreFiles);
17741774

17751775
// Client
17761776
var client = makeClientTarget(app);
@@ -1881,7 +1881,7 @@ exports.bundle = function (options) {
18811881
// Read this directory as a package and create a target from
18821882
// it
18831883

1884-
var pkg = packageCache.
1884+
var pkg = packageCache.packageCache.
18851885
loadPackageAtPath(p.name, p.loadPath);
18861886
var target;
18871887
switch (p.type) {

tools/catalog.js

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ var compiler = require('./compiler.js');
1111
var buildmessage = require('./buildmessage.js');
1212
var tropohouse = require('./tropohouse.js');
1313

14+
var catalog = exports;
15+
1416
var isDirectory = function (dir) {
1517
try {
1618
// use stat rather than lstat since symlink to dir is OK
@@ -247,7 +249,8 @@ _.extend(Catalog.prototype, {
247249
dependencies: packageSource.getDependencyMetadata(),
248250
source: null,
249251
lastUpdated: null,
250-
published: null
252+
published: null,
253+
containsPlugins: packageSource.containsPlugins()
251254
});
252255
});
253256

@@ -269,7 +272,8 @@ _.extend(Catalog.prototype, {
269272
var packageBuildDeps = {}; // map from name to array of name
270273
_.each(self.effectiveLocalPackages, function (packageDir, name) {
271274
packageBuildDeps[name] = [];
272-
var deps = compiler.getBuildTimeDependencies(packageSources[name]);
275+
var deps = compiler.getBuildOrderConstraints(packageSources[name]);
276+
console.log("XXX deps", name, deps);
273277
_.each(deps, function (d) {
274278
if (! _.has(self.effectiveLocalPackages, d.name))
275279
return; // not a local package -- may assume it's already built
@@ -278,7 +282,7 @@ _.extend(Catalog.prototype, {
278282
packageBuildDeps[name].push(d.name);
279283
});
280284
});
281-
285+
console.log("XXX", packageBuildDeps);
282286
// Phase 3: Do a topological sort and build the local packages in
283287
// an order that respects their build-time dependencies.
284288
//
@@ -476,7 +480,7 @@ _.extend(Catalog.prototype, {
476480
self._requireInitialized();
477481

478482
// Clear any cached builds in the package cache.
479-
packageCache.refresh();
483+
packageCache.packageCache.refresh();
480484

481485
// Delete any that are source packages with builds.
482486
var count = 0;
@@ -489,7 +493,8 @@ _.extend(Catalog.prototype, {
489493
// passes because otherwise we might end up rebuilding a package
490494
// and then immediately deleting it.
491495
_.each(self.effectiveLocalPackages, function (loadPath, name) {
492-
packageCache.loadPackageAtPath(name, loadPath, { throwOnError: false });
496+
packageCache.packageCache.
497+
loadPackageAtPath(name, loadPath, { throwOnError: false });
493498
count ++;
494499
});
495500

@@ -632,4 +637,4 @@ _.extend(Catalog.prototype, {
632637
}
633638
});
634639

635-
module.exports = new Catalog();
640+
catalog.catalog = new Catalog();

tools/commands.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ var packageCache = require('./package-cache.js');
2222
var PackageLoader = require('./package-loader.js');
2323
var PackageSource = require('./package-source.js');
2424
var compiler = require('./compiler.js');
25-
var catalog = require('./catalog.js');
25+
var catalog = require('./catalog.js').catalog;
2626

2727
// Given a site name passed on the command line (eg, 'mysite'), return
2828
// a fully-qualified hostname ('mysite.meteor.com').
@@ -1494,7 +1494,8 @@ main.registerCommand({
14941494
// then we can't go through the build process to retrieve the
14951495
// sources that we used to build the package, and we need the
14961496
// source list to compile the source tarball.
1497-
pkg = packageCache.loadPackageAtPath(packageName, options.packageDir, {
1497+
pkg = packageCache.packageCache.
1498+
loadPackageAtPath(packageName, options.packageDir, {
14981499
forceRebuild: true
14991500
});
15001501
});

tools/compiler.js

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ var Unipackage = require('./unipackage.js');
88
var PackageLoader = require('./package-loader.js');
99
var uniload = require('./uniload.js');
1010
var bundler = require('./bundler.js');
11+
var catalog = require('./catalog.js');
1112

1213
var compiler = exports;
1314

@@ -81,8 +82,8 @@ compiler.eachUsedSlice = function (dependencies, arch, packageLoader, options,
8182
// dependencies. Emits buildmessages if this is impossible.
8283
//
8384
// Output is an object with keys:
84-
// - directDependencies: map from package name to version string, for
85-
// the package's direct, ordered, strong, non-implied dependencies
85+
// - directDependencies: map from package name to version string, for the
86+
// package's direct, ordered, strong, non-implied dependencies.
8687
// - pluginDependencies: map from plugin name to complete (transitive)
8788
// version information for all packages used to build the plugin, as
8889
// a map from package name to version string.
@@ -147,9 +148,10 @@ var determineBuildTimeDependencies = function (packageSource) {
147148

148149
ret.directDependencies = {};
149150
_.each(resolver.resolve(constraints), function (version, packageName) {
150-
// Take only direct dependencies
151-
if (_.has(constraints, packageName))
151+
// Take only direct dependencies.
152+
if (_.has(constraints, packageName)) {
152153
ret.directDependencies[packageName] = version;
154+
}
153155
});
154156

155157
// -- Plugins --
@@ -211,17 +213,14 @@ var compileSlice = function (unipackage, inputSlice, packageLoader) {
211213
// not some unrelated package in the target has a dependency. And we
212214
// skip unordered dependencies, because it's not going to work to
213215
// have circular build-time dependencies.
214-
//
215-
// We pass archinfo.host here, not inputSlice.arch, because it may be more
216-
// specific, and because plugins always have to run on the host
217-
// architecture.
218-
compiler.eachUsedSlice(
219-
inputSlice.uses, archinfo.host(), packageLoader,
220-
{ skipWeak: true, skipUnordered: true },
221-
function (usedSlice) {
222-
activePluginPackages.push(usedSlice.pkg);
216+
_.each(inputSlice.uses, function (dependency) {
217+
console.log(dependency);
218+
if (! dependency.weak && ! dependency.unordered &&
219+
packageLoader.containsPlugins(dependency.package)) {
220+
activePluginPackages.push(
221+
packageLoader.getPackage(dependency.package));
223222
}
224-
);
223+
});
225224

226225
activePluginPackages = _.uniq(activePluginPackages);
227226

@@ -567,7 +566,7 @@ var compileSlice = function (unipackage, inputSlice, packageLoader) {
567566

568567
// *** Output slice object
569568
unipackage.addSlice({
570-
sliceName: inputSlice.sliceName,
569+
name: inputSlice.sliceName,
571570
arch: inputSlice.arch, // XXX: arch?
572571
uses: inputSlice.uses,
573572
implies: inputSlice.implies,
@@ -699,7 +698,7 @@ compiler.compile = function (packageSource) {
699698
// objects with keys 'name', 'version' (the latter a version
700699
// string). Yes, it is possible that multiple versions of some other
701700
// package might be build-time dependencies (because of plugins).
702-
compiler.getBuildTimeDependencies = function (packageSource) {
701+
compiler.getBuildOrderConstraints = function (packageSource) {
703702
var versions = {}; // map from package name to version to true
704703
var addVersion = function (version, name) {
705704
if (! _.has(versions, name))
@@ -708,7 +707,13 @@ compiler.getBuildTimeDependencies = function (packageSource) {
708707
};
709708

710709
var buildTimeDeps = determineBuildTimeDependencies(packageSource);
711-
_.each(buildTimeDeps.directDependencies, addVersion);
710+
_.each(buildTimeDeps.directDependencies, function (version, name) {
711+
// Direct dependencies only create a build-order constraint if they contain
712+
// a plugin.
713+
if( catalog.catalog.getVersion(name, version).containsPlugins) {
714+
addVersion(version, name);
715+
}
716+
});
712717
_.each(buildTimeDeps.pluginDependencies, function (versions, pluginName) {
713718
_.each(versions, addVersion);
714719
});
@@ -784,4 +789,4 @@ compiler.checkUpToDate = function (packageSource, unipackage) {
784789
return false;
785790

786791
return true;
787-
};
792+
};

tools/constraint-solver.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
var semver = require('semver');
22
var _ = require('underscore');
3-
var catalog = require('./catalog.js');
3+
var catalog = require('./catalog.js').catalog;
44
var utils = require('./utils.js');
55

66
var constraintSolver = exports;
@@ -130,7 +130,7 @@ constraintSolver.Resolver.prototype._propagateExactDeps =
130130

131131
constraintSolver.Resolver.prototype._resolve = function (dependencies, state) {
132132
// Comment this out until we have a way to get check() here
133-
// check(dependencies, [Dependency]);
133+
// check(dependencies, [Dependency]);
134134

135135
state = state || {};
136136
state.picks = state.picks || {};

tools/main.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ var warehouse = require('./warehouse.js');
1010
var release = require('./release.js');
1111
var project = require('./project.js');
1212
var fs = require('fs');
13-
var catalog = require('./catalog.js');
13+
var catalog = require('./catalog.js').catalog;
1414
var main = exports;
1515

1616
// node (v8) defaults to only recording 10 lines of stack trace. This

tools/package-cache.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ var archinfo = require("./archinfo.js");
44
var compiler = require("./compiler.js");
55
var PackageSource = require("./package-source.js");
66
var _ = require('underscore');
7+
var Unipackage = require("./unipackage.js");
8+
9+
var packageCache = exports;
710

811
// both map from package load path to:
912
// - pkg: cached Package object
@@ -150,4 +153,4 @@ _.extend(PackageCache.prototype, {
150153
}
151154
});
152155

153-
module.exports = new PackageCache;
156+
packageCache.packageCache = new PackageCache;

tools/package-loader.js

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,27 @@ _.extend(PackageLoader.prototype, {
4848
return pkg;
4949
}
5050

51-
return packageCache.loadPackageAtPath(name, loadPath, {
51+
return packageCache.packageCache.loadPackageAtPath(name, loadPath, {
5252
forceRebuild: options.forceRebuild
5353
});
5454
},
5555

56+
containsPlugins: function (name) {
57+
var self = this;
58+
59+
var versionRecord;
60+
if (self.versions === null) {
61+
versionRecord = catalog.catalog.getLatestVersion(name);
62+
} else if (_.has(self.versions, name)) {
63+
versionRecord = catalog.catalog.getVersion(name, self.versions[name]);
64+
} else {
65+
console.log("Plugins:", self.versions);
66+
throw new Error("no version specified for package " + name);
67+
}
68+
69+
return versionRecord.containsPlugins;
70+
},
71+
5672
// As getPackage, but returns the path of the package that would be
5773
// loaded rather than loading the package, and does not take any
5874
// options. Returns null if the package is not available.
@@ -65,8 +81,10 @@ _.extend(PackageLoader.prototype, {
6581
var self = this;
6682

6783
console.log(name, self.versions);
68-
if (self.versions && ! _.has(self.versions, name))
69-
throw new Error("no version chosen for package?");
84+
if (self.versions && ! _.has(self.versions, name)) {
85+
console.log("VERSIONS:", self.versions);
86+
throw new Error("no version chosen for package " + name + "?");
87+
}
7088

7189
var version;
7290
if (self.versions) {
@@ -75,7 +93,7 @@ _.extend(PackageLoader.prototype, {
7593
version = null;
7694
}
7795

78-
return catalog.getLoadPathForPackage(name, version);
96+
return catalog.catalog.getLoadPathForPackage(name, version);
7997
},
8098

8199
// Given a slice set spec -- either a package name like "ddp", or a particular
@@ -96,4 +114,4 @@ _.extend(PackageLoader.prototype, {
96114
}
97115
});
98116

99-
module.exports = PackageLoader;
117+
module.exports = PackageLoader;

tools/package-source.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1081,6 +1081,12 @@ _.extend(PackageSource.prototype, {
10811081
self.defaultSlices = { browser: ['client'], 'os': ['server'] };
10821082
},
10831083

1084+
// True if the package defines any plugins.
1085+
containsPlugins: function () {
1086+
var self = this;
1087+
return ! _.isEmpty(self.pluginInfo);
1088+
},
1089+
10841090
// Return dependency metadata for all slices, in the format needed
10851091
// by the package catalog.
10861092
//

tools/run-app.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ var release = require('./release.js');
1111
var buildmessage = require('./buildmessage.js');
1212
var inFiber = require('./fiber-helpers.js').inFiber;
1313
var runLog = require('./run-log.js').runLog;
14-
var catalog = require('./catalog.js');
14+
var catalog = require('./catalog.js').catalog;
1515
var packageCache = require('./package-cache.js');
1616

1717
// Parse out s as if it were a bash command line.
@@ -392,7 +392,7 @@ _.extend(AppRunner.prototype, {
392392

393393
// Bundle up the app
394394
if (! self.firstRun)
395-
packageCache.refresh(true); // pick up changes to packages
395+
packageCache.packageCache.refresh(true); // pick up changes to packages
396396

397397
var bundlePath = path.join(self.appDir, '.meteor', 'local', 'build');
398398
var bundleResult = bundler.bundle({

0 commit comments

Comments
 (0)