Skip to content
This repository has been archived by the owner on Nov 3, 2021. It is now read-only.

Commit

Permalink
Merge pull request #20245 from eeejay/bug-970658
Browse files Browse the repository at this point in the history
Bug 970658 - Cache downloaded extensions in build_stage. r=ochameau
  • Loading branch information
eeejay committed Jul 2, 2014
2 parents 94daeb3 + 0a7feb5 commit d2d822e
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 38 deletions.
7 changes: 4 additions & 3 deletions Makefile
Expand Up @@ -501,7 +501,7 @@ endef
include build/common.mk

# Generate profile/
$(PROFILE_FOLDER): preferences pre-app post-app test-agent-config offline contacts extensions $(XULRUNNER_BASE_DIRECTORY) .git/hooks/pre-commit create-default-data $(PROFILE_FOLDER)/installed-extensions.json
$(PROFILE_FOLDER): preferences pre-app post-app test-agent-config offline contacts extensions $(XULRUNNER_BASE_DIRECTORY) .git/hooks/pre-commit create-default-data
ifeq ($(BUILD_APP_NAME),*)
@echo "Profile Ready: please run [b2g|firefox] -profile $(CURDIR)$(SEP)$(PROFILE_FOLDER)"
endif
Expand Down Expand Up @@ -548,7 +548,7 @@ webapp-optimize: post-app
webapp-zip: post-app

# Get additional extensions
$(PROFILE_FOLDER)/installed-extensions.json: build/config/additional-extensions.json $(wildcard .build/config/custom-extensions.json)
$(STAGE_DIR)/additional-extensions/downloaded.json: build/config/additional-extensions.json $(wildcard .build/config/custom-extensions.json)
ifeq ($(SIMULATOR),1)
# Prevent installing external firefox helper addon for the simulator
else ifeq ($(DESKTOP),1)
Expand Down Expand Up @@ -671,14 +671,15 @@ endif

# Generate $(PROFILE_FOLDER)/extensions
EXT_DIR=$(PROFILE_FOLDER)/extensions
extensions:
extensions: $(STAGE_DIR)/additional-extensions/downloaded.json
ifeq ($(BUILD_APP_NAME),*)
@rm -rf $(EXT_DIR)
@mkdir -p $(EXT_DIR)
ifeq ($(SIMULATOR),1)
cp -r tools/extensions/{activities@gaiamobile.org,activities,alarms@gaiamobile.org,alarms,desktop-helper,desktop-helper@gaiamobile.org} $(EXT_DIR)/
else ifeq ($(DESKTOP),1)
cp -r tools/extensions/* $(EXT_DIR)/
cp -r $(STAGE_DIR)/additional-extensions/* $(EXT_DIR)/
else ifeq ($(DEBUG),1)
cp tools/extensions/httpd@gaiamobile.org $(EXT_DIR)/
cp -r tools/extensions/httpd $(EXT_DIR)/
Expand Down
66 changes: 34 additions & 32 deletions build/additional-extensions.js
Expand Up @@ -10,7 +10,7 @@ var utils = require('./utils');
var dm = require('./download-manager');
var config;
var gaiaDir;
var profileDir;
var stageDir;
var AMO_URL =
'https://services.addons.mozilla.org/en-US/firefox/api/1.5/addon/';

Expand All @@ -28,7 +28,7 @@ var InstallationManager = {

_onTheFly: [],

_installedExtensions: {},
_downloadedExtensions: {},

_callbacksOnAllFinished: [],

Expand All @@ -43,7 +43,7 @@ var InstallationManager = {
} else {
while (this._callbacksOnAllFinished.length > 0) {
var cb = this._callbacksOnAllFinished.pop();
cb(this._installedExtensions);
cb(this._downloadedExtensions);
}
this._processing = false;
}
Expand Down Expand Up @@ -110,17 +110,17 @@ var InstallationManager = {

if (unpack) {
// case 1: extract content of xpi file to
// <profileDir>/extensions/<extensionId>/
// build_stage/additional-extensions/<extensionId>/
extensionDir =
utils.getFile(profileDir, 'extensions', extensionId);
utils.getFile(stageDir, 'additional-extensions', extensionId);
utils.ensureFolderExists(extensionDir);
entryEnumerator = zipReader.findEntries('*');
while (entryEnumerator.hasMore()) {
try {
var zipEntryName = entryEnumerator.getNext();
var zipEntry = zipReader.getEntry(zipEntryName);
var targetFile =
utils.getFile(profileDir, 'extensions', extensionId, zipEntryName);
var targetFile = utils.getFile(
stageDir, 'additional-extensions', extensionId, zipEntryName);
var targetFileType = zipEntry.isDirectory ?
Ci.nsIFile.DIRECTORY_TYPE : Ci.nsIFile.NORMAL_FILE_TYPE;
if (!targetFile.exists()) {
Expand All @@ -132,19 +132,19 @@ var InstallationManager = {
}
}
} else {
// case 2: put xpi file directly at <profileDir>/extensions/
extensionDir = utils.getFile(profileDir, 'extensions');
// case 2: put xpi file directly at build+stage/additional-extensions
extensionDir = utils.getFile(stageDir, 'additional-extensions');
utils.ensureFolderExists(extensionDir);
file.copyTo(extensionDir, extensionId + '.xpi');
}
logLine(sourceUrl + ' installed');
logLine(sourceUrl + ' downloaded');
zipReader.close();
InstallationManager.finish(sourceUrl);
},

init: function im_init(installedExtensions) {
if (installedExtensions) {
this._installedExtensions = installedExtensions;
init: function im_init(downloadedExtensions) {
if (downloadedExtensions) {
this._downloadedExtensions = downloadedExtensions;
}
this._processing = true;
},
Expand All @@ -167,7 +167,7 @@ var InstallationManager = {
},

finish: function im_finish(url) {
this._installedExtensions[url] = 'done';
this._downloadedExtensions[url] = 'done';
this._removeUrl(url);
},

Expand Down Expand Up @@ -200,17 +200,18 @@ var AdditionalExtensions = (function() {
return result;
}

function loadInstalledExtensions() {
function loadDownloadedExtensions() {
var file;
var installedExtensions;
logLine('load installed extensions');
var downloadedExtensions;
logLine('load downloaded extensions');
try {
file = utils.getFile(profileDir, 'installed-extensions.json');
installedExtensions = utils.getJSON(file);
file = utils.getFile(
stageDir, 'additional-extensions', 'downloaded.json');
downloadedExtensions = utils.getJSON(file);
} catch (e) {
installedExtensions = {};
downloadedExtensions = {};
}
return installedExtensions;
return downloadedExtensions;
}

function loadCustomExtensions() {
Expand Down Expand Up @@ -240,15 +241,15 @@ var AdditionalExtensions = (function() {
return additionalExtensions;
}

function writeInstalledExtensions(installed) {
function writeDownloadedExtensions(downloaded) {
var dir;
var file;
var content;
// output as an array (it's the original design of additional-extensions.py)
content = JSON.stringify(Object.keys(installed), undefined, 2);
dir = utils.getFile(profileDir);
content = JSON.stringify(Object.keys(downloaded), undefined, 2);
dir = utils.getFile(stageDir, 'additional-extensions');
utils.ensureFolderExists(dir);
file = utils.getFile(profileDir, 'installed-extensions.json');
file = utils.getFile(stageDir, 'additional-extensions', 'downloaded.json');
utils.writeContent(file, content);
}

Expand Down Expand Up @@ -296,18 +297,19 @@ var AdditionalExtensions = (function() {

// main function
function execute(options) {
logLine(JSON.stringify(options, null, ' '));
config = options;
gaiaDir = config.GAIA_DIR;
profileDir = config.PROFILE_DIR;
stageDir = config.STAGE_DIR;
var extensions;
var installedExtensions;
var downloadedExtensions;
var keys;
var index;

function downloadAndInstall(url) {
try {
if (installedExtensions && installedExtensions[url]) {
logLine(' already installed');
if (downloadedExtensions && downloadedExtensions[url]) {
logLine(' already downloaded');
} else {
logLine('download from ' + url);
InstallationManager.startInstalling(url);
Expand All @@ -318,12 +320,12 @@ var AdditionalExtensions = (function() {
}
}

installedExtensions = loadInstalledExtensions();
downloadedExtensions = loadDownloadedExtensions();
extensions = merge(loadAdditionalExtensions(), loadCustomExtensions());

InstallationManager.init(installedExtensions);
InstallationManager.init(downloadedExtensions);
InstallationManager.whenAllFinished(function(exts) {
writeInstalledExtensions(exts);
writeDownloadedExtensions(exts);
});

keys = Object.keys(extensions);
Expand Down
2 changes: 1 addition & 1 deletion build/config/additional-extensions.json
@@ -1,5 +1,5 @@
{
"Screen Reader Simulator": {
"url" : "https://addons.mozilla.org/firefox/downloads/latest/440614/addon-440614-latest.xpi"
"url" : "http://addons.mozilla.org/firefox/downloads/latest/440614/addon-440614-latest.xpi"
}
}
4 changes: 2 additions & 2 deletions build/test/integration/build.test.js
Expand Up @@ -573,8 +573,8 @@ suite('Build Integration tests', function() {
helper.exec('DEBUG=1 make', function(error, stdout, stderr) {
helper.checkError(error, stdout, stderr);

var installedExtsPath = path.join('profile-debug',
'installed-extensions.json');
var installedExtsPath = path.join('build_stage', 'additional-extensions',
'downloaded.json');
var expectedSettings = {
'homescreen.manifestURL': 'app://verticalhome.gaiamobile.org/manifest.webapp',
'rocketbar.searchAppURL': 'app://search.gaiamobile.org/index.html'
Expand Down

0 comments on commit d2d822e

Please sign in to comment.