From af195e2f488ee89c4283fa26c2a72de54f19019b Mon Sep 17 00:00:00 2001 From: Emily Stark Date: Fri, 28 Mar 2014 15:45:06 -0700 Subject: [PATCH] Store and read build-time deps in unipackage buildinfo.json --- tools/unipackage.js | 67 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 51 insertions(+), 16 deletions(-) diff --git a/tools/unipackage.js b/tools/unipackage.js index e4c49b7d31..e79086cf04 100644 --- a/tools/unipackage.js +++ b/tools/unipackage.js @@ -464,6 +464,10 @@ _.extend(Unipackage.prototype, { // Read basic buildinfo.json info self.builtBy = buildInfoJson.builtBy || null; + self.buildTimeDirectDependencies = + buildInfoJson.buildTimeDirectDependencies || null; + self.buildTimePluginDependencies = + buildInfoJson.buildTimePluginDependencies || null; if (options.buildOfPath && (buildInfoJson.source !== options.buildOfPath)) { @@ -658,7 +662,9 @@ _.extend(Unipackage.prototype, { sliceDependencies: { }, pluginDependencies: self.pluginWatchSet.toJSON(), pluginProviderPackages: self.pluginProviderPackageDirs, - source: options.buildOfPath || undefined + source: options.buildOfPath || undefined, + buildTimeDirectDependencies: self._buildTimeDirectDependenciesWithBuildIds(), + buildTimePluginDependencies: self._buildTimePluginDependenciesWithBuildIds() }; builder.reserve("unipackage.json"); @@ -854,6 +860,31 @@ _.extend(Unipackage.prototype, { } }, + _buildTimeDirectDependenciesWithBuildIds: function () { + var self = this; + var directDepsLoader = new PackageLoader(self.buildTimeDirectDependencies); + var result = {}; + _.each(self.buildTimeDirectDependencies, function (version, packageName) { + var unipackage = directDepsLoader.getPackage(packageName); + result[packageName] = unipackage.version; + }); + return result; + }, + + _buildTimePluginDependenciesWithBuildIds: function () { + var self = this; + var result = {}; + _.each(self.buildTimePluginDependencies, function (deps, pluginName) { + var pluginPackageLoader = new PackageLoader(deps); + result[pluginName] = {}; + _.each(deps, function (version, packageName) { + var unipackage = pluginPackageLoader.getPackage(packageName); + result[pluginName][packageName] = version; + }); + }); + return result; + }, + // Computes a hash of the versions of all the package's dependencies // (direct and plugin dependencies) and the slices' and plugins' watch // sets. Adds the result as a build identifier to the unipackage's @@ -865,27 +896,31 @@ _.extend(Unipackage.prototype, { // arrays. We use arrays to avoid relying on the order of // stringified object keys. var directDeps = []; - var directDepsLoader = new PackageLoader(self.buildTimeDirectDependencies); - _.each(self.buildTimeDirectDependencies, function (version, packageName) { - var unipackage = directDepsLoader.getPackage(packageName); - directDeps.push([unipackage.name, unipackage.version]); - }); + _.each( + self._buildTimeDirectDependenciesWithBuildIds(), + function (version, packageName) { + directDeps.push([packageName, version]); + } + ); // Sort direct dependencies by package name (which is the "0" property // of each element in the array). directDeps = _.sortBy(directDeps, "0"); var pluginDeps = []; - _.each(self.buildTimePluginDependencies, function (versions, pluginName) { - var pluginDepsLoader = new PackageLoader(versions); - var singlePluginDeps = []; - _.each(versions, function (version, packageName) { - var unipackage = pluginDepsLoader.getPackage(packageName); - singlePluginDeps.push([unipackage.name, unipackage.version]); - }); - singlePluginDeps = _.sortBy(singlePluginDeps, "0"); - pluginDeps.push([pluginName, singlePluginDeps]); - }); + _.each( + self._buildTimePluginDependenciesWithBuildIds(), + function (versions, pluginName) { + var pluginDepsLoader = new PackageLoader(versions); + var singlePluginDeps = []; + _.each(versions, function (version, packageName) { + var unipackage = pluginDepsLoader.getPackage(packageName); + singlePluginDeps.push([unipackage.name, unipackage.version]); + }); + singlePluginDeps = _.sortBy(singlePluginDeps, "0"); + pluginDeps.push([pluginName, singlePluginDeps]); + } + ); pluginDeps = _.sortBy(pluginDeps, "0"); // Now that we have versions for all our dependencies, canonicalize