From 26fc16867281f348450bc4ca8e4e1f2b209fa2de Mon Sep 17 00:00:00 2001 From: Chris Raynor Date: Thu, 15 May 2014 16:38:21 -0700 Subject: [PATCH 1/5] ignore functionality --- bin/firebase | 8 +++++++- lib/app.js | 18 ++++++++++++------ lib/auth.js | 1 + lib/upload.js | 18 ++++++++---------- package.json | 2 +- 5 files changed, 29 insertions(+), 18 deletions(-) diff --git a/bin/firebase b/bin/firebase index 3b494e85f96..fe9e0092519 100755 --- a/bin/firebase +++ b/bin/firebase @@ -29,7 +29,13 @@ if (argv._.length === 0) { } } else { - if (argv.help) { + if ( + argv.h || + argv.hel || + argv.hep || + argv.hepl || + argv.help + ) { help.showHelp(argv._[0]); diff --git a/lib/app.js b/lib/app.js index f97a1f40069..86458b051a2 100644 --- a/lib/app.js +++ b/lib/app.js @@ -18,7 +18,8 @@ var request = require('request'), _when = require('when'); var defaultSettings = { - 'public': '.' + 'public': '.', + 'ignore': ['firebase.json', '.*', '**/node_modules/**'] }; temp.track(); @@ -120,7 +121,8 @@ module.exports = { } var settings = { firebase: results.firebase, - 'public': results['public'] + 'public': results['public'], + 'ignore': defaultSettings['ignore'] }; console.log('Initializing app into current directory...'); auth.checkCanAccess(results.firebase, function(err) { @@ -284,15 +286,19 @@ module.exports = { console.log('Writing firebase.json settings file...'); var settings = { 'firebase': firebase, - 'public': '.' + 'public': defaultSettings['public'], + 'ignore': defaultSettings['ignore'] }; if (supportedTemplates[results.template].settings) { if (supportedTemplates[results.template].settings['public']) { - settings.public = supportedTemplates[results.template].settings['public'].replace(/\//g, path.sep) + settings.public = supportedTemplates[results.template].settings['public']; } if (supportedTemplates[results.template].settings['rules']) { - settings.rules = supportedTemplates[results.template].settings['rules'].replace(/\//g, path.sep); + settings.rules = supportedTemplates[results.template].settings['rules']; + } + if (supportedTemplates[results.template].settings['ignore']) { + settings.ignore = supportedTemplates[results.template].settings['ignore']; } } @@ -440,7 +446,7 @@ module.exports = { message = argv.message; } - upload.send(settings.firebase, settings['public'], directoryRef.name(), message, function(err, directory) { + upload.send(settings.firebase, settings['public'], settings.ignore || defaultSettings.ignore, directoryRef.name(), message, function(err, directory) { if (err) { console.log(chalk.red('Deploy Error') + ' - Couldn\'t upload app'); console.log(err); diff --git a/lib/auth.js b/lib/auth.js index 266b1c8c756..2803ee90b67 100644 --- a/lib/auth.js +++ b/lib/auth.js @@ -16,6 +16,7 @@ var auth = { var that = this; if ((this.email.length === 0) || (this.token.length === 0)) { + // TODO: prioritize email/pass params passed in over existing credentials console.log('Please sign into your Firebase account to continue...'); this._attemptLogin(this.maxRetries, callback); } else { diff --git a/lib/upload.js b/lib/upload.js index d7a3cc18f97..b5b585cccd5 100644 --- a/lib/upload.js +++ b/lib/upload.js @@ -1,7 +1,7 @@ var request = require('request'), auth = require('./auth'), api = require('./api'), - fstream = require('fstream'), + fstreamIgnore = require('fstream-ignore'), tar = require('tar'), zlib = require('zlib'), temp = require('temp'), @@ -12,7 +12,7 @@ var request = require('request'), temp.track(); module.exports = { - send: function(firebase, publicDir, pushId, message, callback) { + send: function(firebase, publicDir, ignoreRules, pushId, message, callback) { var writeStream = temp.createWriteStream({ suffix: '.tar.gz' }), filename = writeStream.path, fileCount = 0, @@ -21,16 +21,11 @@ module.exports = { console.log('Preparing to deploy Public Directory...'); - fstream.Reader({ + var reader = fstreamIgnore({ path: publicDir, type: 'Directory', follow: true, filter: function() { - if (this.type !== 'Directory' && ( - this.basename.match(/^firebase\.json$/) || - this.basename.match(/^\./))) { - return false; - } if (this.type !== 'Directory') { fileCount += 1; } @@ -39,8 +34,11 @@ module.exports = { } return true; } - }) - .pipe(tar.Pack()) + }); + + reader.addIgnoreRules(ignoreRules); + + reader.pipe(tar.Pack()) .pipe(zlib.createGzip()) .pipe(writeStream); diff --git a/package.json b/package.json index d3569ee89dc..7c6eda9c2ef 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "tar": "0.1.x", "open": "0.0.x", "request": "2.34.x", - "fstream": "0.1.x", + "fstream-ignore": "0.0.x", "temp": "0.6.x", "firebase": "~1.0.11", "progress": "~1.1.5", From 74615bd4f41c4861eb8c0738b44059cb69e0a057 Mon Sep 17 00:00:00 2001 From: Chris Raynor Date: Fri, 16 May 2014 12:26:46 -0700 Subject: [PATCH 2/5] support for windows path separator in untar filter --- lib/app.js | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/lib/app.js b/lib/app.js index 86458b051a2..175fc3cf2b7 100644 --- a/lib/app.js +++ b/lib/app.js @@ -215,18 +215,11 @@ module.exports = { results.directory = dir; console.log('Bootstrapping into directory \'' + dir + '\'...'); - try { - fs.mkdirSync(projectDir, '0755'); - } catch (err) { - console.log(chalk.red('Filesystem Error') + ' - Could not create new' + - ' directory'); - process.exit(1); - } // Load the project root if defined, and gracefully handle missing '/' - var templateRoot = supportedTemplates[results.template].templateRoot || '/'; - if (templateRoot && templateRoot[0] !== '/') { - templateRoot = '/' + templateRoot; + var templateRoot = (supportedTemplates[results.template].templateRoot || '/').replace(/\//g, path.sep); + if (templateRoot && templateRoot[0] !== path.sep) { + templateRoot = path.sep + templateRoot; } console.log('Downloading and unpacking template...'); @@ -312,7 +305,7 @@ module.exports = { } console.log(chalk.green('Successfully added template')); - console.log('To deploy: %s then %s', chalk.bold(util.format('cd %s/', results.directory)), chalk.bold('firebase deploy')); + console.log('To deploy: %s then %s', chalk.bold(util.format('cd %s', results.directory + path.sep)), chalk.bold('firebase deploy')); }); }); }, function(error) { From df9adddaf35dc7a06c531cd363d32cf251579545 Mon Sep 17 00:00:00 2001 From: Chris Raynor Date: Sat, 17 May 2014 14:31:40 -0700 Subject: [PATCH 3/5] prioritizing email and password params for login if supplied --- bin/firebase | 6 +++--- lib/app.js | 6 +++--- lib/auth.js | 11 ++++++----- lib/firebase.js | 10 +++++----- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/bin/firebase b/bin/firebase index fe9e0092519..d94f4f2e6de 100755 --- a/bin/firebase +++ b/bin/firebase @@ -46,14 +46,14 @@ if (argv._.length === 0) { // Top-level functionality case 'login': - firebase.login(); + firebase.login(argv); break; case 'logout': - firebase.logout(argv.d); + firebase.logout(argv); break; case 'ls': case 'list': - firebase.list(); + firebase.list(argv); break; // Submodules diff --git a/lib/app.js b/lib/app.js index 175fc3cf2b7..a4240c909ed 100644 --- a/lib/app.js +++ b/lib/app.js @@ -52,7 +52,7 @@ function getPrompt(schema, onComplete, idx, results) { module.exports = { init: function(argv) { - auth.listFirebases().then(function(res) { + auth.listFirebases(argv).then(function(res) { var settingsFile = path.resolve('./firebase.json'); if (fs.existsSync(settingsFile)) { @@ -152,7 +152,7 @@ module.exports = { }); }, bootstrap: function(argv) { - _when.join(this.getTemplates(), auth.listFirebases()).done(function(resultSet) { + _when.join(this.getTemplates(), auth.listFirebases(argv)).done(function(resultSet) { var supportedTemplates = resultSet[0], res = resultSet[1]; @@ -329,7 +329,7 @@ module.exports = { }); }, deploy: function(argv) { - auth.requireLogin(function(err) { + auth.requireLogin(argv, function(err) { if (err) { console.log(chalk.red('Login Error')); process.exit(1); diff --git a/lib/auth.js b/lib/auth.js index 2803ee90b67..d12d24df96c 100644 --- a/lib/auth.js +++ b/lib/auth.js @@ -12,11 +12,12 @@ var auth = { '.firebaserc' ), maxRetries: 3, - requireLogin: function(callback) { + requireLogin: function(argv, callback) { var that = this; - if ((this.email.length === 0) || (this.token.length === 0)) { - // TODO: prioritize email/pass params passed in over existing credentials + if (argv.email && argv.password) { + this._attemptLogin(this.maxRetries, callback); + } else if ((this.email.length === 0) || (this.token.length === 0)) { console.log('Please sign into your Firebase account to continue...'); this._attemptLogin(this.maxRetries, callback); } else { @@ -254,9 +255,9 @@ var auth = { } catch (e) {} return config; }, - listFirebases: function() { + listFirebases: function(argv) { return _when.promise(function(resolve, reject, notify) { - auth.requireLogin(function(err) { + auth.requireLogin(argv, function(err) { if (err) { var error = new Error('Login Unsuccessful'); error.type = 'LOGIN'; diff --git a/lib/firebase.js b/lib/firebase.js index cea4a7d8dc4..01deafd35ca 100644 --- a/lib/firebase.js +++ b/lib/firebase.js @@ -3,7 +3,7 @@ var auth = require('./auth'), chalk = require('chalk'); module.exports = { - login: function() { + login: function(argv) { auth.login(function(err) { if (err) { console.log(chalk.red('Login Unsuccessful')); @@ -13,8 +13,8 @@ module.exports = { } }); }, - logout: function(deleteAll) { - auth.logout(deleteAll, function(err) { + logout: function(argv) { + auth.logout(argv.d, function(err) { if (err) { console.log(chalk.red('Log Out Unsuccessful')); process.exit(1); @@ -23,8 +23,8 @@ module.exports = { } }); }, - list: function() { - auth.listFirebases().then(function(res) { + list: function(argv) { + auth.listFirebases(argv).then(function(res) { res.showFirebases(); }, function(error) { switch (error.type) { From f89a632a6130038604e43792c2dbba4f20827746 Mon Sep 17 00:00:00 2001 From: Chris Raynor Date: Sat, 17 May 2014 14:42:57 -0700 Subject: [PATCH 4/5] preventing override from causing loop when incorrect --- lib/auth.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/auth.js b/lib/auth.js index d12d24df96c..d919ab4655d 100644 --- a/lib/auth.js +++ b/lib/auth.js @@ -63,6 +63,8 @@ var auth = { if (tries > 0) { if (tries !== this.maxRetries) { console.log('Email or password incorrect, please try again'); + delete prompt.override.email; + delete prompt.override.password; } this._loginRequest(function(err, email, token) { if (err) { From 2d9ae3e0634d01d29e3195a7f1c609c3eca654ea Mon Sep 17 00:00:00 2001 From: Chris Raynor Date: Sat, 17 May 2014 14:54:12 -0700 Subject: [PATCH 5/5] version bump --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7c6eda9c2ef..5dd0d5569f2 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "firebase-tools", "preferGlobal": true, - "version": "1.0.0", + "version": "1.0.1", "description": "The Firebase Command Line Tools", "keywords": [ "firebase"