From 5f168a2a4a384d5e8239a2a4d7efed1c48837deb Mon Sep 17 00:00:00 2001 From: David Glasser Date: Wed, 6 Mar 2013 12:11:32 -0800 Subject: [PATCH] meteor update app --- lib/files.js | 3 +-- lib/meteor.js | 60 ++++++++++++++++++++++++++++++++------------------ lib/project.js | 11 ++++++++- 3 files changed, 50 insertions(+), 24 deletions(-) diff --git a/lib/files.js b/lib/files.js index 5819525c95..cfffb29aa2 100644 --- a/lib/files.js +++ b/lib/files.js @@ -160,8 +160,7 @@ var files = module.exports = { return test_dir; }, - // compatibility shim. delete when unused. - find_app_dir: function (filepath) { + findAppDir: function (filepath) { return files.find_upwards(files.is_app_dir, filepath); }, diff --git a/lib/meteor.js b/lib/meteor.js index 5ca1fcb58c..c476ee78a2 100644 --- a/lib/meteor.js +++ b/lib/meteor.js @@ -19,6 +19,8 @@ Fiber(function () { process.exit(1); } + var Commands = []; + var usage = function() { process.stdout.write( "Usage: meteor [--version] [--help] []\n" + @@ -48,7 +50,7 @@ Fiber(function () { // @param cmd {String} The command that was run. Used when printing // error message. var requireDirInApp = function (cmd) { - var app_dir = files.find_upwards(files.is_app_dir); + var app_dir = files.findAppDir(); if (app_dir) { return app_dir; } else { @@ -99,7 +101,7 @@ Fiber(function () { if (argv.release) return argv.release; - var appDir = files.find_upwards(files.is_app_dir); + var appDir = files.findAppDir(); if (appDir) return project.getMeteorReleaseVersion(appDir); else @@ -112,8 +114,6 @@ Fiber(function () { mongo_runner.find_mongo_port(app_dir, callback); }; - Commands = []; - var findCommand = function (name) { for (var i = 0; i < Commands.length; i++) if (Commands[i].name === name) @@ -273,7 +273,7 @@ Fiber(function () { "sample applications. Use --list to see the available examples."); var new_argv = opt.argv; - var appname; + var appPath; var example_dir = path.join(__dirname, '..', 'examples'); var examples = _.reject(fs.readdirSync(example_dir), function (e) { @@ -281,9 +281,9 @@ Fiber(function () { }); if (argv._.length === 1) { - appname = argv._[0]; + appPath = argv._[0]; } else if (argv._.length === 0 && new_argv.example) { - appname = new_argv.example; + appPath = new_argv.example; } if (new_argv['list']) { @@ -292,28 +292,28 @@ Fiber(function () { process.stdout.write(" " + e + "\n"); }); process.stdout.write("\n" + - "Create a project from an example with 'meteor create --example '.\n") + "Create a project from an example with 'meteor create --example '.\n"); process.exit(1); }; - if (argv.help || !appname) { + if (argv.help || !appPath) { process.stdout.write(opt.help()); process.exit(1); } - if (fs.existsSync(appname)) { - process.stderr.write(appname + ": Already exists\n"); + if (fs.existsSync(appPath)) { + process.stderr.write(appPath + ": Already exists\n"); process.exit(1); } - if (files.find_app_dir(appname)) { + if (files.findAppDir(appPath)) { process.stderr.write( "You can't create a Meteor project inside another Meteor project.\n"); process.exit(1); } var transform = function (x) { - return x.replace(/~name~/g, path.basename(appname)); + return x.replace(/~name~/g, path.basename(appPath)); }; if (new_argv.example) { @@ -322,12 +322,12 @@ Fiber(function () { process.stderr.write("List available applications with 'meteor create --list'.\n"); process.exit(1); } else { - files.cp_r(path.join(example_dir, new_argv.example), appname, { + files.cp_r(path.join(example_dir, new_argv.example), appPath, { ignore: [/^local$/] }); } } else { - files.cp_r(path.join(__dirname, 'skel'), appname, { + files.cp_r(path.join(__dirname, 'skel'), appPath, { transform_filename: function (f) { return transform(f); }, @@ -341,18 +341,17 @@ Fiber(function () { }); } - fs.writeFileSync(path.join(appname, '.meteor', 'release'), - releaseVersion + '\n'); + project.writeMeteorReleaseVersion(appPath, releaseVersion); - process.stderr.write(appname + ": created"); + process.stderr.write(appPath + ": created"); if (new_argv.example && - new_argv.example !== appname) + new_argv.example !== appPath) process.stderr.write(" (from '" + new_argv.example + "' template)"); process.stderr.write(".\n\n"); process.stderr.write( "To run your new app:\n" + - " cd " + appname + "\n" + + " cd " + appPath + "\n" + " meteor\n"); } }); @@ -405,7 +404,26 @@ Fiber(function () { " is already the latest release."); } - // XXX update app XXX + // If we're not in an app, then we're done. Otherwise, we have to upgrade + // the app too. + var appDir = files.findAppDir(); + if (!appDir) + return; + + var appRelease = project.getMeteorReleaseVersion(appDir); + if (appRelease === releaseVersion) { + console.log("Your app is already running Meteor release " + + releaseVersion + "."); + return; + } + + project.writeMeteorReleaseVersion(appDir, releaseVersion); + // This is the right spot to do any other changes we need to the app in + // order to update it for the new release (new metadata file formats, + // etc, or maybe even updating renamed APIs). + console.log("Updated app '%s' to release %s from release %s.", + appDir, releaseVersion, appRelease); + // XXX print change log } }); diff --git a/lib/project.js b/lib/project.js index e34d113139..b30859daff 100644 --- a/lib/project.js +++ b/lib/project.js @@ -60,8 +60,12 @@ var project = module.exports = { return ret; }, + _meteorReleaseFilePath: function (appDir) { + return path.join(appDir, '.meteor', 'release'); + }, + getMeteorReleaseVersion: function (appDir) { - var releasePath = path.join(appDir, '.meteor', 'release'); + var releasePath = project._meteorReleaseFilePath(appDir); if (fs.existsSync(releasePath)) return project._trim_line(project._get_lines(releasePath)[0]); else @@ -71,6 +75,11 @@ var project = module.exports = { return '0.6.0'; }, + writeMeteorReleaseVersion: function (appDir, release) { + var releasePath = project._meteorReleaseFilePath(appDir); + fs.writeFileSync(releasePath, release + '\n'); + }, + add_package: function (app_dir, name) { var lines = project._get_packages_lines(app_dir);