Revert packager randomization revert

This commit is contained in:
Justin Spahr-Summers 2015-09-25 09:21:44 -07:00 committed by facebook-github-bot-7
parent 23564fe65a
commit 1487ebfe01
3 changed files with 42 additions and 12 deletions

View File

@ -8,8 +8,9 @@
*/
'use strict';
const chalk = require('chalk');
const path = require('path');
const getPontentialPlatformExt = require('../../lib/getPlatformExtension');
const getPlatformExtension = require('../../lib/getPlatformExtension');
class HasteMap {
constructor({ fastfs, moduleCache, helpers }) {
@ -17,6 +18,7 @@ class HasteMap {
this._moduleCache = moduleCache;
this._helpers = helpers;
this._map = Object.create(null);
this._warnedAbout = Object.create(null);
}
build() {
@ -35,6 +37,9 @@ class HasteMap {
processFileChange(type, absPath) {
return Promise.resolve().then(() => {
// Rewarn after file changes.
this._warnedAbout = Object.create(null);
/*eslint no-labels: 0 */
if (type === 'delete' || type === 'change') {
loop: for (let name in this._map) {
@ -64,19 +69,39 @@ class HasteMap {
}
getModule(name, platform = null) {
if (this._map[name]) {
const modules = this._map[name];
if (platform != null) {
for (let i = 0; i < modules.length; i++) {
if (getPontentialPlatformExt(modules[i].path) === platform) {
return modules[i];
}
if (!this._map[name]) {
return null;
}
const modules = this._map[name];
if (platform != null) {
for (let i = 0; i < modules.length; i++) {
if (getPlatformExtension(modules[i].path) === platform) {
return modules[i];
}
}
return modules[0];
if (modules.length > 1) {
if (!this._warnedAbout[name]) {
this._warnedAbout[name] = true;
console.warn(
chalk.yellow(
'\nWARNING: Found multiple haste modules or packages ' +
'with the name `%s`. Please fix this by adding it to ' +
'the blacklist or deleting the modules keeping only one.\n' +
'One of the following modules will be selected at random:\n%s\n'
),
name,
modules.map(m => m.path).join('\n'),
);
}
const randomIndex = Math.floor(Math.random() * modules.length);
return modules[randomIndex];
}
}
return null;
return modules[0];
}
_processHasteModule(file) {

View File

@ -252,6 +252,11 @@ class ResolutionRequest {
_loadAsFile(potentialModulePath) {
return Promise.resolve().then(() => {
if (this._helpers.isAssetFile(potentialModulePath)) {
const dirname = path.dirname(potentialModulePath);
if (!this._fastfs.dirExists(dirname)) {
throw new UnableToResolveError(`Directory ${dirname} doesn't exist`);
}
const {name, type} = getAssetDataFromName(potentialModulePath);
let pattern = '^' + name + '(@[\\d\\.]+x)?';
@ -263,7 +268,7 @@ class ResolutionRequest {
// We arbitrarly grab the first one, because scale selection
// will happen somewhere
const [assetFile] = this._fastfs.matches(
path.dirname(potentialModulePath),
dirname,
new RegExp(pattern)
);

View File

@ -10,7 +10,7 @@
const path = require('path');
const SUPPORTED_PLATFORM_EXTS = ['android', 'ios'];
const SUPPORTED_PLATFORM_EXTS = ['android', 'ios', 'web'];
const re = new RegExp(
'[^\\.]+\\.(' + SUPPORTED_PLATFORM_EXTS.join('|') + ')\\.\\w+$'