diff --git a/meteor/.jshintrc b/meteor/.jshintrc index 61e603f116..19c2e2f11c 100755 --- a/meteor/.jshintrc +++ b/meteor/.jshintrc @@ -163,8 +163,8 @@ // Server and Client "Docker": true, + "Util": true, "boot2dockerexec": true, - "getBinDir": true, "getBoot2DockerIp": true, "getBoot2DockerState": true, "getBoot2DockerDiskUsage": true, @@ -172,7 +172,6 @@ "getBoot2DockerInfo": true, "boot2DockerVMExists": true, "eraseBoot2DockerVMFiles": true, - "getHomePath": true, "initBoot2Docker": true, "isVirtualBoxInstalled": true, "upgradeBoot2Docker": true, @@ -200,8 +199,6 @@ "recoverApps": true, "restartApp": true, "deleteApp": true, - "deleteFolder": true, - "copyVolumes": true, "getAppLogs": true, "hasDockerfile": true, "createTarFile": true, @@ -224,7 +221,6 @@ "saveImageFolderSync": true, "rebuildImageSync": true, "saveImageFolder": true, - "copyFolder": true, // Forms "showFormErrors": true, diff --git a/meteor/client/lib/boot2docker.js b/meteor/client/lib/boot2docker.js index 8e939a2dc3..edeec4e5a8 100644 --- a/meteor/client/lib/boot2docker.js +++ b/meteor/client/lib/boot2docker.js @@ -2,7 +2,7 @@ var exec = require('exec'); var path = require('path'); boot2dockerexec = function (command, callback) { - exec(path.join(getBinDir(), 'boot2docker') + ' ' + command, function(err, stdout) { + exec(path.join(Util.getBinDir(), 'boot2docker') + ' ' + command, function(err, stdout) { callback(err, stdout); }); }; @@ -131,7 +131,7 @@ boot2DockerVMExists = function (callback) { }; eraseBoot2DockerVMFiles = function (callback) { - var VMFileLocation = path.join(getHomePath(), 'VirtualBox\\ VMs/boot2docker-vm'); + var VMFileLocation = path.join(Util.getHomePath(), 'VirtualBox\\ VMs/boot2docker-vm'); exec('rm -rf ' + VMFileLocation, function (err) { callback(err); }); @@ -174,7 +174,7 @@ upgradeBoot2Docker = function (callback) { }; installBoot2DockerAddons = function (callback) { - exec('/bin/cat ' + path.join(getBinDir(), 'kite-binaries.tar.gz') + ' | ' + path.join(getBinDir(), 'boot2docker') + ' ssh "tar zx -C /usr/local/bin"', function (err, stdout) { + exec('/bin/cat ' + path.join(Util.getBinDir(), 'kite-binaries.tar.gz') + ' | ' + path.join(Util.getBinDir(), 'boot2docker') + ' ssh "tar zx -C /usr/local/bin"', function (err, stdout) { console.log(stdout); callback(err); }); diff --git a/meteor/client/lib/requires.js b/meteor/client/lib/requires.js new file mode 100644 index 0000000000..2b261be406 --- /dev/null +++ b/meteor/client/lib/requires.js @@ -0,0 +1,2 @@ +path = require('path'); +fs = require('fs'); diff --git a/meteor/client/lib/sync.js b/meteor/client/lib/sync.js index 4dbbcace5d..9cf3fe0e4b 100644 --- a/meteor/client/lib/sync.js +++ b/meteor/client/lib/sync.js @@ -15,7 +15,7 @@ removeAppWatcher = function (id) { addAppWatcher = function (app) { removeAppWatcher(app._id); - var appPath = path.join(path.join(getHomePath(), 'Kitematic'), app.name); + var appPath = path.join(path.join(Util.getHomePath(), 'Kitematic'), app.name); var vmDir = path.join('/var/lib/docker/binds', app.name); var vmPath = 'ssh://docker@localhost:2022/' + vmDir; var watcher = chokidar.watch(appPath, {ignored: /.*\.DS_Store/}); @@ -30,7 +30,7 @@ addAppWatcher = function (app) { syncing = true; var errorPattern = /The\sfile\s(.*)\son\shost/g; var archiveErrorPattern = /Archive\s(.*)\son\shost\s.*\sshould\sbe\sDELETED/g; - var cmd = path.join(getBinDir(), 'unison'); + var cmd = path.join(Util.getBinDir(), 'unison'); var args = [ cmd, vmPath, @@ -46,7 +46,7 @@ addAppWatcher = function (app) { 'Name\ {*.tmp,*.unison,*.swp,*.pyc,.DS_Store}', '-auto', '-sshargs', - '-o\ UserKnownHostsFile=/dev/null\ -o\ StrictHostKeyChecking=no\ -o PreferredAuthentications=publickey\ -i\ ' + path.join(getHomePath(), '.ssh/id_boot2docker') + '-o\ UserKnownHostsFile=/dev/null\ -o\ StrictHostKeyChecking=no\ -o PreferredAuthentications=publickey\ -i\ ' + path.join(Util.getHomePath(), '.ssh/id_boot2docker') ]; if (!fs.existsSync(appPath)) { @@ -70,7 +70,7 @@ addAppWatcher = function (app) { if (err.indexOf('The archive file is missing on some hosts') !== -1) { var results = archiveErrorPattern.exec(err); var location = results[1].replace(' ', '\\ '); - var fullLocation = path.join(getHomePath(), 'Library/Application\\ Support/Unison', location); + var fullLocation = path.join(Util.getHomePath(), 'Library/Application\\ Support/Unison', location); var cmd = '/bin/rm -rf ' + fullLocation; exec(cmd, function () {}); } @@ -118,4 +118,4 @@ resolveWatchers = function (callback) { }); callback(); -}; \ No newline at end of file +}; diff --git a/meteor/client/lib/utilities.js b/meteor/client/lib/utilities.js index c3fe268798..3315ad4040 100755 --- a/meteor/client/lib/utilities.js +++ b/meteor/client/lib/utilities.js @@ -1,17 +1,3 @@ -var path = require('path'); - -getBinDir = function () { - if (process.env.NODE_ENV === 'development') { - return path.join(path.join(process.env.PWD, '..'), 'resources'); - } else { - return path.join(process.cwd(), 'resources'); - } -}; - -getHomePath = function () { - return process.env[(process.platform === 'win32') ? 'USERPROFILE' : 'HOME']; -}; - showFormErrors = function ($form, errors) { for (var name in errors) { if (errors.hasOwnProperty(name)) { @@ -31,7 +17,7 @@ clearFormErrors = function ($form) { $form.find('.form-group.has-error .help-block.error').remove(); $form.find('.form-group.has-error').removeClass('has-error'); }; - + resetForm = function ($form) { $form.find('input').val(''); }; @@ -41,4 +27,4 @@ trackLink = function (trackLabel) { console.log(trackLabel); ga('send', 'event', 'link', 'click', trackLabel); } -}; \ No newline at end of file +}; diff --git a/meteor/client/lib/virtualbox.js b/meteor/client/lib/virtualbox.js index 6d362492a9..9022d22430 100644 --- a/meteor/client/lib/virtualbox.js +++ b/meteor/client/lib/virtualbox.js @@ -25,8 +25,8 @@ isResolverSetup = function (callback) { }; setupResolver = function (callback) { - var installFile = path.join(getBinDir(), 'install'); - var cocoaSudo = path.join(getBinDir(), 'cocoasudo'); + var installFile = path.join(Util.getBinDir(), 'install'); + var cocoaSudo = path.join(Util.getBinDir(), 'cocoasudo'); var execCommand = cocoaSudo + ' --prompt="Kitematic Setup wants to make changes. Type your password to allow this." ' + installFile; child_process.exec(execCommand, function (error, stdout, stderr) { console.log(stdout); @@ -41,7 +41,7 @@ setupResolver = function (callback) { }; setupVirtualBox = function (callback) { - child_process.exec('open -W ' + path.join(getBinDir(), 'virtualbox-4.3.12.pkg'), function (error, stdout, stderr) { + child_process.exec('open -W ' + path.join(Util.getBinDir(), 'virtualbox-4.3.12.pkg'), function (error, stdout, stderr) { console.log(stdout); if (error) { console.log(error); @@ -52,4 +52,3 @@ setupVirtualBox = function (callback) { callback(); }); }; - diff --git a/meteor/client/views/dashboard/apps/dashboard-single-app.js b/meteor/client/views/dashboard/apps/dashboard-single-app.js index acbd198e79..5d32c4818f 100755 --- a/meteor/client/views/dashboard/apps/dashboard-single-app.js +++ b/meteor/client/views/dashboard/apps/dashboard-single-app.js @@ -21,8 +21,8 @@ Template.dashboard_single_app.events({ }, 'click .btn-terminal': function () { var app = this; - var cmd = path.join(getBinDir(), 'boot2docker') + ' ssh -t "sudo docker-enter ' + app.docker.Id + '"'; - var terminalCmd = path.join(getBinDir(), 'terminal') + ' ' + cmd; + var cmd = path.join(Util.getBinDir(), 'boot2docker') + ' ssh -t "sudo docker-enter ' + app.docker.Id + '"'; + var terminalCmd = path.join(Util.getBinDir(), 'terminal') + ' ' + cmd; var exec = require('child_process').exec; console.log(terminalCmd); exec(terminalCmd, function (err, stdout) { diff --git a/meteor/collections/apps.js b/meteor/collections/apps.js index 5bbc9ef2a9..1b7ee7ce97 100755 --- a/meteor/collections/apps.js +++ b/meteor/collections/apps.js @@ -126,7 +126,7 @@ Apps.after.insert(function (userId, app) { } }); var image = Images.findOne(app.imageId); - copyVolumes(image.path, app.name); + Util.copyVolumes(image.path, app.name); app = Apps.findOne(appId); removeBindFolder(app.name, function (err) { if (err) { @@ -144,7 +144,7 @@ Apps.after.remove(function (userId, app) { deleteApp(app, function (err) { if (err) { console.error(err); } var appPath = path.join(KITE_PATH, app.name); - deleteFolder(appPath); + Util.deleteFolder(appPath); removeBindFolder(app.name, function () { console.log('Deleted Kite ' + app.name + ' directory.'); }); diff --git a/meteor/server/lib/utilities.js b/meteor/lib/utilities.js old mode 100755 new mode 100644 similarity index 54% rename from meteor/server/lib/utilities.js rename to meteor/lib/utilities.js index a0446ad702..12c03f9298 --- a/meteor/server/lib/utilities.js +++ b/meteor/lib/utilities.js @@ -1,8 +1,10 @@ -getHomePath = function () { +Util = {}; + +Util.getHomePath = function () { return process.env[(process.platform === 'win32') ? 'USERPROFILE' : 'HOME']; }; -getBinDir = function () { +Util.getBinDir = function () { if (process.env.NODE_ENV === 'development') { return path.join(path.join(process.env.PWD, '..'), 'resources'); } else { @@ -10,13 +12,13 @@ getBinDir = function () { } }; -deleteFolder = function (directory) { +Util.deleteFolder = function (directory) { if (fs.existsSync(directory)) { fs.readdirSync(directory).forEach(function (file) { var curDirectory = directory + '/' + file; if (fs.lstatSync(curDirectory).isDirectory()) { // Recurse - deleteFolder(curDirectory); + Util.deleteFolder(curDirectory); } else { // Delete File try { @@ -30,7 +32,7 @@ deleteFolder = function (directory) { } }; -copyFolder = function (src, dest) { +Util.copyFolder = function (src, dest) { var exists = fs.existsSync(src); var stats = exists && fs.statSync(src); var isDirectory = exists && stats.isDirectory(); @@ -41,7 +43,7 @@ copyFolder = function (src, dest) { console.error(e); } fs.readdirSync(src).forEach(function (childItemName) { - copyFolder(path.join(src, childItemName), path.join(dest, childItemName)); + Util.copyFolder(path.join(src, childItemName), path.join(dest, childItemName)); }); } else { try { @@ -52,37 +54,11 @@ copyFolder = function (src, dest) { } }; -getImageJSON = function (directory) { - var KITE_JSON_PATH = path.join(directory, 'image.json'); - if (fs.existsSync(KITE_JSON_PATH)) { - var data = fs.readFileSync(KITE_JSON_PATH, 'utf8'); - return JSON.parse(data); - } else { - return null; - } -}; - -copyVolumes = function (directory, appName) { +Util.copyVolumes = function (directory, appName) { var KITE_VOLUMES_PATH = path.join(directory, 'volumes'); if (fs.existsSync(KITE_VOLUMES_PATH)) { var destinationPath = path.join(KITE_PATH, appName); - copyFolder(KITE_VOLUMES_PATH, destinationPath); + Util.copyFolder(KITE_VOLUMES_PATH, destinationPath); console.log('Copied volumes for: ' + appName); } }; - -saveImageFolder = function (directory, imageId, callback) { - var destinationPath = path.join(KITE_IMAGES_PATH, imageId); - if (!fs.existsSync(destinationPath)) { - fs.mkdirSync(destinationPath, function (err) { - if (err) { callback(err); return; } - }); - copyFolder(directory, destinationPath); - console.log('Copied image folder for: ' + imageId); - callback(null); - } -}; - -saveImageFolderSync = function (directory, imageId) { - return Meteor._wrapAsync(saveImageFolder)(directory, imageId); -}; diff --git a/meteor/server/apps.js b/meteor/server/apps.js index a52495810f..a96174beeb 100755 --- a/meteor/server/apps.js +++ b/meteor/server/apps.js @@ -1,5 +1,5 @@ removeBindFolder = function (name, callback) { - exec(path.join(getBinDir(), 'boot2docker') + ' ssh "sudo rm -rf /var/lib/docker/binds/' + name + '"', function(err, stdout) { + exec(path.join(Util.getBinDir(), 'boot2docker') + ' ssh "sudo rm -rf /var/lib/docker/binds/' + name + '"', function(err, stdout) { callback(err, stdout); }); }; diff --git a/meteor/server/constants.js b/meteor/server/constants.js index e3fd37c46e..cb35d90451 100644 --- a/meteor/server/constants.js +++ b/meteor/server/constants.js @@ -1,4 +1,4 @@ -KITE_PATH = path.join(getHomePath(), 'Kitematic'); +KITE_PATH = path.join(Util.getHomePath(), 'Kitematic'); KITE_TAR_PATH = path.join(KITE_PATH, '.tar'); KITE_IMAGES_PATH = path.join(KITE_PATH, '.images'); diff --git a/meteor/server/docker.js b/meteor/server/docker.js index c46ec6de30..0e22efb2ff 100755 --- a/meteor/server/docker.js +++ b/meteor/server/docker.js @@ -306,7 +306,7 @@ resolveDefaultImages = function () { image.inspect(function (err) { if (err) { if (err.reason === 'no such image') { - docker.loadImage(path.join(getBinDir(), 'base-images.tar.gz'), {}, function (err) { + docker.loadImage(path.join(Util.getBinDir(), 'base-images.tar.gz'), {}, function (err) { if (err) { innerCallback(err); return; @@ -393,7 +393,7 @@ reloadDefaultContainers = function (callback) { return; } console.log('Loading new Kitematic default images.'); - docker.loadImage(path.join(getBinDir(), 'base-images.tar.gz'), {}, function (err) { + docker.loadImage(path.join(Util.getBinDir(), 'base-images.tar.gz'), {}, function (err) { if (err) { callback(err); return; diff --git a/meteor/server/images.js b/meteor/server/images.js index f83f21da7f..8663f92cc4 100755 --- a/meteor/server/images.js +++ b/meteor/server/images.js @@ -13,7 +13,7 @@ getImageMetaData = function (directory) { }; rebuildImage = function (image, callback) { - deleteFolder(image.path); + Util.deleteFolder(image.path); var imageMetaData = getImageMetaData(image.originPath); if (imageMetaData.logo) { Images.update(image._id, { @@ -141,7 +141,7 @@ Meteor.methods({ console.log('here'); try { deleteImageSync(image); - deleteFolder(image.path); + Util.deleteFolder(image.path); } catch (e) { console.log(e); } finally {